aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Moll <ralf@android.com>2012-04-10 12:43:05 -0700
committerandroid code review <noreply-gerritcodereview@google.com>2012-04-10 12:43:05 -0700
commit78805488af6d622bc53a6c1b383fc5e00f54a056 (patch)
tree7f0ea4f55cda3d6e8a51a179f075ae586aa9509a
parent4962dcfd83c5fc8a01c807185230afbfd62a0c4a (diff)
parent402794e73aed8611d62eb4b01cd155e2d76fcb87 (diff)
downloadeclipse-basebuilder-78805488af6d622bc53a6c1b383fc5e00f54a056.tar.gz
Merge "SDK: Add Eclipse basebuilder-3.6.2 + src, used for building RCP tools."
-rw-r--r--MODULE_LICENSE_EPL0
-rw-r--r--README.txt17
-rw-r--r--basebuilder-3.6.2/PREBUILT5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/.classpath36
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/.eclipseproduct3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/.project17
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/.settings/org.eclipse.jdt.core.prefs12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about.html250
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/IJG_README385
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/about_cairo.html48
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/lgpl-v21.txt506
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/mpl-v11.txt470
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/pixman-licenses.txt92
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/.project11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/README.txt3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/build.xml54
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.bat54
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.xml69
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/build.properties148
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/customTargets.xml131
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/build_types.html52
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/dlconfig.txt2
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/index.php148
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/FAIL.gifbin0 -> 117 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/OK.gifbin0 -> 139 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/buildNotes.php62
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/consoleLogs.php70
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/download.php54
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/index.html.template130
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/testResults.php.template92
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/testManifest.xml84
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/readme.html142
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/build.properties30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/customTargets.xml238
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/customTest.xml15
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/runtests.bat4
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/testing.properties51
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/readme.html166
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests96
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests.bat88
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/test.xml77
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/tools/TestVersionTracker.java113
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/config.ini63
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributions.3bin0 -> 2735 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributors.3bin0 -> 3688 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.extraData.3bin0 -> 56537 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.mainData.3bin0 -> 249227 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.1010
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.910
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTableLock0
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.namespaces.3bin0 -> 4088 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.orphans.3bin0 -> 93 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.table.3bin0 -> 17307 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.equinox.app/.manager/.fileTableLock0
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.bundledata.3bin0 -> 55784 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.lazy.3bin0 -> 263831 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.86
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.96
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTableLock0
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.state.3bin0 -> 19573 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/-543407111/artifacts.xml14
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/982983255/artifacts.xml14
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/110/1/.cp/ant_tasks/publisher-ant.jarbin0 -> 20274 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/118/1/.cp/lib/jarprocessor-ant.jarbin0 -> 12119 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/121/1/.cp/lib/apitooling-ant.jarbin0 -> 95943 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/2/data/SCRbin0 -> 4861 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/24/1/.cp/ant_tasks/helpbase-ant.jarbin0 -> 3314 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/27/1/.cp/lib/antsupportlib.jarbin0 -> 34099 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/34/1/.cp/ant_tasks/pde-ant.jarbin0 -> 10793 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/46/1/.cp/lib/repository-tools-ant.jarbin0 -> 44975 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/59/1/.cp/jdtCompilerAdapter.jarbin0 -> 12920 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/67/1/.cp/ant_tasks/director-ant.jarbin0 -> 11004 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/76/1/.cp/ant_tasks/resources-ant.jarbin0 -> 7975 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/84/1/.cp/ant_tasks/metadataRepository-ant.jarbin0 -> 11560 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/93/1/.cp/convert.jarbin0 -> 26291 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/manifests/org.eclipse.build.tools_1.0.0.MF8
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/history/1327097249000.xml5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/last.config.stampbin0 -> 16 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/platform.xml5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipsebin0 -> 63001 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse.ini13
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/epl-v10.html328
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/libXm.so.2bin0 -> 1915756 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/libcairo-swt.sobin0 -> 266168 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/notice.html79
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml230
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 17896 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 17896 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 19199 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 19199 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 11288 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.aix.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 245105 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 39457 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 168609 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 40125 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390x_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 40331 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 161529 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 179853 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 12310 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 11007 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.aix.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 31492 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.hpux.ia64_32_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 14991 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 888932 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 24526 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.ia64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 120578 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 17487 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 19076 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.wpf.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLYbin0 -> 26736 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.jdt_root_3.6.2.r362_v20101117-0800-7z8XFW6FLFlmjJcvz03jyeFBLS_Fbin0 -> 8825 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_3.6.2.r362_v20110210-9gF78Gs1FrIGnHDHWkEcopoN8AmxeZflGDGKQibin0 -> 47850 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.ppc_1.0.0.M20110210-1200bin0 -> 47030 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.x86_1.0.0.M20110210-1200bin0 -> 47030 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_1.0.0.M20110210-1200bin0 -> 48332 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_64_1.0.0.M20110210-1200bin0 -> 40421 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.aix.ppc64_1.0.0.M20110210-1200bin0 -> 245103 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc64_1.0.0.M20110210-1200bin0 -> 60976 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc_1.0.0.M20110210-1200bin0 -> 157148 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390_1.0.0.M20110210-1200bin0 -> 28664 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390x_1.0.0.M20110210-1200bin0 -> 28870 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_1.0.0.M20110210-1200bin0 -> 187617 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_64_1.0.0.M20110210-1200bin0 -> 205941 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.sparc_1.0.0.M20110210-1200bin0 -> 24399 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.x86_1.0.0.M20110210-1200bin0 -> 23096 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.aix.ppc_1.0.0.M20110210-1200bin0 -> 31490 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.hpux.ia64_32_1.0.0.M20110210-1200bin0 -> 14989 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.linux.x86_1.0.0.M20110210-1200bin0 -> 1163775 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_1.0.0.M20110210-1200bin0 -> 23179 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_64_1.0.0.M20110210-1200bin0 -> 26443 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_3.6.2.r362_v20101104-9SAxFMKFkSAqi8axkv1ZjegmiBLYbin0 -> 47850 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.engine/.settings/org.eclipse.equinox.p2.artifact.repository.prefs29
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/.cvsignore1
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/com.ibm.icu_4.2.1.v20100412.jarbin0 -> 6451211 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet.jsp_2.0.0.v200806031607.jarbin0 -> 62710 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet_2.5.0.v200910301333.jarbin0 -> 118874 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.RSAbin0 -> 3487 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.SF179
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/MANIFEST.MF234
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/eclipse.inf4
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about.html62
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.dom.html82
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.sax.txt20
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/NOTICE26
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/asl-v20.txt202
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant326
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.bat226
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.cmd93
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun24
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.bat50
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.pl66
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antenv.cmd98
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/complete-ant-cmd.pl114
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/envset.cmd131
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/lcp.bat31
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.pl153
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.py102
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runrc.cmd60
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/changelog.xsl148
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-frames.xsl299
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-text.xsl34
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-xdoc.xsl130
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/coverage-frames.xsl489
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend-frames.xsl487
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend.xsl276
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames-xalan1.xsl719
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames.xsl877
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-noframes.xsl467
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/log.xsl203
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/maudit-frames.xsl503
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/mmetrics-frames.xsl1026
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/tagdiff.xsl179
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-antlr.jarbin0 -> 5988 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bcel.jarbin0 -> 8976 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bsf.jarbin0 -> 4258 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-log4j.jarbin0 -> 3361 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-oro.jarbin0 -> 40262 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-regexp.jarbin0 -> 4103 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-resolver.jarbin0 -> 4406 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-logging.jarbin0 -> 4204 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-net.jarbin0 -> 47173 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jai.jarbin0 -> 21769 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-javamail.jarbin0 -> 7250 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jarbin0 -> 8393 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jmf.jarbin0 -> 6961 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jarbin0 -> 30998 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jarbin0 -> 93154 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jarbin0 -> 12380 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-netrexx.jarbin0 -> 10136 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jarbin0 -> 430679 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-starteam.jarbin0 -> 35392 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-stylebook.jarbin0 -> 2678 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jarbin0 -> 7061 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jarbin0 -> 7091 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-weblogic.jarbin0 -> 14506 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jarbin0 -> 1319377 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/plugin.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.codec_1.3.0.v20100518-1140.jarbin0 -> 55003 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.el_1.0.0.v201004212143.jarbin0 -> 128692 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.httpclient_3.1.0.v201005080502.jarbin0 -> 321330 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.logging_1.0.4.v201005080501.jarbin0 -> 45396 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.jasper_5.5.17.v201004212143.jarbin0 -> 1722552 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene.analysis_1.9.1.v20100518-1140.jarbin0 -> 71545 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene_1.9.1.v20100518-1140.jarbin0 -> 445306 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ant.core_3.2.200.v20100427.jarbin0 -> 97499 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.classpath12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.cvsignore3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.project28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/about.html30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/bugTools.jarbin0 -> 8829 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/buildTools.jarbin0 -> 67023 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/_README.txt2
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-eclipse-3.3.xml50
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-emf-2.3.xml39
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-uml2-uml-2.1.xml40
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/feedTools.jarbin0 -> 22076 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/plugin.xml95
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/UpdateBugStateTask.properties6
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/_README.txt13
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.eclipse.properties108
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.emf.properties100
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.uml2.properties94
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.emf.properties96
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.uml2.properties93
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/_README.txt2
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/atom10_build.xsd53
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/build.xsd223
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/customTest.xml.template16
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/publish.xml179
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/test.xml145
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/testing.properties.template52
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/_README.txt15
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/bugzillaLogin.sh47
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.sh5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.xml28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.sh5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.xml19
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.sh23
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.xml92
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.mysql.txt25
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.web.txt13
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/cvssrc/.cvsignore1
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/includes/parsecvs-dbaccess.php5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.dump161
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.truncate9
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-users.dump19
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.php163
-rwxr-xr-xbasebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.sh27
-rwxr-xr-xbasebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/setup.sh35
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/README.folder.contents.may.not.be.up.to.date.txt36
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/db.php12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs-dbaccess.php5
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs.css101
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/searchcvs.php267
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/_README.txt39
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.sh15
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.xml30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.sh15
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.xml23
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedValidatorJar.xml38
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.sh36
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.xml130
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulationEclipse.sh42
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.sh40
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.xml82
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedValidate.xml29
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.sh15
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.xml83
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/sendEmailAlert.sh103
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildMachineManager.java178
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildProperties.java334
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CompileErrorCheck.java239
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CvsDiffParser.java133
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/ElementParser.java134
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FetchValidator.java167
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FindMachineTask.java144
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/GenerateExcludeListTask.java137
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/Mailer.java257
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/SystemProperty.java48
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java220
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java78
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/AbstractApplication.java89
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java173
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/ErrorTracker.java224
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FetchBaseTask.java173
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FileCounter.java146
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/PlatformStatus.java59
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java1397
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java405
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/VersionTrackerTask.java204
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/services/bugzilla/UpdateBugStateTask.java706
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/Messages.java36
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/messages.properties46
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedAddEntryTask.java584
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedCreateFeedTask.java130
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedGetPropertyTask.java71
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedUpdateEntryTask.java338
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedPublisherTask.java236
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedWatcherTask.java257
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/Messages.java44
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/RSSFeedUtil.java148
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/messages.properties80
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jarbin0 -> 107210 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jarbin0 -> 91928 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.observable_1.3.0.I20100601-0800.jarbin0 -> 270401 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.property_1.3.0.I20100601-0800.jarbin0 -> 167676 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding_1.3.100.I20100601-0800.jarbin0 -> 199755 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jarbin0 -> 86986 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filebuffers_3.5.100.v20100520-0800.jarbin0 -> 113478 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem.win32.x86_1.1.201.R36x_v20100727-0745.jarbin0 -> 30065 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem_1.3.1.R36x_v20100727-0745.jarbin0 -> 52709 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.jobs_3.5.1.R36x_v20100824.jarbin0 -> 90875 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources.compatibility_3.4.0.v20090505.jarbin0 -> 121353 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources_3.6.1.R36x_v20101007-1215.jarbin0 -> 769815 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517.jarbin0 -> 22814 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jarbin0 -> 92810 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jarbin0 -> 70928 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.variables_3.2.400.v20100505.jarbin0 -> 33015 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.debug.core_3.6.0.v20100519.jarbin0 -> 342636 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100529-0735.jarbin0 -> 51226 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.identity_3.1.0.v20100529-0735.jarbin0 -> 54612 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100529-0735.jarbin0 -> 16723 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100529-0735.jarbin0 -> 68420 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100529-0735.jarbin0 -> 8458 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100529-0735.jarbin0 -> 125188 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.ssl_1.0.0.v20100529-0735.jarbin0 -> 11551 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf_3.1.0.v20100529-0735.jarbin0 -> 94407 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.app_1.3.1.R36x_v20100803.jarbin0 -> 83838 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jarbin0 -> 101957 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.ds_1.2.1.R36x_v20100803.jarbin0 -> 184119 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.event_1.2.0.v20100503.jarbin0 -> 30581 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin.equinox_1.0.200.v20100505.jarbin0 -> 61052 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin_2.0.0.v20100503.jarbin0 -> 34985 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSAbin0 -> 5639 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF17
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.sobin0 -> 165178 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/launcher.gtk.linux.x86.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jarbin0 -> 47023 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSAbin0 -> 5638 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF17
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.dllbin0 -> 53248 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/launcher.win32.win32.x86.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jarbin0 -> 47023 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.artifact.repository_1.1.1.R36x_v20100901.jarbin0 -> 124554 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.console_1.0.200.v20100601.jarbin0 -> 23545 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.core_2.0.2.R36x_v20100804.jarbin0 -> 67979 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director.app_1.0.201.R36x_v20100823.jarbin0 -> 53983 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director_2.0.3.R36x_v20101117-1018.jarbin0 -> 97262 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.directorywatcher_1.0.203.R36x_v20101027.jarbin0 -> 31528 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.engine_2.0.0.v20100606.jarbin0 -> 177986 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.extensionlocation_1.2.0.v20100518.jarbin0 -> 33915 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.garbagecollector_1.0.100.v20100503.jarbin0 -> 24513 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20100503a.jarbin0 -> 67002 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.generator_1.0.200.v20100503a.jarbin0 -> 133218 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.repository_1.1.0.v20100513.jarbin0 -> 108920 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata_2.0.0.v20100601.jarbin0 -> 328282 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.operations_2.0.0.v20100510.jarbin0 -> 49522 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.publisher_1.1.2.v20100824-2220.jarbin0 -> 279659 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ql_2.0.0.v20100503a.jarbin0 -> 7799 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.reconciler.dropins_1.1.2.R36x_v20101111-1430.jarbin0 -> 43866 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository.tools_2.0.1.R36x_v20100823.jarbin0 -> 228870 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository_2.0.1.R36x_v20100823.jarbin0 -> 150674 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.eclipse_2.0.2.R36x_v20100823.jarbin0 -> 117919 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.natives_1.0.200.v20100503a.jarbin0 -> 49913 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler_1.0.0.v20100507-1815.jarbin0 -> 58360 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk_1.0.100.v20100513.jarbin0 -> 39204 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatechecker_1.1.101.R36x_v20100823.jarbin0 -> 16794 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatesite_1.0.201.R36x_v20100823.jarbin0 -> 81628 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jarbin0 -> 111098 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jarbin0 -> 182596 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.security_1.0.200.v20100503.jarbin0 -> 106100 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20100503.jarbin0 -> 22829 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jarbin0 -> 39331 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.util_1.0.200.v20100503.jarbin0 -> 76820 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.appserver_3.1.400.v20100427.jarbin0 -> 18305 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.base_3.5.2.v201011171123.jarbin0 -> 398862 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help_3.5.0.v20100524.jarbin0 -> 257403 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.apt.core_3.3.401.R36_v20100727-0110.jarbin0 -> 363706 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core.contrib.converter_1.1.2.200703120901.jarbin0 -> 24722 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core_3.6.2.v_A76_R36x.jarbin0 -> 4513443 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/.api_description42
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.RSAbin0 -> 5639 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.SF26
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/MANIFEST.MF60
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/eclipse.inf3
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdi.jarbin0 -> 67870 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdimodel.jarbin0 -> 831035 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.properties42
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.xml354
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.launching_3.5.100.v20100526.jarbin0 -> 292693 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.databinding_1.4.0.I20100601-0800.jarbin0 -> 268069 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text.source_3.6.1.r361_v20100825-0800.jarbin0 -> 728681 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text_3.6.1.r361_v20100825-0800.jarbin0 -> 977596 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface_3.6.1.M20100825-0800.jarbin0 -> 1069488 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.services_3.2.100.v20100503.jarbin0 -> 67435 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.util_3.2.100.v20100503.jarbin0 -> 23758 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.1.R36x_v20100806.jarbin0 -> 1147555 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.2.R36x_v20101103.jarbin0 -> 1148406 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/fragmentcdcfoundation10.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.0_Foundation-1.0.zipbin0 -> 156744 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/fragmentcdcfoundation11.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.1_Foundation-1.1.zipbin0 -> 163443 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/fragmentj2se12.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zipbin0 -> 702014 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/fragmentj2se13.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zipbin0 -> 828460 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/fragmentj2se14.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zipbin0 -> 1190636 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/fragmentj2se15.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zipbin0 -> 1420992 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/fragmentjavase16.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zipbin0 -> 1616005 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/fragmentjre11.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zipbin0 -> 180307 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/fragmentosgiminimum10.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.0.zipbin0 -> 88567 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/META-INF/MANIFEST.MF11
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/fragmentosgiminimum11.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.1.zipbin0 -> 92530 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/META-INF/MANIFEST.MF12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/about.html28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/fragmentosgiminimum12.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zipbin0 -> 155625 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools_1.0.202.v20100820_r361.jarbin0 -> 732601 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.api_description8
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.options2
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.RSAbin0 -> 5639 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.SF95
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/MANIFEST.MF137
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/eclipse.inf4
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about.html66
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about_files/LICENSE-2.0.txt202
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/fragment/fragment.xml14
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/plugin/plugin.xml12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/META-INF/MANIFEST.MF8
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/fragment.xml9
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/META-INF/MANIFEST.MF6
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/plugin.xml9
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/env.properties63
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/lib/pdebuild-ant.jarbin0 -> 77776 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/pdebuild.jarbin0 -> 431838 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.properties14
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.xml169
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/build.xml153
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/genericTargets.xml242
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/package.xml98
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/allElements.xml142
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/productBuild.xml73
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/features/customBuildCallbacks.xml32
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/allElements.xml52
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/build.properties255
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customAssembly.xml66
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customTargets.xml175
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/customTargets.xml81
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packager.properties110
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packaging.properties28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/plugins/customBuildCallbacks.xml158
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.core_3.6.1.v20100902_r361.jarbin0 -> 1161018 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.gtk.linux.x86_3.6.1.v3657a.jarbin0 -> 2254381 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.win32.win32.x86_3.6.1.v3657a.jarbin0 -> 2433620 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt_3.6.1.v3657a.jarbin0 -> 17326 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.team.core_3.5.100.R36x_v20100825-0800.jarbin0 -> 386285 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.classpath7
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.project28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/META-INF/MANIFEST.MF27
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/about.html23
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/build.properties26
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/contexts.xml30
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/help.html108
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_error_warning.pngbin0 -> 4131 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_explained_regression.pngbin0 -> 8980 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_no_baseline.pngbin0 -> 3902 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_baseline.pngbin0 -> 3054 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_current.pngbin0 -> 2536 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_error.pngbin0 -> 938 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/linear.pngbin0 -> 28434 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/log.pngbin0 -> 28544 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/percentage.pngbin0 -> 25967 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/builds.html84
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/components.html92
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-baseline.pngbin0 -> 16295 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-fingerprints.pngbin0 -> 10554 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-menu.pngbin0 -> 7900 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-missinglocaldata.pngbin0 -> 6929 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-nolocaldata.pngbin0 -> 6671 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-update.pngbin0 -> 7448 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-updateall.pngbin0 -> 13613 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/components.pngbin0 -> 8800 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/perspective.pngbin0 -> 25639 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/preferences.pngbin0 -> 16925 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-survey-comment.pngbin0 -> 1821 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-warnings.pngbin0 -> 13852 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-comment.pngbin0 -> 78510 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-components.pngbin0 -> 14700 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-failures.pngbin0 -> 65974 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/local_data.html41
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/overview.html46
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/preferences.html57
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/properties.html46
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/results.html57
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/verification.html31
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/builds.gifbin0 -> 338 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/components.gifbin0 -> 101 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/perfs.gifbin0 -> 535 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/results.gifbin0 -> 360 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/sample.gifbin0 -> 983 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL.gifbin0 -> 73 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_caution.gifbin0 -> 73 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_greyed.gifbin0 -> 93 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK.gifbin0 -> 80 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK_caution.gifbin0 -> 79 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/Unknown.gifbin0 -> 840 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/descriptions.html18
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/fp.bmpbin0 -> 256320 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/light.gifbin0 -> 553 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sr.bmpbin0 -> 354590 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sst.bmpbin0 -> 1096038 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/warning_obj.gifbin0 -> 324 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/performanceui.jarbin0 -> 675637 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.properties12
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.xml84
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/readme.html77
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/Fingerprints.js32
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.css34
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.js23
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults7
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults.bat6
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/plugin.xml.template28
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/results.properties20
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/AbstractResults.java255
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/BuildResults.java588
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ComponentResults.java445
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ConfigResults.java663
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/DB_Results.java1299
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/PerformanceResults.java955
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/SQL_Results.java289
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ScenarioResults.java407
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsElement.java372
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsProperties.java121
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ComponentResultsElement.java232
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ConfigResultsElement.java498
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/DimResultsElement.java135
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/PerformanceResultsElement.java327
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ResultsElement.java599
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ScenarioResultsElement.java158
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/BuildsView.java659
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentResultsView.java531
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentsView.java513
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ConfigTab.java584
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPerspective.java69
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferenceInitializer.java86
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferencePage.java1216
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformancesView.java710
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/filter_ps.gifbin0 -> 219 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/help.gifbin0 -> 622 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/icallout_obj.gifbin0 -> 358 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/IPerformancesConstants.java136
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/Util.java557
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/BarGraph.java294
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrint.java232
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrintGraph.java672
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/GenerateResults.java1050
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/LineGraph.java200
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Main.java50
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Messages.java75
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/RawDataTable.java185
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioData.java469
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioStatusTable.java233
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraph.java299
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraphItem.java93
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/UiPlugin.java67
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Utils.java416
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/messages.properties14
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/toc.xml16
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance_3.6.0.v20091014.jarbin0 -> 142165 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.text_3.5.0.v20100601-1300.jarbin0 -> 248071 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.forms_3.5.2.r36_v20100702.jarbin0 -> 299001 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.ide_3.6.2.M20101117-0800.jarbin0 -> 2293233 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.views_3.5.0.I20100527-0800.jarbin0 -> 90110 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.workbench_3.6.1.M20101117-0800.jarbin0 -> 4133318 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui_3.6.1.M20100826-1330.jarbin0 -> 152805 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.configurator_3.3.100.v20100512.jarbin0 -> 99897 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.core.win32_3.2.200.v20100512.jarbin0 -> 86328 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSAbin0 -> 5639 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF20
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF29
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/eclipse.inf4
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about.html46
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about_files/cpl-v10.html125
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/junit.jarbin0 -> 121204 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/plugin.properties13
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.server_6.1.23.v201004211559.jarbin0 -> 557432 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.util_6.1.23.v201004211559.jarbin0 -> 192843 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.objectweb.asm_3.2.0.v200909071300.jarbin0 -> 229436 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.core_2.2.0.v20100429.jarbin0 -> 193845 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.pb_2.2.0.v20100429.jarbin0 -> 121388 bytes
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme.html305
-rw-r--r--basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme/readme_eclipse.html2227
-rw-r--r--src/README.txt5
-rw-r--r--src/eclipse-sourceBuild-srcIncluded-3.6.2.zipbin0 -> 141426113 bytes
624 files changed, 48272 insertions, 0 deletions
diff --git a/MODULE_LICENSE_EPL b/MODULE_LICENSE_EPL
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_EPL
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..ebfee33
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,17 @@
+Eclipse basebuilder is used to build Eclipse plugins. These are only used during the build and are not released.
+For more info, consult: http://wiki.eclipse.org/Platform-releng-basebuilder
+
+--- /basebuilder-3.6.2 directory:
+
+The contents of the basebuilder-3-6.2. directory were retrieved as follows:
+$ cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse/ login
+$ cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse/ checkout -r R3_6_2 org.eclipse.releng.basebuilder
+$ find . -name "CVS" -exec rm -rf {} \;
+
+--- /src directory:
+
+To find the Eclipse sources matching basebuilder-3.6.2:
+- open the Eclipse 3.6.2 download page:
+ http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php
+- fetch "Source Build (Source in .zip)" eclipse-sourceBuild-srcIncluded-3.6.2.zip [135 MB]
+
diff --git a/basebuilder-3.6.2/PREBUILT b/basebuilder-3.6.2/PREBUILT
new file mode 100644
index 0000000..0c4e7fa
--- /dev/null
+++ b/basebuilder-3.6.2/PREBUILT
@@ -0,0 +1,5 @@
+The contents of the the org.eclipse.releng.basebuilder were retrieved as follows:
+
+$ cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse/ login
+$ cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse/ checkout -r R3_6_2 org.eclipse.releng.basebuilder
+$ find . -name "CVS" -exec rm -rf {} \;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.classpath b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.classpath
new file mode 100644
index 0000000..82ed43b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.classpath
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="plugins/org.eclipse.build.tools/src"/>
+ <classpathentry kind="src" path="plugins/org.eclipse.build.tools/src_rss"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/ibm142"/>
+ <classpathentry kind="lib" path="/eclipseInternalBuildTools/plugins/org.eclipse.internal.build.tools/j2ee.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-antlr.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bcel.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bsf.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-log4j.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-oro.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-regexp.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-resolver.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-logging.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-net.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jai.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-javamail.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jmf.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-netrexx.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-starteam.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-stylebook.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar"/>
+ <classpathentry kind="lib" path="plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-weblogic.jar"/>
+ <classpathentry kind="lib" path="plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar"/>
+ <classpathentry kind="lib" path="plugins/org.eclipse.osgi_3.6.2.R36x_v20101103.jar"/>
+ <classpathentry kind="lib" path="plugins/org.eclipse.swt_3.6.1.v3657a.jar"/>
+ <classpathentry kind="lib" path="plugins/org.eclipse.swt.win32.win32.x86_3.6.1.v3657a.jar"/>
+ <classpathentry kind="output" path="plugins/bin"/>
+</classpath>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.eclipseproduct b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.eclipseproduct
new file mode 100644
index 0000000..7528c8b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.eclipseproduct
@@ -0,0 +1,3 @@
+name=Eclipse Platform
+id=org.eclipse.platform
+version=3.4.0 \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.project b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.project
new file mode 100644
index 0000000..c877602
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.releng.basebuilder</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.settings/org.eclipse.jdt.core.prefs b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..877dede
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Apr 09 10:35:58 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about.html
new file mode 100644
index 0000000..c102741
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about.html
@@ -0,0 +1,250 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>August 17, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for
+terms and conditions of use.</p>
+
+<h4>Gnome Binding</h4>
+
+<p>The &quot;Gnome Binding&quot; is a binding to the Gnome API. The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Gnome Binding:</p>
+<ul>
+ <li>libswt-gnome-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Gnome Binding:</p>
+<ul>
+ <li>The contents of the directory org/eclipse/swt/internal/gnome (but not including any sub-directories)</li>
+</ul>
+
+<p>The Gnome Binding contains portions of Gnome (&quot;Library&quot;). Gnome is made available by The Free Software Foundation. Use of the Library is governed by the terms and
+conditions of the GNU Lesser General Public License Version 2.1 (&quot;LGPL&quot;). Use of the Gnome Binding on a standalone
+basis, is also governed by the terms and conditions of the LGPL. A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
+<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
+
+<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
+containing portions of the Library (e.g. the Gnome Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
+other terms and conditions of Section 6 as well as other Sections of the LGPL. Please note, if you modify the Gnome Binding such modifications shall be
+governed by the terms and conditions of the LGPL. Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
+work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
+
+<h4>GTK+ Binding</h4>
+
+<p>The &quot;GTK+ Binding&quot; is a binding to the GTK+ API. The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the GTK+ Binding:</p>
+<ul>
+ <li>libswt-atk-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+ <li>libswt-pi-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the GTK+ Binding:</p>
+<ul>
+ <li>The contents of the directory org/eclipse/swt/internal/accessibility/gtk (but not including any sub-directories)</li>
+ <li>The contents of the directory org/eclipse/swt/internal/cde (but not including any sub-directories)</li>
+ <li>The contents of the directory org/eclipse/swt/internal/gtk (but not including any sub-directories)</li>
+ <li>The contents of the directory org/eclipse/swt/internal/kde (but not including any sub-directories)</li>
+</ul>
+
+<p>The GTK+ Binding contains portions of GTK+ (&quot;Library&quot;). GTK+ is made available by The Free Software Foundation. Use of the Library is governed by the terms and
+conditions of the GNU Lesser General Public License Version 2.1 (&quot;LGPL&quot;). Use of the GTK+ Binding on a standalone
+basis, is also governed by the terms and conditions of the LGPL. A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
+<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
+
+<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
+containing portions of the Library (e.g. the GTK+ Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
+other terms and conditions of Section 6 as well as other Sections of the LGPL. Please note, if you modify the GTK+ Binding such modifications shall be
+governed by the terms and conditions of the LGPL. Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
+work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
+
+<h4>Mozilla Binding</h4>
+
+<p>The &quot;Mozilla Binding&quot; is a binding to the Mozilla API. The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Mozilla Binding:</p>
+<ul>
+ <li>libswt-mozilla-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+ <li>libswt-mozilla-gcc3-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+ <li>libswt-xulrunner-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+ <li>libswt-xpcominit-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Mozilla Binding:</p>
+<ul>
+ <li>The contents of the directory org/eclipse/swt/internal/mozilla (but not including any sub-directories)</li>
+</ul>
+
+<p>The Mozilla Binding contains portions of Mozilla (&quot;Mozilla&quot;). Mozilla is made available by Mozilla.org. Use of Mozilla is governed by the terms and
+conditions of the Mozilla Public License Version 1.1 (&quot;MPL&quot;). A copy of the MPL is provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at
+<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
+
+<h4>Cairo Binding</h4>
+
+<p>The &quot;Cairo Binding&quot; is a binding to the Cairo API. The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Cairo Binding:</p>
+<ul>
+ <li>libswt-cairo-gtk-xxxx.so (where &quot;xxxx&quot; is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Cairo Binding:</p>
+<ul>
+ <li>The contents of the directory org/eclipse/swt/internal/cairo (but not including any sub-directories)</li>
+</ul>
+
+<p>The Cairo Binding contains portions of Cairo (&quot;Cairo&quot;). Cairo is made available by the Cairo project at
+<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>. Use of Cairo by the Cairo Binding is governed by the terms and
+conditions of the Mozilla Public License Version 1.1 (&quot;MPL&quot;). A copy of the MPL is
+provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
+
+<h4>Cairo for Linux</h4>
+
+<p>Refer to the file <a href="about_files/about_cairo.html">about_files/about_cairo.html</a> for licensing details about &quot;Cairo for Linux.&quot;
+
+<h4>Independent JPEG Group's JPEG software release 6b</h4>
+
+<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b (&quot;LIBJPEG&quot;).
+LIBJPEG was used to implement the decoding of JPEG format files in Java (TM). The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
+
+<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
+with the Content.</p>
+
+<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
+
+<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
+
+<ul>
+ <li>cderror.h</li>
+ <li>cdjpeg.h</li>
+ <li>jchuff.h</li>
+ <li>jdcolor.c</li>
+ <li>jdct.h</li>
+ <li>jdhuff.h</li>
+ <li>jerror.h</li>
+ <li>jidctint.c</li>
+ <li>jinclude.h</li>
+ <li>jmemsys.h</li>
+ <li>jmorecfg.h</li>
+ <li>jpegint.h</li>
+ <li>jpeglib.h</li>
+ <li>jversion.h</li>
+ <li>transupp.h</li>
+</ul>
+
+<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
+
+<ul>
+ <li>jcapimin.c</li>
+ <li>jcapistd.c</li>
+ <li>jccoefct.c</li>
+ <li>jccolor.c</li>
+ <li>jcdctmgr.c</li>
+ <li>jchuff.c</li>
+ <li>jcinit.c</li>
+ <li>jcmainct.c</li>
+ <li>jcmarker.c</li>
+ <li>jcmaster.c</li>
+ <li>jcomapi.c</li>
+ <li>jcparam.c</li>
+ <li>jcphuff.c</li>
+ <li>jcprepct.c</li>
+ <li>jcsample.c</li>
+ <li>jctrans.c</li>
+ <li>jdapimin.c</li>
+ <li>jdapistd.c</li>
+ <li>jdatadst.c</li>
+ <li>jdatasrc.c</li>
+ <li>jdcoefct.c</li>
+ <li>jdcolor.c</li>
+ <li>jddctmgr.c</li>
+ <li>jdhuff.c</li>
+ <li>jdinput.c</li>
+ <li>jdmainct.c</li>
+ <li>jdmarker.c</li>
+ <li>jdmaster.c</li>
+ <li>jdmerge.c</li>
+ <li>jdphuff.c</li>
+ <li>jdpostct.c</li>
+ <li>jdsample.c</li>
+ <li>jdtrans.c</li>
+ <li>jerror.c</li>
+ <li>jfdctflt.c</li>
+ <li>jfdctfst.c</li>
+ <li>jfdctint.c</li>
+ <li>jidctflt.c</li>
+ <li>jidctfst.c</li>
+ <li>jidctint.c</li>
+ <li>jidctred.c</li>
+ <li>jpegtran.c</li>
+ <li>jquant1.c</li>
+ <li>jquant2.c</li>
+ <li>jutils.c</li>
+ <li>cderror.h</li>
+ <li>cdjpeg.h</li>
+ <li>jchuff.h</li>
+ <li>jconfig.h</li>
+ <li>jdct.h</li>
+ <li>jdhuff.h</li>
+ <li>jerror.h</li>
+ <li>jinclude.h</li>
+ <li>jmorecfg.h</li>
+ <li>jpegint.h</li>
+ <li>jpeglib.h</li>
+ <li>jversion.h</li>
+ <li>transupp.h</li>
+</ul>
+
+<p>The following changes were made to the LIBJPEG code in the Content:</p>
+
+<ol>
+ <li>In Java, pointer math is not allowed so indexing was used instead.</li>
+ <li>Function pointers were replaced with switch statements.</li>
+ <li>The virtual memory, tracing and progress monitoring were removed.</li>
+ <li>The error handling was simplified and now uses Java exceptions.</li>
+</ol>
+
+<h4>PuTTY 0.58 (derivative work)</h4>
+
+<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org. Use of PuTTY is governed by the terms and
+conditions of the the following MIT-style license: </p>
+<blockquote>
+ <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
+ <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn, and CORE SDI S.A.</em> </p>
+ <p><em>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</em> </p>
+ <p><em>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</em> </p>
+ <p><em>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
+</blockquote>
+<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
+
+<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/IJG_README b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/IJG_README
new file mode 100644
index 0000000..86cc206
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/IJG_README
@@ -0,0 +1,385 @@
+The Independent JPEG Group's JPEG software
+==========================================
+
+README for release 6b of 27-Mar-1998
+====================================
+
+This distribution contains the sixth public release of the Independent JPEG
+Group's free JPEG software. You are welcome to redistribute this software and
+to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
+
+Serious users of this software (particularly those incorporating it into
+larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
+our electronic mailing list. Mailing list members are notified of updates
+and have a chance to participate in technical discussions, etc.
+
+This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
+Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
+Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
+Group.
+
+IJG is not affiliated with the official ISO JPEG standards committee.
+
+
+DOCUMENTATION ROADMAP
+=====================
+
+This file contains the following sections:
+
+OVERVIEW General description of JPEG and the IJG software.
+LEGAL ISSUES Copyright, lack of warranty, terms of distribution.
+REFERENCES Where to learn more about JPEG.
+ARCHIVE LOCATIONS Where to find newer versions of this software.
+RELATED SOFTWARE Other stuff you should get.
+FILE FORMAT WARS Software *not* to get.
+TO DO Plans for future IJG releases.
+
+Other documentation files in the distribution are:
+
+User documentation:
+ install.doc How to configure and install the IJG software.
+ usage.doc Usage instructions for cjpeg, djpeg, jpegtran,
+ rdjpgcom, and wrjpgcom.
+ *.1 Unix-style man pages for programs (same info as usage.doc).
+ wizard.doc Advanced usage instructions for JPEG wizards only.
+ change.log Version-to-version change highlights.
+Programmer and internal documentation:
+ libjpeg.doc How to use the JPEG library in your own programs.
+ example.c Sample code for calling the JPEG library.
+ structure.doc Overview of the JPEG library's internal structure.
+ filelist.doc Road map of IJG files.
+ coderules.doc Coding style rules --- please read if you contribute code.
+
+Please read at least the files install.doc and usage.doc. Useful information
+can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
+ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
+
+If you want to understand how the JPEG code works, we suggest reading one or
+more of the REFERENCES, then looking at the documentation files (in roughly
+the order listed) before diving into the code.
+
+
+OVERVIEW
+========
+
+This package contains C software to implement JPEG image compression and
+decompression. JPEG (pronounced "jay-peg") is a standardized compression
+method for full-color and gray-scale images. JPEG is intended for compressing
+"real-world" scenes; line drawings, cartoons and other non-realistic images
+are not its strong suit. JPEG is lossy, meaning that the output image is not
+exactly identical to the input image. Hence you must not use JPEG if you
+have to have identical output bits. However, on typical photographic images,
+very good compression levels can be obtained with no visible change, and
+remarkably high compression levels are possible if you can tolerate a
+low-quality image. For more details, see the references, or just experiment
+with various compression settings.
+
+This software implements JPEG baseline, extended-sequential, and progressive
+compression processes. Provision is made for supporting all variants of these
+processes, although some uncommon parameter settings aren't implemented yet.
+For legal reasons, we are not distributing code for the arithmetic-coding
+variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting
+the hierarchical or lossless processes defined in the standard.
+
+We provide a set of library routines for reading and writing JPEG image files,
+plus two sample applications "cjpeg" and "djpeg", which use the library to
+perform conversion between JPEG and some other popular image file formats.
+The library is intended to be reused in other applications.
+
+In order to support file conversion and viewing software, we have included
+considerable functionality beyond the bare JPEG coding/decoding capability;
+for example, the color quantization modules are not strictly part of JPEG
+decoding, but they are essential for output to colormapped file formats or
+colormapped displays. These extra functions can be compiled out of the
+library if not required for a particular application. We have also included
+"jpegtran", a utility for lossless transcoding between different JPEG
+processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
+inserting and extracting textual comments in JFIF files.
+
+The emphasis in designing this software has been on achieving portability and
+flexibility, while also making it fast enough to be useful. In particular,
+the software is not intended to be read as a tutorial on JPEG. (See the
+REFERENCES section for introductory material.) Rather, it is intended to
+be reliable, portable, industrial-strength code. We do not claim to have
+achieved that goal in every aspect of the software, but we strive for it.
+
+We welcome the use of this software as a component of commercial products.
+No royalty is required, but we do ask for an acknowledgement in product
+documentation, as described under LEGAL ISSUES.
+
+
+LEGAL ISSUES
+============
+
+In plain English:
+
+1. We don't promise that this software works. (But if you find any bugs,
+ please let us know!)
+2. You can use this software for whatever you want. You don't have to pay us.
+3. You may not pretend that you wrote this software. If you use it in a
+ program, you must acknowledge somewhere in your documentation that
+ you've used the IJG code.
+
+In legalese:
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose. This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library. If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it. This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+by the usual distribution terms of the Free Software Foundation; principally,
+that you must include source code if you redistribute it. (See the file
+ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
+of any program generated from the IJG code, this does not limit you more than
+the foregoing paragraphs do.
+
+The Unix configuration script "configure" was produced with GNU Autoconf.
+It is copyright by the Free Software Foundation but is freely distributable.
+The same holds for its supporting scripts (config.guess, config.sub,
+ltconfig, ltmain.sh). Another support script, install-sh, is copyright
+by M.I.T. but is also freely distributable.
+
+It appears that the arithmetic coding option of the JPEG spec is covered by
+patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot
+legally be used without obtaining one or more licenses. For this reason,
+support for arithmetic coding has been removed from the free JPEG software.
+(Since arithmetic coding provides only a marginal gain over the unpatented
+Huffman mode, it is unlikely that very many implementations will support it.)
+So far as we are aware, there are no patent restrictions on the remaining
+code.
+
+The IJG distribution formerly included code to read and write GIF files.
+To avoid entanglement with the Unisys LZW patent, GIF reading support has
+been removed altogether, and the GIF writer has been simplified to produce
+"uncompressed GIFs". This technique does not use the LZW algorithm; the
+resulting GIF files are larger than usual, but are readable by all standard
+GIF decoders.
+
+We are required to state that
+ "The Graphics Interchange Format(c) is the Copyright property of
+ CompuServe Incorporated. GIF(sm) is a Service Mark property of
+ CompuServe Incorporated."
+
+
+REFERENCES
+==========
+
+We highly recommend reading one or more of these references before trying to
+understand the innards of the JPEG software.
+
+The best short technical introduction to the JPEG compression algorithm is
+ Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
+ Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
+(Adjacent articles in that issue discuss MPEG motion picture compression,
+applications of JPEG, and related topics.) If you don't have the CACM issue
+handy, a PostScript file containing a revised version of Wallace's article is
+available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz. The file (actually
+a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
+omits the sample images that appeared in CACM, but it includes corrections
+and some added material. Note: the Wallace article is copyright ACM and IEEE,
+and it may not be used for commercial purposes.
+
+A somewhat less technical, more leisurely introduction to JPEG can be found in
+"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
+M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides
+good explanations and example C code for a multitude of compression methods
+including JPEG. It is an excellent source if you are comfortable reading C
+code but don't know much about data compression in general. The book's JPEG
+sample code is far from industrial-strength, but when you are ready to look
+at a full implementation, you've got one here...
+
+The best full description of JPEG is the textbook "JPEG Still Image Data
+Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
+by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp.
+The book includes the complete text of the ISO JPEG standards (DIS 10918-1
+and draft DIS 10918-2). This is by far the most complete exposition of JPEG
+in existence, and we highly recommend it.
+
+The JPEG standard itself is not available electronically; you must order a
+paper copy through ISO or ITU. (Unless you feel a need to own a certified
+official copy, we recommend buying the Pennebaker and Mitchell book instead;
+it's much cheaper and includes a great deal of useful explanatory material.)
+In the USA, copies of the standard may be ordered from ANSI Sales at (212)
+642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI
+doesn't take credit card orders, but Global does.) It's not cheap: as of
+1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
+shipping/handling. The standard is divided into two parts, Part 1 being the
+actual specification, while Part 2 covers compliance testing methods. Part 1
+is titled "Digital Compression and Coding of Continuous-tone Still Images,
+Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
+10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of
+Continuous-tone Still Images, Part 2: Compliance testing" and has document
+numbers ISO/IEC IS 10918-2, ITU-T T.83.
+
+Some extensions to the original JPEG standard are defined in JPEG Part 3,
+a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84. IJG
+currently does not support any Part 3 extensions.
+
+The JPEG standard does not specify all details of an interchangeable file
+format. For the omitted details we follow the "JFIF" conventions, revision
+1.02. A copy of the JFIF spec is available from:
+ Literature Department
+ C-Cube Microsystems, Inc.
+ 1778 McCarthy Blvd.
+ Milpitas, CA 95035
+ phone (408) 944-6300, fax (408) 944-6314
+A PostScript version of this document is available by FTP at
+ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz. There is also a plain text
+version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
+the figures.
+
+The TIFF 6.0 file format specification can be obtained by FTP from
+ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
+found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
+IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
+Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
+(Compression tag 7). Copies of this Note can be obtained from ftp.sgi.com or
+from ftp://ftp.uu.net/graphics/jpeg/. It is expected that the next revision
+of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
+Although IJG's own code does not support TIFF/JPEG, the free libtiff library
+uses our library to implement TIFF/JPEG per the Note. libtiff is available
+from ftp://ftp.sgi.com/graphics/tiff/.
+
+
+ARCHIVE LOCATIONS
+=================
+
+The "official" archive site for this software is ftp.uu.net (Internet
+address 192.48.96.9). The most recent released version can always be found
+there in directory graphics/jpeg. This particular version will be archived
+as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz. If you don't have
+direct Internet access, UUNET's archives are also available via UUCP; contact
+help@uunet.uu.net for information on retrieving files that way.
+
+Numerous Internet sites maintain copies of the UUNET files. However, only
+ftp.uu.net is guaranteed to have the latest official version.
+
+You can also obtain this software in DOS-compatible "zip" archive format from
+the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
+on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
+"JPEG Tools". Again, these versions may sometimes lag behind the ftp.uu.net
+release.
+
+The JPEG FAQ (Frequently Asked Questions) article is a useful source of
+general information about JPEG. It is updated constantly and therefore is
+not included in this distribution. The FAQ is posted every two weeks to
+Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
+It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
+and other news.answers archive sites, including the official news.answers
+archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
+If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
+with body
+ send usenet/news.answers/jpeg-faq/part1
+ send usenet/news.answers/jpeg-faq/part2
+
+
+RELATED SOFTWARE
+================
+
+Numerous viewing and image manipulation programs now support JPEG. (Quite a
+few of them use this library to do so.) The JPEG FAQ described above lists
+some of the more popular free and shareware viewers, and tells where to
+obtain them on Internet.
+
+If you are on a Unix machine, we highly recommend Jef Poskanzer's free
+PBMPLUS software, which provides many useful operations on PPM-format image
+files. In particular, it can convert PPM images to and from a wide range of
+other formats, thus making cjpeg/djpeg considerably more useful. The latest
+version is distributed by the NetPBM group, and is available from numerous
+sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
+Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
+you are likely to have difficulty making it work on any non-Unix machine.
+
+A different free JPEG implementation, written by the PVRG group at Stanford,
+is available from ftp://havefun.stanford.edu/pub/jpeg/. This program
+is designed for research and experimentation rather than production use;
+it is slower, harder to use, and less portable than the IJG code, but it
+is easier to read and modify. Also, the PVRG code supports lossless JPEG,
+which we do not. (On the other hand, it doesn't do progressive JPEG.)
+
+
+FILE FORMAT WARS
+================
+
+Some JPEG programs produce files that are not compatible with our library.
+The root of the problem is that the ISO JPEG committee failed to specify a
+concrete file format. Some vendors "filled in the blanks" on their own,
+creating proprietary formats that no one else could read. (For example, none
+of the early commercial JPEG implementations for the Macintosh were able to
+exchange compressed files.)
+
+The file format we have adopted is called JFIF (see REFERENCES). This format
+has been agreed to by a number of major commercial JPEG vendors, and it has
+become the de facto standard. JFIF is a minimal or "low end" representation.
+We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
+Technical Note #2) for "high end" applications that need to record a lot of
+additional data about an image. TIFF/JPEG is fairly new and not yet widely
+supported, unfortunately.
+
+The upcoming JPEG Part 3 standard defines a file format called SPIFF.
+SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
+be able to read the most common variant of SPIFF. SPIFF has some technical
+advantages over JFIF, but its major claim to fame is simply that it is an
+official standard rather than an informal one. At this point it is unclear
+whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
+standard. IJG intends to support SPIFF once the standard is frozen, but we
+have not decided whether it should become our default output format or not.
+(In any case, our decoder will remain capable of reading JFIF indefinitely.)
+
+Various proprietary file formats incorporating JPEG compression also exist.
+We have little or no sympathy for the existence of these formats. Indeed,
+one of the original reasons for developing this free software was to help
+force convergence on common, open format standards for JPEG files. Don't
+use a proprietary file format!
+
+
+TO DO
+=====
+
+The major thrust for v7 will probably be improvement of visual quality.
+The current method for scaling the quantization tables is known not to be
+very good at low Q values. We also intend to investigate block boundary
+smoothing, "poor man's variable quantization", and other means of improving
+quality-vs-file-size performance without sacrificing compatibility.
+
+In future versions, we are considering supporting some of the upcoming JPEG
+Part 3 extensions --- principally, variable quantization and the SPIFF file
+format.
+
+As always, speeding things up is of great interest.
+
+Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/about_cairo.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/about_cairo.html
new file mode 100644
index 0000000..0132307
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/about_cairo.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>March 27, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation has included the following package for your convenience:</p>
+
+<h4>Cairo 1.0.2 for Linux</h4>
+
+<p>Cairo for Linux (&quot;Cairo&quot;) is developed by The Cairo Project (<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>):</p>
+
+<p>Cairo is delivered in the following file (&quot;Cairo Library&quot;):</p>
+<ul>
+ <li>libcairo-swt.so</li>
+</ul>
+
+<p>which was compiled from Cairo source code available at <a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.</p>
+
+<p>Your use of the Cairo code in binary form is subject to
+the terms and conditions of Mozilla Public License Version 1.1 (&quot;MPL&quot;). A copy of the MPL is provided (<a href="mpl-v11.txt" target="blank">mpl-v11.txt</a>)
+and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html.</a>
+
+<h4>pixman 0.1.6</h4>
+
+<p>pixman (&quot;pixman&quot;) is packaged within the Cairo Library and was compiled from source code available at
+<a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.
+pixman includes the following packages:</p>
+
+<ul>
+ <li>libpixregion</li>
+ <li>libic</li>
+ <li>slim</li>
+</ul>
+
+Your use of pixman is subject to the terms and conditions of the licenses in <a href="pixman-licenses.txt" target="blank">pixman-licenses.txt</a>.</p>
+
+<p>If you did not receive the Cairo Library directly from the Eclipse Foundation, the package is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply its use. Check the Redistributor's license that was provided with the content. If no such license exists, contact the Redistributor.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/lgpl-v21.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/lgpl-v21.txt
new file mode 100644
index 0000000..807db79
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/lgpl-v21.txt
@@ -0,0 +1,506 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/mpl-v11.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/mpl-v11.txt
new file mode 100644
index 0000000..7714141
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/mpl-v11.txt
@@ -0,0 +1,470 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (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.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/pixman-licenses.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/pixman-licenses.txt
new file mode 100644
index 0000000..5d8dca6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/about_files/pixman-licenses.txt
@@ -0,0 +1,92 @@
+libpixregion
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+----------------------------------------------------------------------
+libic
+
+Copyright © 2001 Keith Packard
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of Keith Packard not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. Keith Packard makes no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+----------------------------------------------------------------------
+slim
+
+slim is Copyright © 2003 Richard Henderson
+
+Permission to use, copy, modify, distribute, and sell this software
+and its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Richard Henderson not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission. Richard Henderson
+makes no representations about the suitability of this software for
+any purpose. It is provided "as is" without express or implied
+warranty.
+
+RICHARD HENDERSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL RICHARD HENDERSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/.project b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/.project
new file mode 100644
index 0000000..ce8c5e7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.ve.releng.builder</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/README.txt
new file mode 100644
index 0000000..061c373
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/README.txt
@@ -0,0 +1,3 @@
+Dec 4, 2003
+
+This contains template scripts and files that are still being modified and have yet to be tested.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/build.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/build.xml
new file mode 100644
index 0000000..83a48f7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/build.xml
@@ -0,0 +1,54 @@
+<project default="main">
+
+ <property name="pde.build.scripts" value="${eclipse.pdebuild.scripts}"/>
+ <property name="buildDirectory" location="${basedir}/src" />
+
+ <target name="main" depends="checkArgs,init">
+ <ant antfile="build.xml" dir="${pde.build.scripts}" />
+ </target>
+
+ <target name="checkArgs" unless="builder">
+ <echo message="-Dbuilder=&lt;path&gt; required." />
+ <fail/>
+ </target>
+
+ <target name="init">
+ <touch file="${user.home}/.cvspass" />
+ <available file="${buildDirectory}/label.properties" property="label.properties.exists" />
+ <antcall target="create.label.properties" />
+ <property file="${buildDirectory}/label.properties" />
+ </target>
+
+ <target name="create.label.properties" unless="label.properties.exists">
+ <mkdir dir="${buildDirectory}" />
+ <tstamp/>
+ <property name="date" value="${DSTAMP}" />
+ <property name="time" value="${TSTAMP}" />
+ <property name="timestamp" value="${date}${time}" />
+ <property name="buildType" value="I" />
+ <property name="buildId" value="${buildType}${date}" />
+
+ <!--this naming convention used by php scripts on download server-->
+ <property name="buildLabel" value="${buildType}-${buildId}-${timestamp}" />
+
+ <!--store the build label information in a file-->
+ <echo file="${buildDirectory}/label.properties" append="true" >
+ buildDirectory=${buildDirectory}
+ </echo>
+ <echo file="${buildDirectory}/label.properties" append="true" >
+ buildType=${buildType}
+ </echo>
+ <echo file="${buildDirectory}/label.properties" append="true" >
+ buildId=${buildId}
+ </echo>
+ <echo file="${buildDirectory}/label.properties" append="true" >
+ timestamp=${timestamp}
+ </echo>
+ <echo file="${buildDirectory}/label.properties" append="true" >
+ buildLabel=${buildLabel}
+ </echo>
+ </target>
+
+
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.bat
new file mode 100644
index 0000000..3b53f47
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.bat
@@ -0,0 +1,54 @@
+@ echo off
+
+REM script which executes build
+
+REM tag to use when checking out .map file project
+set mapVersionTag=HEAD
+
+REM default setting for buildType
+set buildType=
+
+REM default setting for buildID
+set buildID=
+
+REM default bootclasspath
+set bootclasspath=
+
+REM vm used to run the build. Defaults to java on system path
+set vm=java
+
+REM target used if not default (to allow run just a portion of buildAll)
+set target=
+
+REM FTP user/password, required for Windows to ftp. Without it, no push.
+set ftpUser=
+set ftpPassword=
+
+if x%1==x goto usage
+
+:processcmdlineargs
+
+REM ****************************************************************
+REM
+REM Process command line arguments
+REM
+REM ****************************************************************
+if x%1==x goto run
+if x%1==x-mapVersionTag set mapVersionTag=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-vm set vm=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-bc set bootclasspath=-Dbootclasspath=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-target set target=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-buildID set buildID=-DbuildId=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-ftp set ftpUser=-DftpUser=%2 && set ftpPassword=-DftpPassword=%3 && shift && shift && shift && goto processcmdlineargs
+set buildType=%1 && shift && goto processcmdlineargs
+
+:run
+if x%buildType%==x goto usage
+
+%vm% -cp ..\org.eclipse.releng.basebuilder\startup.jar org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -f buildAll.xml %target% %bootclasspath% -DmapVersionTag=%mapVersionTag% -DbuildType=%buildType% %buildID% %ftpUser% %ftpPassword%
+goto end
+
+:usage
+echo "usage: buildAll [-mapVersionTag HEAD|<branch name>] [-vm <url to java executable to run build>] [-bc <bootclasspath>] [-target <buildall target to execute>] [-buildID <buildID, e.g. 2.1.2>] [-ftp <userid> <password>] I|M"
+
+:end \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.xml
new file mode 100644
index 0000000..0ec4dd6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/buildAll.xml
@@ -0,0 +1,69 @@
+<project default="run">
+
+ <target name="run">
+ <ant antfile="build.xml" target="init" />
+ <antcall target="buildAll" />
+ <antcall target="test" />
+ <antcall target="publish" />
+ <antcall target="push" />
+ </target>
+
+ <target name="buildAll">
+ <!--add calls to build.xml here to build all components-->
+
+ <!-- example
+ <ant antfile="build.xml" target="main">
+ <property name="builder" value="" />
+ </ant>
+ -->
+
+ </target>
+
+ <target name="test" depends="init">
+ <property name="test.xml" value="../org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/test.xml" />
+ <!--
+ <ant antfile="${test.xml}">
+ <property name="tester" value="${basedir}/internalBuildTools/testConfigs/win32-local" />
+ </ant>
+ -->
+ </target>
+
+ <target name="publish" depends="init">
+ <property name="publish.xml" value="../org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/publish.xml" />
+
+ <property name="indexFileName" value="index.html" />
+ <property name="result" value="${buildDirectory}/${buildLabel}" />
+
+ <ant antfile="${publish.xml}" dir="${basedir}">
+ <property name="dropTokenList" value="%sdk%,%runtime%,%examples%,%tests%" />
+ <property name="isBuildTested" value="true" />
+ </ant>
+ </target>
+
+ <target name="push" depends="init,pushftp,pushrsync">
+ </target>
+
+ <target name="pushftp" if="ftppush">
+ <echo message="FTP to: ${remoteDirectory}/${buildLabel}"/>
+ <ftp server="${ftpServer}"
+ userid="${ftpUser}"
+ password="${ftpPassword}"
+ remotedir="${remoteDirectory}">
+ <fileset dir="${buildDirectory}">
+ <include name="${buildLabel}/**"/>
+ </fileset>
+ </ftp>
+
+ <!-- There may not be anything in buildnotes. ftp won't create directory in that case. But we must have one. -->
+ <ftp server="${ftpServer}"
+ userid="${ftpUser}"
+ password="${ftpPassword}"
+ action="mkdir"
+ remotedir="${remoteDirectory}/${buildLabel}/buildnotes">
+ </ftp>
+
+ </target>
+
+ <target name="pushrsync" if="rsyncpush"/>
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/build.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/build.properties
new file mode 100644
index 0000000..bb50482
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/build.properties
@@ -0,0 +1,148 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+#####################
+# Parameters describing how and where to execute the build.
+# Typical users need only update the following properties:
+# baseLocation - where things you are building against are installed
+# bootclasspath - The base jars to compile against (typicaly rt.jar)
+# configs - the list of {os, ws, arch} configurations to build.
+#
+# Of course any of the settings here can be overridden by spec'ing
+# them on the command line (e.g., -DbaseLocation=d:/eclipse
+
+
+##################################################
+# The CVS tag to use when fetching the map files from the repository
+mapVersionTag=HEAD
+
+
+#########################################################
+# The CVS tag to use when fetching elements to build. By default the
+# builder will use whatever is in the maps. Use this value to override the value of the tags
+# specified in the map files.
+# For example, when doing a nightly build out of HEAD,
+# fetchTag=HEAD
+
+
+#####################################################
+# The absolute path to a working directory where the source for the build
+# will be exported, where scripts will be generated and where the end products
+# of the build will be located. On Windows systems, the path length should not
+# exceed thirty characters due to possible path length limitations
+# when compiling some classes.
+buildDirectory=c:\build
+
+
+#############################################################
+# Type of build. Used in naming the build output. Typically this value is
+# one of I, N, M, S, ...
+buildType=I
+
+
+##############################################
+# ID of the build. Used in naming the build output.
+buildId=TestBuild
+
+
+##############################################
+# Label for the build. Used in naming the build output
+buildLabel=${buildType}.${buildId}
+
+
+#################################################
+# Timestamp for the build. Used in naming the build output
+timestamp=007
+
+
+######################################################
+# Base location for anything the build needs to compile against. For example,
+# when building GEF, the baseLocation should be the location of a previously
+# installed Eclipse against which the GEF code will be compiled.
+#
+# The baseLocation must not contain any features, plugins or fragments
+# which are already or will be located in the buildDirectory.
+baseLocation=
+
+
+############################################################
+#the os value of the Eclipse binary against which you are compiling
+#baseos=
+
+
+#############################################################
+#the ws value of the Eclipse binary against which you are compiling
+#basews=
+
+
+##########################################
+#the arch value of the Eclipse binary against which you are compiling
+#basearch=
+
+
+
+#######################################
+# The location underwhich all of the build output will be collected. This will be
+# the root path in the resultant zip file.
+collPlace=eclipse
+
+
+
+#####################################################
+# The list of {os, ws, arch} configurations to build. This
+# value is a '&' separated list of ',' separate triples. For example,
+# configs=win32,win32,x86 & linux,motif,x86
+# By default the value is *,*,*
+#configs=*,*,*
+
+
+
+##########################################################
+# The location of the Java jars to compile against. Typically the rt.jar for your JDK/JRE
+bootclasspath=d:/ibm1.3.1/jre/lib/rt.jar
+
+
+
+#####################################################
+# Whether or not to fail the build if there are compiler errors
+javacfailonerror=true
+
+
+
+##########################################
+# Whether or not to include debug info in the output jars
+javacDebugInfo=false
+
+
+
+#################################################
+# Sets the value of the -source command line switch for javac version 1.4. Used when compiling the jars for the plug-ins.
+javacSource=1.3
+
+
+
+#################################################
+# Sets the value of the -target command line switch for javac. Used when compiling the jars for the plug-ins.
+javacTarget=1.2
+
+
+
+##################################################
+# Asks the compiler for verbose output. This should be set to true in order for *.bin.log files to be generated when
+# using the JDT Compiler Adapter to compile.
+javacVerbose=true
+
+
+
+##################################################
+# Arguments to send to the zip executable. ie. zipargs=-y on Linux preserves symbolic links.
+#zipargs=
+# Arguments to send to the tar executable
+#targargs=
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/customTargets.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/customTargets.xml
new file mode 100644
index 0000000..d0b9536
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/componentScripts/customTargets.xml
@@ -0,0 +1,131 @@
+<project name="Build specific targets and properties" default="noDefault" >
+
+<property name="basews" value="win32" />
+<property name="baseos" value="win32" />
+<property name="basearch" value="x86" />
+<property name="basenl" value="en_US" />
+
+<!-- ===================================================================== -->
+<!-- Run a given ${target} on all elements being built -->
+<!-- Add on <ant> task for each top level element being built. -->
+<!-- ===================================================================== -->
+<target name="allElements">
+ <ant antfile="${genericTargets}" target="${target}" >
+ <property name="type" value="<feature | plugin | fragment>" />
+ <property name="id" value="<element.id>" />
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Targets to assemble the built elements for particular configurations -->
+<!-- These generally call the generated assemble scripts (named in -->
+<!-- ${assembleScriptName}) but may also add pre and post processing -->
+<!-- Add one target for each root element and each configuration -->
+<!-- ===================================================================== -->
+
+<target name="assemble.<element.id>[.config.spec]">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Check out map files from correct repository -->
+<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+<!-- ===================================================================== -->
+<target name="getMapFiles">
+ <property name="cvsRoot" value="<cvs repo locator and login info>" />
+ <property name="mapVersionTag" value="HEAD" />
+ <cvs
+ package="<repo location of map files>"
+ dest="${buildDirectory}/maps"
+ tag="${mapVersionTag}"
+ />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before setup -->
+<!-- ===================================================================== -->
+<target name="preSetup">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after setup but before starting the build proper -->
+<!-- ===================================================================== -->
+<target name="postSetup">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before fetching the build elements -->
+<!-- ===================================================================== -->
+<target name="preFetch">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after fetching the build elements -->
+<!-- ===================================================================== -->
+<target name="postFetch">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before generating the build scripts. -->
+<!-- ===================================================================== -->
+<target name="preGenerate">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after generating the build scripts. -->
+<!-- ===================================================================== -->
+<target name="postGenerate">
+</target>
+
+
+<!-- ===================================================================== -->
+<!-- Steps to do before running the build.xmls for the elements being built. -->
+<!-- ===================================================================== -->
+<target name="preProcess">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after running the build.xmls for the elements being built. -->
+<!-- ===================================================================== -->
+<target name="postProcess">
+</target>
+
+
+<!-- ===================================================================== -->
+<!-- Steps to do before running assemble. -->
+<!-- ===================================================================== -->
+<target name="preAssemble">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after running assemble. -->
+<!-- ===================================================================== -->
+<target name="postAssemble">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after the build is done. -->
+<!-- ===================================================================== -->
+<target name="postBuild">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do to test the build results -->
+<!-- ===================================================================== -->
+<target name="test">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do to publish the build results -->
+<!-- ===================================================================== -->
+<target name="publish">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Default target -->
+<!-- ===================================================================== -->
+<target name="noDefault">
+ <echo message="You must specify a target when invoking this file" />
+</target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/build_types.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/build_types.html
new file mode 100644
index 0000000..d3cbdcc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/build_types.html
@@ -0,0 +1,52 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+<title>Eclipse Corner</title>
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+<body text="#000000" bgcolor="#ffffff" link="#0000ee" vlink="#551a8b" alink="#ff0000">
+<table border=0 cellspacing=5 cellpadding=2 width="100%" > <tr> <td align=left valign=top colspan="2" bgcolor="#0080c0"><b><FONT FACE="Arial,Helvetica" COLOR="#ffffff">&lt;your
+project&gt; Build Types</FONT></b></td></tr> <tr> <td align=right valign=top><img src="http://dev.eclipse.org/images/Adarrow.gif" border=0 height=16 width=16></td><td>
+<p><b><font face="arial,helvetica,geneva" size="-1">Releases</font></b> <br> <font size="-1" face="arial,helvetica,geneva">
+</font>Releases are builds that have been declared major releases by the development
+team - for example &quot;R1.0&quot;. Releases are the right builds for people
+who want to be on a stable, tested release, and don't need the latest greatest
+features and improvements. <font size="-1" face="arial,helvetica,geneva"> Release
+builds always have an &quot;R&quot; at the beginning of the name i.e. R1.0, R2.0
+etc. Non-release builds are named according to the date of the build - for example
+20011027 is the build from Oct 27, 2001.</font><br> </p></td></tr> <tr> <td align=right valign=top><img src="http://dev.eclipse.org/images/Adarrow.gif" border=0 height=16 width=16></td><td><b><font face="arial,helvetica,geneva" size="-1">Stable
+Builds</font></b> <br> <font size="-1" face="arial,helvetica,geneva"> Stable builds
+are integration builds that have been found to be stable enough for most people
+to use. They are promoted from integration build to stable build by the architecture
+team after they have been used for a few days and deemed reasonably stable. The
+latest stable build is the right build for people who want to stay up to date
+with what is going on in the latest development stream, and don't mind putting
+up with a few problems in order to get the latest greatest features and bug fixes.
+The latest stable build is the one the development team likes people to be using,
+because of the valuable and timely feedback. </font></td></tr> <tr> <td align=right valign=top><img src="http://dev.eclipse.org/images/Adarrow.gif" border=0 height=16 width=16></td><td>
+<p><b><font face="arial,helvetica,geneva" size="-1">Integration Builds</font></b>
+<br> <font size="-1" face="arial,helvetica,geneva"> Periodically, component teams
+version off their work in what they believe is a stable, consistent state, and
+they update the build configuration to indicate that the next integration build
+should take this version of the component. Integration builds are built from these
+stable component versions that have been specified by each component team as the
+best version available. Integration builds may be promoted to stable builds after
+a few days of testing. Integration builds are built whenever new stable component
+versions are released into the build.</font></p></td></tr> <tr> <td align=right valign=top><img src="http://dev.eclipse.org/images/Adarrow.gif" border=0 height=16 width=16></td><td><b><font face="arial,helvetica,geneva" size="-1">Nightly
+Builds</font></b><br> <font size="-1" face="arial,helvetica,geneva"> Nightly builds
+are produced over night from whatever has been released into the HEAD stream of
+the CVS repository. They are completely untested and will almost always have major
+problems. Many will not work at all. These drops are normally only useful to developers
+actually working on the &lt;your project&gt;.<BR> <BR>Note: Nightly builds are
+produced only as requested, and not necessarily every night, by developers to
+build what was in HEAD. </font></td></tr> <tr> <td align=right valign=top><img src="http://dev.eclipse.org/images/Adarrow.gif" border=0 height=16 width=16></td><td>
+<p><b><font face="arial,helvetica,geneva" size="-1">Maintenance Builds</font></b>
+<br> <font size="-1" face="arial,helvetica,geneva">Periodically builds for maintenance
+of the current release will be performed. They will not necessarily be stable
+builds. When the maintenace is finalized and released, it will be moved up to
+a Release build. If the build name starts with an &quot;M&quot; i.e. M20031110,
+then it has not been tested for stability. If it is a release candidate, i.e.
+0.5.0.1RC1, then it is a stable maintenance build.</font></p></td></tr> </table><h3>&nbsp;</h3>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/dlconfig.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/dlconfig.txt
new file mode 100644
index 0000000..386242f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/dlconfig.txt
@@ -0,0 +1,2 @@
+dropPrefix[]=R&dropPrefix[]=S&dropPrefix[]=I&dropPrefix[]=N&dropPrefix[]=M&dropPrefix[]=L&dropPrefix[]=O&
+dropType[]=Latest Release&dropType[]=Stable Build&dropType[]=Integration Build&dropType[]=Nightly Build&dropType[]=Maintenance Build&
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/index.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/index.php
new file mode 100644
index 0000000..ba0aacf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/dropSiteRootFiles/index.php
@@ -0,0 +1,148 @@
+<html><head>
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css">
+<title>Eclipse Project Downloads</title></head>
+<body>
+<?php
+
+ $serverName = $_SERVER["SERVER_NAME"];
+
+ if (strstr($serverName, ".oti.com")) {
+ $warning = '<br><font color="#FF0000" size="+2">Internal OTI Mirror. Live external site is <a href="http://download.eclipse.org/eclipse/downloads" target="_top">here</a>. </font>';
+ $serverName = $_SERVER["SERVER_NAME"];
+ } else {
+ $warning = '';
+ }
+?> <table border=0 cellspacing=5 cellpadding=2 width="100%" > <tr> <td align=left width="72%">
+<font class=indextop> &lt;your project&gt;<br>downloads</font> <br> <font class=indexsub>
+latest downloads from the &lt;your project</font>&gt;<br> <?php echo $warning; ?>
+</td><td width="28%"><img src="http://dev.eclipse.org/images/Idea.jpg" height=86 width=120></td></tr>
+</table><table border=0 cellspacing=5 cellpadding=2 width="100%" > <tr> <td align=LEFT valign=TOP colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Latest
+Downloads</font></b></td></tr> <!-- The Eclipse Projects --> <tr> <td> <p>On this
+page you can find the latest <a href="build_types.html">builds</a> produced by
+the &lt;your project&gt;. To get started run the program and and go through the
+user and developer documentation provided in the online help system. If you have
+problems downloading the drops, contact the <font size="-1" face="arial,helvetica,geneva"><a href="mailto:webmaster@eclipse.org">webmaster</a></font>.
+All downloads are provided under the terms and conditions of the <a href="http://www.eclipse.org/legal/notice.html">Eclipse.org
+Software User Agreement</a> unless otherwise specified. </p><p> For information
+about different kinds of builds look <a href="build_types.html">here</a>.</p></td></tr>
+</table><?php
+
+ $fileHandle = fopen("dlconfig.txt", "r");
+ while (!feof($fileHandle)) {
+
+ $aLine = fgets($fileHandle, 4096);
+ parse_str($aLine);
+
+
+ }
+ fclose($fileHandle);
+
+ for ($i = 0; $i < count($dropType); $i++) {
+ $typeToPrefix[$dropType[$i]] = $dropPrefix[$i];
+ }
+
+ $aDirectory = dir("drops");
+ while ($anEntry = $aDirectory->read()) {
+
+ // Short cut because we know aDirectory only contains other directories.
+ if ($anEntry != "." && $anEntry!="..") {
+ $aDropDirectory = dir("drops/".$anEntry);
+ $fileCount = 0;
+ while ($aDropEntry = $aDropDirectory->read()) {
+ if ((stristr($aDropEntry, ".tar.gz"))||(stristr($aDropEntry, ".zip"))) {
+ // Count the files in the directory
+ $fileCount = $fileCount + 1;
+ }
+ }
+ $aDropDirectory.closedir();
+ // Read the count file
+ $countFile = "drops/".$anEntry."/files.count";
+ $indexFile = "drops/".$anEntry."/index.html";
+ if (file_exists($countFile) && file_exists($indexFile)) {
+ $anArray = file($countFile);
+
+ // If a match - process the directory
+ if ($anArray[0] == $fileCount) {
+ $parts = explode("-", $anEntry);
+ if (count($parts) == 3) {
+
+ $buckets[$parts[0]][] = $anEntry;
+
+ $timePart = $parts[2];
+ $year = substr($timePart, 0, 4);
+ $month = substr($timePart, 4, 2);
+ $day = substr($timePart, 6, 2);
+ $hour = substr($timePart,8,2);
+ $minute = substr($timePart,10,2);
+ $timeStamp = mktime($hour, $minute, 0, $month, $day, $year);
+
+ $timeStamps[$anEntry] = date("D, j M Y -- H:i (O)", $timeStamp);
+
+ if ($timeStamp > $latestTimeStamp[$parts[0]]) {
+ $latestTimeStamp[$parts[0]] = $timeStamp;
+ $latestFile[$parts[0]] = $anEntry;
+ }
+ }
+ }
+ }
+ }
+ }
+ // $aDirectory.closedir();
+ ?> <table width="100%" cellspacing=0 cellpadding=3 align=center> <td align=left>
+<TABLE width="100%" CELLSPACING=0 CELLPADDING=3> <tr> <td width=\"30%\"><b>Build
+Type</b></td><td><b>Build Name</b></td><td><b>Build Date</b></td></tr> <?php
+ foreach($dropType as $value) {
+ $prefix=$typeToPrefix[$value];
+ $fileName = $latestFile[$prefix];
+ echo "<tr>
+ <td width=\"30%\">$value</td>";
+
+ $parts = explode("-", $fileName);
+
+ // Uncomment the line below if we need click through licenses.
+ // echo "<td><a href=license.php?license=drops/$fileName>$parts[1]</a></td>";
+
+ // Comment the line below if we need click through licenses.
+ echo "<td><a href=\"drops/$fileName/index.html\">$parts[1]</a></td>";
+
+ echo "<td>$timeStamps[$fileName]</td>";
+ echo "</tr>";
+ }
+?> </table></table>&nbsp; <?php
+ foreach($dropType as $value) {
+ $prefix=$typeToPrefix[$value];
+ echo "
+ <table width=\"100%\" cellspacing=0 cellpadding=3 align=center>
+ <tr bgcolor=\"#999999\">
+ <td align=left width=\"30%\"><b><a name=\"$value\"><font color=\"#FFFFFF\" face=\"Arial,Helvetica\">$value";
+ echo "s</font></b></a></td>
+ </TR>
+ <TR>
+ <td align=left>
+ <TABLE width=\"100%\" CELLSPACING=0 CELLPADDING=3>
+ <tr>
+ <td width=\"30%\"><b>Build Name</b></td>
+ <td><b>Build Date</b></td>
+ </tr>";
+
+ $aBucket = $buckets[$prefix];
+ if (isset($aBucket)) {
+ rsort($aBucket);
+ foreach($aBucket as $innerValue) {
+ $parts = explode("-", $innerValue);
+ echo "<tr>";
+
+ // Uncomment the line below if we need click through licenses.
+ // echo "<td><a href=\"license.php?license=drops/$innerValue\">$parts[1]</a></td>";
+
+ // Comment the line below if we need click through licenses.
+ echo "<td><a href=\"drops/$innerValue/index.html\">$parts[1]</a></td>";
+
+ echo "<td>$timeStamps[$innerValue]</td>
+ </tr>";
+ }
+ }
+ echo "</table></table>&nbsp;";
+ }
+?> &nbsp;
+</body></html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/FAIL.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/FAIL.gif
new file mode 100644
index 0000000..28bba66
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/FAIL.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/OK.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/OK.gif
new file mode 100644
index 0000000..689e523
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/OK.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/buildNotes.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/buildNotes.php
new file mode 100644
index 0000000..3c9d984
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/buildNotes.php
@@ -0,0 +1,62 @@
+<html>
+<head>
+<?php
+ $parts = explode("/", getcwd());
+ $parts2 = explode("-", $parts[count($parts) - 1]);
+ $buildName = $parts2[1];
+
+ // Get build type names
+
+ $fileHandle = fopen("../../dlconfig.txt", "r");
+ while (!feof($fileHandle)) {
+
+ $aLine = fgets($fileHandle, 4096); // Length parameter only optional after 4.2.0
+ $parts = explode(",", $aLine);
+ $dropNames[trim($parts[0])] = trim($parts[1]);
+ }
+ fclose($fileHandle);
+
+ $buildType = $dropNames[$parts2[0]];
+
+ echo "<title>Build Notes for $buildType $buildName </title>";
+?>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
+</head>
+<body>
+
+<p><b><font face="Verdana" size="+3">Build Notes</font></b> </p>
+
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+ <tr>
+ <td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">
+ Build Notes for <?php echo "$buildType $buildName"; ?></font></b></td>
+ </tr>
+</table>
+<table border="0">
+
+<?php
+ $hasNotes = false;
+ $aDirectory = dir("buildnotes");
+ while ($anEntry = $aDirectory->read()) {
+ if ($anEntry != "." && $anEntry != "..") {
+ $parts = explode("_", $anEntry);
+ $baseName = $parts[1];
+ $parts = explode(".", $baseName);
+ $component = $parts[0];
+ $line = "<td>Component: <a href=\"buildnotes/$anEntry\">$component</a></td>";
+ echo "<tr>";
+ echo "$line";
+ echo "</tr>";
+ $hasNotes = true;
+ }
+ }
+ aDirectory.closedir();
+ if (!$hasNotes) {
+ echo "<br>There are no build notes for this build.";
+ }
+?>
+
+</table>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/consoleLogs.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/consoleLogs.php
new file mode 100644
index 0000000..5ec0841
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/consoleLogs.php
@@ -0,0 +1,70 @@
+<html>
+<head>
+<?php
+ $parts = explode("/", getcwd());
+ $parts2 = explode("-", $parts[count($parts) - 1]);
+ $buildName = $parts2[1];
+
+ // Get build type names
+
+ $fileHandle = fopen("../../dlconfig.txt", "r");
+ while (!feof($fileHandle)) {
+
+ $aLine = fgets($fileHandle, 4096); // Length parameter only optional after 4.2.0
+ $parts = explode(",", $aLine);
+ $dropNames[trim($parts[0])] = trim($parts[1]);
+ }
+ fclose($fileHandle);
+
+ $buildType = $dropNames[$parts2[0]];
+
+ echo "<title>Test Console Output for $buildType $buildName </title>";
+?>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
+<title>Console Logs from Running JUnit Plug-in Tests</title></head>
+<body>
+
+<p><b><font face="Verdana" size="+3">Test Console Output</font></b> </p>
+
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+ <tr>
+ <td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Console
+ output from running JUnit plugin tests for
+ <?php echo "$buildType $buildName"; ?>
+ </font></b></td>
+ </tr>
+</table>
+<table border="0">
+
+<?php
+ $hasNotes = false;
+ $aDirectory = dir("testresults/consolelogs");
+ $index = 0;
+ while ($anEntry = $aDirectory->read()) {
+ if ($anEntry != "." && $anEntry != "..") {
+ $entries[$index] = $anEntry;
+ $index++;
+ }
+ }
+
+ aDirectory.closedir();
+ sort($entries);
+
+ for ($i = 0; $i < $index; $i++) {
+ $anEntry = $entries[$i];
+ $line = "<td>Component: <a href=\"testresults/consolelogs/$anEntry\">$anEntry</a></td>";
+ echo "<tr>";
+ echo "$line";
+ echo "</tr>";
+ $hasNotes = true;
+ }
+
+ if (!$hasNotes) {
+ echo "<br>There are no test logs for this build.";
+ }
+?>
+
+</table>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/download.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/download.php
new file mode 100644
index 0000000..9631a70
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/staticDropFiles/download.php
@@ -0,0 +1,54 @@
+<html>
+<head>
+<title>Eclipse Download Click Through</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
+<?php
+ $parts = explode("-", $dropFile);
+ $clickFile = "clickThroughs/";
+ for ($i =0; $i<count($parts); $i++) {
+ if ($i != 2) {
+ $clickFile = $clickFile.$parts[$i];
+ if ($i < count($parts) - 1) {
+ $clickFile = $clickFile."-";
+ }
+ }
+ }
+ $clickFile = $clickFile.".txt";
+
+ if (file_exists($clickFile)) {
+ $fileHandle = fopen($clickFile, "r");
+ while (!feof($fileHandle)) {
+ $aLine = fgets($fileHandle, 4096);
+ $result = $result.$aLine;
+ }
+ fclose($fileHandle);
+ } else {
+ echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL='.$dropFile.'">';
+ echo '<b><font size "+4">Downloading: '.$dropFile.'</font></b>';
+ echo '<BR>';
+ echo '<BR>';
+ echo 'If your download does not begin automatically click <a href="'.$dropFile.'">here</a>.';
+ }
+?>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+ <?php
+ if (file_exists($clickFile)) {
+ echo '<p><b><font size="+4">Important Notes<BR>';
+ echo $dropFile;
+ echo '</font></b></font></p>
+ <p>It is very important to read the following notes in order to run this version
+ of Eclipse. Once you have read the notes you can click on the Download link
+ to download the drop.</p>
+ ';
+ echo '<textarea name="textfield" cols="80" rows="20" wrap="PHYSICAL">'.$result;
+ echo '</textarea>';
+ echo '<BR>';
+ echo '<BR>';
+ echo '<a href="'.$dropFile.'">Download</a>';
+ }
+?>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/index.html.template b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/index.html.template
new file mode 100644
index 0000000..81182b7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/index.html.template
@@ -0,0 +1,130 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
+<title>Download</title>
+</head>
+
+<body>
+&nbsp; <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" ><tr><td ALIGN=LEFT width="80%">
+<p><b><font face="Verdana" size="+3">@type@ Build: @build@</font></b><br>
+@date@
+</p>
+<p>These downloads are provided under the <a href="http://www.eclipse.org/legal/notice.html">Eclipse.org
+Software User Agreement</a>.</p>
+<p>To view the build notes for this build click <a href="buildNotes.php">here</a>.
+<br> To view the test results and compile logs for this build click <a href="testResults.php">here</a>.<BR>
+To view the map file entries for this build click click <A href="directory.txt">here</A>.<BR></td></tr>
+</table>
+
+<!-- *********** Requirements ************** -->
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"> <b><font face="Arial,Helvetica" color="#FFFFFF">Requirements</font></b></td></tr></table>
+<P>These are the prerequisites to install &lt;your project&gt;. They must
+be downloaded and installed before the &lt;your component&gt; can be installed.</P><br>
+
+
+<!-- *********** empty section for use as template for new download section **************
+
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#999999">
+<b><font face="Arial,Helvetica" color="#FFFFFF">
+NAME OF DOWNLOAD TYPE
+</font></b></td></tr>
+
+<TR><TD align="LEFT" valign="TOP" colspan="3">
+DESCRIPTION OF DOWNLOAD
+</TD></TR></table>
+
+<table BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH="100%" bordercolor="#999999" >
+<tr><td align=RIGHT valign=TOP width="7%">
+<div align="left"><b>Status</b></div></td>
+<td width="34%"><b>Platform</b></td>
+<td width="59%"><b>Download</b></td></tr>
+TEXTREPLACEMENTSTRING
+</table>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td colspan="2">&nbsp;</td></tr></table>
+
+******************* end template ***************************** -->
+
+<!-- *********** Runtime downloads ************** -->
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0">
+<b><font face="Arial,Helvetica" color="#FFFFFF">
+&lt;your project&gt; Runtime
+</font></b></td></tr>
+
+<TR><TD align="LEFT" valign="TOP" colspan="3">
+&lt;description&gt;
+</TD></TR></table>
+
+<table border=0 cellspacing=2 cellpadding=0 width="100%" bordercolor="#999999" >
+<tr><td align=RIGHT valign=TOP width="7%">
+<div align="left"><b>Status</b></div></td>
+<td width="34%"><b>Platform</b></td>
+<td width="59%"><b>Download</b></td></tr>
+%runtime%
+</table>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td colspan="2">&nbsp;</td></tr></table>
+
+
+<!-- *********** SDK downloads ************** -->
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#999999">
+<b><font face="Arial,Helvetica" color="#FFFFFF">
+SDK
+</font></b></td></tr>
+
+<TR><TD align="LEFT" valign="TOP" colspan="3">
+&lt;description&gt;
+</TD></TR></table>
+
+<table BORDER=0 CELLSPACING=2 CELLPADDING=0 WIDTH="100%" bordercolor="#999999" >
+<tr><td align=RIGHT valign=TOP width="7%">
+<div align="left"><b>Status</b></div></td>
+<td width="34%"><b>Platform</b></td>
+<td width="59%"><b>Download</b></td></tr>
+<tr><td>%sdk%</td></tr>
+</table>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td colspan="2">&nbsp;</td></tr></table>
+
+
+<!-- ************** Examples downloads *************** -->
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#999999">
+<b><font face="Arial,Helvetica" color="#FFFFFF">
+Examples
+</font></b></td></tr>
+
+<TR><TD align="LEFT" valign="TOP" colspan="3">
+&lt;description&gt;
+</TD></TR></table>
+
+<table border=0 cellspacing=2 cellpadding=0 width="100%" bordercolor="#999999" >
+<tr><td align=RIGHT valign=TOP width="7%">
+<div align="left"><b>Status</b></div></td>
+<td width="34%"><b>Platform</b></td>
+<td width="59%"><b>Download</b></td></tr>
+%examples%
+</table>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td colspan="2">&nbsp;</td></tr></table>
+
+
+<!-- ************** JUnit tests download *************** -->
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td align=LEFT valign=TOP colspan="3" bgcolor="#999999">
+<b><font face="Arial,Helvetica" color="#FFFFFF">
+JUnit Plugin Tests and Automated Testing Framework
+</font></b></td></tr>
+
+<TR><TD align="LEFT" valign="TOP" colspan="3">
+&lt;description&gt;
+</TD></TR></table>
+
+<table border=0 cellspacing=2 cellpadding=0 width="100%" bordercolor="#999999" >
+<tr><td align=RIGHT valign=TOP width="7%">
+<div align="left"><b>Status</b></div></td>
+<td width="34%"><b>Platform</b></td>
+<td width="59%"><b>Download</b></td></tr>
+%tests%
+</table>
+
+
+<table border=0 cellspacing=5 cellpadding=2 width="100%" ><tr><td colspan="2">&nbsp;</td></tr></table>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/testResults.php.template b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/testResults.php.template
new file mode 100644
index 0000000..fef906a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/templateFiles/testResults.php.template
@@ -0,0 +1,92 @@
+<html>
+<head>
+
+<?php
+ $parts = explode("/", getcwd());
+ $parts2 = explode("-", $parts[count($parts) - 1]);
+ $buildName = $parts2[1];
+
+ // Get build type names
+
+ $fileHandle = fopen("../../dlconfig.txt", "r");
+ while (!feof($fileHandle)) {
+
+ $aLine = fgets($fileHandle, 4096); // Length parameter only optional after 4.2.0
+ $parts = explode(",", $aLine);
+ $dropNames[trim($parts[0])] = trim($parts[1]);
+ }
+ fclose($fileHandle);
+
+ $buildType = $dropNames[$parts2[0]];
+
+ echo "<title>Test Results for $buildType $buildName </title>";
+?>
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
+</head>
+<body>
+<p><b><font face="Verdana" size="+3">Test Results</font></b> </p>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+ <tr>
+ <td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Unit
+ Test Results for <?php echo "$buildType $buildName"; ?> </font></b></td>
+ </tr>
+</table>
+<p></p><table border="0">
+</table>
+
+<table width="77%" border="1">
+ <tr>
+ <td width="81%"><b>Tests Performed</b></td>
+ <td width="19%"><b>Errors &amp; Failures</b></td>
+ </tr>
+
+ %testresults%
+
+</table>
+<p></p>
+<br>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+ <tr>
+ <td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">
+ Console output logs
+ <?php echo "$buildType $buildName"; ?>
+ </font></b></td>
+ </tr>
+</table>
+<br>
+These <a href="consoleLogs.php">logs</a> contain the console output captured while
+running the JUnit automated tests. <br>
+<br>
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+ <tr>
+ <td align=LEFT valign=TOP colspan="3" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Plugins
+ containing compile errors </font></b></td>
+ </tr>
+</table>
+
+<table width="77%" border="1">
+ <tr>
+ <td><b>Compile Logs (Jar Files)</b></td>
+ <td><b>Errors</b></td>
+ <td><b>Warnings</b></td>
+ </tr>
+
+ %compilelogs%
+
+</table>
+
+<table width="77%" border="1">
+ <tr>
+ <td><b>Compile Logs (Jar Files)</b></td>
+ <td><b>Forbidden Access Warnings</b></td>
+ <td><b>Discouraged Access Warnings</b></td>
+ </tr>
+
+ %accesseslogs%
+
+</table>
+
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/testManifest.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/testManifest.xml
new file mode 100644
index 0000000..eb4f4bb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/publishingFiles/testManifest.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE topLevel [
+ <!ELEMENT topLevel (zipTypes,logFiles)>
+
+ <!ELEMENT zipTypes (zipType+)>
+
+ <!ELEMENT zipType (platform)>
+ <!ATTLIST zipType
+ name CDATA #REQUIRED
+ >
+
+ <!ELEMENT platform EMPTY>
+ <!ATTLIST platform
+ id ID #REQUIRED
+ name CDATA #REQUIRED
+ fileName CDATA #REQUIRED
+ >
+
+ <!ELEMENT logFiles (logFile+)>
+
+ <!ELEMENT logFile (effectedFile+)>
+ <!ATTLIST zipType
+ name CDATA #REQUIRED
+ >
+
+ <!ELEMENT effectedFile EMPTY>
+ <!ATTLIST effectedFile
+ id CDATA #REQUIRED
+ >
+]>
+
+<!--
+The element and attribute definitions are as follows:
+
+<zipTypes> - listing of binary distributable categories, ie. SDK, examples, tests.
+
+<zipType> - a category of binary distributable.
+ name - name of binary distributable category.
+
+<platform> - description of a platform-specific or non-platform specific binary distributable.
+ id - unique identifier for the platform relevant to the zip file referenced in fileName attribute. Used to map compile logs and test logs listed in the manifest to a specific platform of a zipType.
+ name - text that should appear on download page to describe where the binary can be installed, ie. "ALL" or "Windows 98/ME/2000/XP".
+ fileName - html source inserted on download index page to produce link to the distributable.
+
+<logFiles> - listing of JUnit test result files and compile logs and their mappings to <platform> elements.
+
+<logFile>
+ name - the path to a file relative to value used for
+
+<effectedFile> - references the value of the id attribute for a platform element. Used to mark a <platform> with a status depending on the log content.
+
+-->
+
+<topLevel>
+<zipTypes>
+ <!--example
+
+ <zipType name="zipTypeName">
+ <platform id="ID" name="applicable platforms" fileName='&lt;a href="file.zip">file.zip&lt;/a>'></platform>
+ </zipType>
+
+ -->
+</zipTypes>
+
+<logFiles>
+ <!--list JUnit test results-->
+ <!--example: if there are JUnit test failures found in this log, the file identified with id "ID" should be marked with a red x.
+
+ <logFile name="junittestresult.xml">
+ <effectedFile id="ID"></effectedFile>
+ </logFile>
+
+ -->
+
+ <!--list compile logs-->
+ <!--example: if there are compile errors found in this log, the file identified with id "ID" should be marked with a red x.
+ <logFile name="pluginname/myjar.bin.log">
+ <effectedFile id="ID"></effectedFile>
+ </logFile>
+ -->
+</logFiles>
+</topLevel>
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/readme.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/readme.html
new file mode 100644
index 0000000..5e50cf4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/readme.html
@@ -0,0 +1,142 @@
+<title>org.eclipse.ve.releng.builder README</title>
+<p><b><font size="+2">**template**<BR><BR>README </font></b></p><p>Last Updated:
+Dec 5, 2003</p><p>This document describes how to build &lt;project&gt;components
+from the command line using Ant scripts in this project and org.eclipse.releng.basebuilder.</p><p><br>
+<b>Table of Contents</b><br> <br> <a href="#description">Description</a><br> <a href="#prereq">Prerequisites</a><br>
+<a href="#setup">Setup</a><br> <a href="#components">Run the Build</a><br> <a href="#antbuildproperties">Ant
+properties defined build.properties</a><br> <a href="#buildconfigs">&lt;project&gt;
+Configurations</a><br> <a href="#examples">Examples</a><br> <br> </p><p><b><a name="description"></a>Description</b></p><p>org.eclipse.&lt;project&gt;.releng.builder
+contains Ant scripts that invoke script generators in org.eclipse.pde.build to
+build all shipped <a href="#components">components of &lt;project&gt;:</a> SDK,
+runtime, tests, and examples.<br> <br> </p><p><b><a name="prereq"></a>Prerequisites</b><br>
+</p><p>1. <a href="http://www.cvshome.org/">CVS</a> version 1.10 or higher (For
+<a href="http://ftp.cvshome.org/release/binary/win32/cvs-1-11-9.zip"> CVS 1.11.9
+WIN32</a>).<br> 2. <a href="http://java.sun.com/j2se/1.4/download.html">1.4 level
+JDK</a>.<br> 3. <a href="http://java.sun.com/j2se/1.3/download.html"> A 1.3 level
+Windows JRE</a> to compile against.<br> 4. <a href="http://www.info-zip.org/pub/infozip/">Info-Zip
+zip and unzip</a><br> 6. org.eclipse.releng.basebuilder and org.eclipse.&lt;project&gt;.releng.builder
+from <a href="http://dev.eclipse.org/viewcvs/">dev.eclipse.org</a>.<br> <br> </p><p><b><a name="setup"></a>Setup<br>
+<br> </b>1. Add the CVS and Info-Zip executables to your path as required.<br>
+2. Add the 1.4 jre/bin directory of the installed JDK to your path.<b><br> </b>3.
+Check out org.eclipse.releng.basebuilder and org.eclipse.&lt;project&gt;.releng.builder
+into a directory.<b><br> <br> <br> <a name="run"></a>Run the Build</b></p><p>
+cd to org.eclipse.&lt;project&gt;.releng.builder directory and execute the following
+command (currently the build.xml script can only be executed in a headless eclipse
+due to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=35923">bug 35923</a>):
+</p><p>&quot;java -cp ../org.eclipse.releng.basebuilder/startup.jar org.eclipse.core.launcher.Main
+-application org.eclipse.ant.core.antRunner -buildfile build.xml -Dbuilder=<a href="#components">sdk
+| runtime| examples | tests</a> [Ant properties to override in a <a href="#antbuildproperties">component's
+build.properties</a>] &quot;<br> </p><p><br> <b><a name="components"></a></b>The
+component property value sets the name of the directory in org.eclipse.&lt;project&gt;.releng.builder
+which contains the Ant scripts that build a given an &lt;project&gt; component
+as descibed below: <br> <br> </p><table width="100%" border="1"> <tr> <td width="20%">Component
+(directory name in org.eclipse.&lt;project&gt;.releng.builder)</td><td width="80%">Description</td></tr>
+<tr> <td width="20%">sdk</td><td width="80%">This directory contains the scripts
+used to build the &lt;project&gt; SDK. A &lt;project&gt; SDK is comprised of binaries,
+source, and developer documentation.</td></tr> <tr> <td width="20%">runtime</td><td width="80%">This
+directory contains the scripts used to build the &lt;project&gt; runtime. The
+&lt;project&gt; runtime component contains binaries only.</td></tr> <tr> <td width="20%">examples</td><td width="80%">This
+directory contains the scripts used to build the &lt;project&gt; Examples. The
+&lt;project&gt; Examples contain binaries and source. </td></tr> <tr> <td width="20%">tests</td><td width="80%">This
+directory contains the scripts used to build the &lt;project&gt; Automated testing
+environment. This test framework can be used to run JUnit plugin tests on a &lt;project&gt;
+SDK from the command line.</td></tr> </table><p><br> <b><a name="antbuildproperties"></a>Ant
+Properties Settings in a component's build.properties<br> <br> </b>The following
+properties are pre-defined in the build.properties file for the specified component.
+They can be overridden by setting them at the command line at build time or by
+changing them directly in the component's build.properties file.</p><table width="100%" border="1">
+<tr> <td>Name</td><td>Description</td></tr> <tr> <td>baseos,basews,basearch</td><td>The
+os, ws and arch values of a pre-built eclipse component being compiled against.
+See list of possible values in the table of <a href="#buildconfigs">build configurations</a>.</td></tr>
+<tr> <td height="26">baseLocation</td><td height="26">A directory separate from
+buildDirectory which contains pre-built plugins and features against which to
+compile. The basedirectory must not contain any features, plugins or fragments
+which are already or will be located in the buildDirectory (see below).</td></tr>
+<tr> <td>bootclasspath</td><td>Sets the value for the attribute &quot;bootclasspath&quot;
+in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task</a> in a plugins' build.xml. Default set to ${java.home}/lib/rt.jar.</td></tr>
+<tr> <td height="36">buildDirectory</td><td height="36"> <p>The absolute path
+to a working directory where the source for the build will be exported, where
+scripts will be generated and where the end products of the build will be located.
+On Windows systems, the path length should not exceed thirty characters due to
+possible path length limitations when compiling some classes. </p></td></tr> <tr>
+<td>buildId</td><td>The build name. Default set to &quot;build&quot;.</td></tr>
+<tr> <td>buildLabel</td><td>Refers to the name of the directory which will contain
+the end result of the build. Default set to ${buildType}.${buildId}, ie.&quot;I.build&quot;.
+This directory will be created inside the location specified by the ${buildDirectory}
+property.</td></tr> <tr> <td>buildType</td><td> <p>Letters I, N, S, R or M are
+used to identify builds as being one of the following:<br> <br> I - Integration<br>
+N - Nightly<br> S - Stable<br> R - Release<br> M - Maintenance<br> </p><p> If
+set to N, all source will be checked out from the HEAD stream. In all other cases,
+tags as specifed in map files will be used when exporting plugins to the buildDirectory.
+</p></td></tr> <tr> <td>collPlace</td><td>The directory relative to ${buildLabel}
+in which built features and plugins are gathered. Default set to &quot;.&quot;.</td></tr>
+<tr> <td>collBase</td><td>The directory relative to ${buildLabel} in which to
+execute zip of the ${collPlace}directory and configuration specific root files.</td></tr>
+<tr> <td>configs</td><td> <p>An ampersand separated list of configurations to
+build where a configuration is specified as &lt;os&gt;,&lt;ws&gt;,&lt;arch&gt;.<br>
+ie.configs=&quot;win32,win32,x86 &amp; linux, motif, x86 &amp; linux, gtk, x86&quot;.
+The default setting (*,*,*) should be used for platform-independant components.</p></td></tr>
+<tr> <td>javacDebugInfo</td><td>Sets the value for the attribute &quot;debug&quot;
+in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task </a>in a plugins' build.xml. Default set to on.</td></tr> <tr>
+<td>javacFailOnError</td><td>Sets the value for the attribute &quot;failonerror&quot;
+in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task</a> in a plugins' build.xml. Build will continue even if there
+are compilation errors when this is set to false.</td></tr> <tr> <td>javacSource</td><td>Sets
+the value for the attribute &quot;source&quot; in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task</a> in a plugins' build.xml. Default set to 1.3.</td></tr>
+<tr> <td>javacTarget</td><td>Sets the value for the attribute &quot;target&quot;
+in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task</a> in a plugins' build.xml. Default set to 1.1.</td></tr>
+<tr> <td>javacVerbose</td><td>Sets the value for the attribute &quot;verbose&quot;
+in calls to the <a href="http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+&lt;javac&gt; task</a> in a plugins' build.xml. Default set to true.</td></tr>
+<tr> <td>mapVersionTag</td><td> <p>Sets the tag attribute in a call to the <a href="http://ant.apache.org/manual/CoreTasks/cvs.html">Ant
+&lt;cvs&gt; task </a>to check out org.eclipse.&lt;project&gt;.releng, the map
+file project on dev.eclipse.org used in the build. The default is &quot;HEAD&quot;</p><p>Can
+be set to a specific tag to download the map files used for a previous integration
+build. Typically, these tags are in the form &quot;v&lt;build id in About dialog&gt;&quot;
+for example &quot;v200307110800&quot; will checkout the map files used to run
+the integration at the specified date/time. These scripts work with builds &gt;
+??<br> </p></td></tr> <tr> <td>timestamp</td><td>A timestamp used to fill in value
+for buildid in about.mappings files. The timestamp is also used to tag the org.eclipse.&lt;project&gt;.releng
+project on dev.eclipse.org only when an appropriate value for mapCvsRoot is provided
+and when the tagMaps Ant property is set. </td></tr> <tr> <td>zipargs</td><td>Arguments
+to send to the zip executable. ie. zipargs=-y on Linux preserves symbolic links.</td></tr>
+</table><p><br> </p><p><font size="+1"><b><a name="buildconfigs"></a>&lt;project&gt;
+Build Configurations</b></font></p><p><b></b>A configuration refers to the combination
+of the operating system, windowing system and processor architecture for which
+the component is intended. Currently, all &lt;project&gt; components are platform
+independent.<br> <p><br> <br> <b><a name="examples"></a>Examples<br> <br> </b>
+<p><a href="#ex1">Build SDK including javadoc on Windows</a><br> <a href="#ex5">Build
+Runtime component on Linux</a><br> <a href="#ex5.1">Build test component in a
+directory containing a previous SDK buildDirectory</a> <br> <a href="#ex6">Building
+examples against a &lt;project&gt; SDK installed in eclipse on Windows</a><br>
+</p><p><b><br> <a name="ex1"></a>Build Windows SDK component with javadoc generation
+on Windows</b></p><p><b>java -cp ..\org.eclipse.releng.basebuilder\startup.jar
+org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile
+build.xml -Dbuilder=sdk -Dbootclasspath=C:\JRE131\lib\rt.jar -Djavacfailonerror=true
+-DjavacVerbose=false -DbuildDirectory=c:\mybuild\eclipse</b> <br> <br> This builds
+a &lt;project&gt; SDK in the directory c:\mybuild\eclipse. &quot;-DjavaVerbose=false&quot;
+indicates that no compile logs will be generated and &quot;-Djavacfailonerror=true&quot;
+will cause the build to fail if there are any compile errors. <b></b> <br> </p><p><b><a name="ex4"></a>Build
+&lt;project&gt; runtime component on Linux</b></p><p><b>java -cp ../org.eclipse.releng.basebuilder/startup.jar
+org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile
+build.xml -Dbuilder=runtime -DbuildDirectory=/builds/runtime/eclipse</b></p><p>This
+builds a &lt;project&gt; runtime in the directory &quot;/builds/runtime/eclipse&quot;.<br>
+<br> <br> <b><a name="ex5.1"></a>Build test component in a directory containing
+a source from a previous SDK build on Windows</b></p><p><b>java -cp ..\org.eclipse.releng.basebuilder\startup.jar
+org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile
+build.xml -Dbuilder=tests -Dbootclasspath=C:\JRE131\lib\rt.jar -DbuildDirectory=c:\builds\sdk\eclipse
+-Djavacfailonerror=true</b></p><p></p><p>This builds an the &lt;project&gt; test
+plugins in the same directory where an SDK was previously built. The build will
+fail if there are compile errors.<br> </p><p><br> <b><a name="ex7"></a>Building
+examples against a &lt;project&gt; SDK installed in eclipse on Windows</b></p><p><b>java
+-cp ..\org.eclipse.releng.basebuilder\startup.jar org.eclipse.core.launcher.Main
+-application org.eclipse.ant.core.antRunner -buildfile build.xml -Dbuilder=examples
+-Dbootclasspath=C:\JRE131\lib\rt.jar -DbuildDirectory=c:\examples\eclipse -DbaseLocation=c:\eclipse
+-Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true</b></p><p></p><p>This
+builds &lt;project&gt; examples in the directory c:\examples against a &lt;project&gt;
+SDK installed in eclipse in the directory c:\examples\eclipse. The build will
+fail if there are compile errors.<br> </p><p>&nbsp;</p>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/build.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/build.properties
new file mode 100644
index 0000000..d9c36f9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/build.properties
@@ -0,0 +1,30 @@
+###############################################################################
+# Copyright (c) 2000, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+buildDirectory=${builder}/../eclipse
+buildType=I
+buildId=build
+buildLabel=${buildType}.${buildId}
+baseLocation=
+timestamp=0000
+collPlace=eclipse
+collBase=.
+
+#need to do this in order to get a clean compile
+configs=*,*,*
+baseos=win32
+basews=win32
+basearch=x86
+bootclasspath=${java.home}/lib/rt.jar
+javacfailonerror=false
+javacVerbose=true
+javacDebugInfo=on
+
+zipargs=
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/customTargets.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/customTargets.xml
new file mode 100644
index 0000000..94febdc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/customTargets.xml
@@ -0,0 +1,238 @@
+<project name="Build specific targets and properties" default="noDefault" basedir=".">
+
+<!-- ===================================================================== -->
+<!-- Run a given ${target} on all elements being built -->
+<!-- ===================================================================== -->
+<target name="allElements">
+
+ <ant antfile="${genericTargets}" target="${target}" >
+ <property name="type" value="feature" />
+ <property name="id" value="org.eclipse.ve.tests" />
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Targets to assemble the built elements for particular configurations -->
+<!-- These generally call the generated assemble scripts (named in -->
+<!-- ${assembleScriptName}) but may also add pre and post processing -->
+<!-- Add one target for each root element and each configuration -->
+<!-- ===================================================================== -->
+
+<target name="assemble.org.eclipse.ve.tests">
+ <property name="archiveName" value="VE-junit-tests-${buildId}.zip"/>
+ <ant antfile="${assembleScriptName}"/>
+<!-- ADD POST STEPS -->
+</target>
+
+<!-- ===================================================================== -->
+<!-- Check out map files from correct repository -->
+<!-- Replace values for cvsRoot, package and mapVersionTag as desired. -->
+<!-- ===================================================================== -->
+<target name="checkLocal">
+ <available property="mapsLocal" file="${buildDirectory}/maps/org.eclipse.ve.releng" />
+</target>
+
+<target name="getMapFiles" depends="checkLocal" unless="mapsLocal">
+
+ <!-- *** change the repo info -->
+ <property name="mapCvsRoot" value=":pserver:anonymous@dev.eclipse.org:/home/tools" />
+
+ <property name="mapVersionTag" value="HEAD" />
+ <cvs cvsRoot="${mapCvsRoot}"
+ package="org.eclipse.ve.releng"
+ dest="${buildDirectory}/maps"
+ tag="${mapVersionTag}"
+ />
+ <!--tag the map files project-->
+ <antcall target="tagMapFiles" />
+</target>
+
+<target name="tagMapFiles" if="tagMaps">
+ <cvs dest="${buildDirectory}/maps/org.eclipse.ve.releng" command="tag v${timestamp}" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before setup -->
+<!-- ===================================================================== -->
+<target name="preSetup">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after setup but before starting the build proper -->
+<!-- ===================================================================== -->
+<target name="postSetup">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before fetching the build elements -->
+<!-- ===================================================================== -->
+<target name="preFetch">
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after the fetch -->
+<!-- ===================================================================== -->
+<target name="postFetch">
+ <replace dir="${buildDirectory}/plugins" value="${buildId}" token="@buildid@">
+ <include name="**/about.mappings" />
+ </replace>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before generating build scripts -->
+<!-- ===================================================================== -->
+<target name="preGenerate">
+
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after generating the build scripts -->
+<!-- ===================================================================== -->
+<target name="postGenerate">
+ <antcall target="clean" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before assembling -->
+<!-- ===================================================================== -->
+<target name="preAssemble">
+
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after assembling-->
+<!-- ===================================================================== -->
+<target name="postAssemble">
+</target>
+
+
+<!-- ===================================================================== -->
+<!-- Steps to do before running the build.xmls for the elements being built. -->
+<!-- ===================================================================== -->
+<target name="preProcess">
+ <replace dir="${buildDirectory}/plugins" value="${buildId}" token="@build@">
+ <include name="**/about.mappings" />
+ </replace>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after running the build.xmls for the elements being built. -->
+<!-- ===================================================================== -->
+<target name="postProcess">
+ <condition property="logsAvailable">
+ <istrue value="${javacVerbose}"/>
+ </condition>
+ <antcall target="gatherLogs" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do after everything is built and assembled -->
+<!-- (e.g., testing, posting, emailing, ...) -->
+<!-- ===================================================================== -->
+<target name="postBuild">
+ <antcall target="packageTestFramework" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Helper targets -->
+<!-- ===================================================================== -->
+<target name="gatherLogs" if="logsAvailable">
+ <mkdir dir="${buildDirectory}/${buildLabel}/compilelogs" />
+ <antcall target="allElements">
+ <param name="target" value="gatherLogs" />
+ </antcall>
+
+ <unzip dest="${buildDirectory}/${buildLabel}/compilelogs" overwrite="true">
+ <fileset dir="${buildDirectory}/features/org.eclipse.ve.tests">
+ <include name="*.log.zip" />
+ </fileset>
+ </unzip>
+</target>
+<target name="clean" unless="noclean">
+ <antcall target="allElements">
+ <param name="target" value="cleanElement" />
+ </antcall>
+</target>
+
+<target name="packageTestFramework">
+ <!--package automated test framework used in GEF builds-->
+
+ <property name="workingDirectory" value="${buildDirectory}/test.assembly" />
+
+ <!--unzip the junit tests-->
+ <exec dir="${buildDirectory}/${buildLabel}" executable="unzip">
+ <arg line="-o -qq VE*junit*.zip -d ${workingDirectory}" />
+ </exec>
+
+ <!-- create top level testing directory-->
+ <delete dir="${workingDirectory}/ve-testing"/>
+ <mkdir dir="${workingDirectory}/ve-testing" />
+
+ <!--compile the tool used to generate the test.properties file, then run it.-->
+ <!--test.properties maps test plugin id's to the name of the plugin directory-->
+
+ <!--eclipse.home is relative to the scripts directory in the org.eclipse.pde.build plugin. Assume the plugins used in the classpath are in the same directory as org.eclipse.pde.build-->
+ <property name="eclipse.home" value="../../.." />
+
+ <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+ <javac verbose="true" failonerror="true" srcdir="${builderDirectory}/tools" destdir="${builderDirectory}/tools" classpath="${eclipse.home}/plugins/org.apache.xerces_4.0.13/xercesImpl.jar:${eclipse.home}/plugins/org.apache.xerces_4.0.13/xmlParserAPIs.jar"/>
+
+ <java classname="TestVersionTracker" >
+ <arg line="${workingDirectory}/eclipse/features/org.eclipse.ve.tests_0.5.0/feature.xml ${buildDirectory} ${workingDirectory}/ve-testing/test.properties" />
+ <classpath>
+ <pathelement path="${eclipse.home}/plugins/org.apache.xerces_4.0.13/xercesImpl.jar:${eclipse.home}/plugins/org.apache.xerces_4.0.13/xmlParserAPIs.jar:${builderDirectory}/tools" />
+ </classpath>
+ </java>
+
+ <!--load the property file created with the directory names for all test plugins-->
+ <property file="${workingDirectory}/ve-testing/test.properties" />
+
+ <!-- Remove the plugin version number appended to the org.eclipse.test plugin directory.
+ This is so that contributors of test.xml's do not have to update their paths to
+ library.xml in org.eclipse.test whenever its version is updated.
+ -->
+ <move todir="${workingDirectory}/eclipse/plugins/org.eclipse.test">
+ <fileset dir="${workingDirectory}/eclipse/plugins/${org.eclipse.test}" />
+ </move>
+
+ <!--the Ant move task leaves behind an empty directory-->
+ <delete dir="${workingDirectory}/eclipse/plugins/${org.eclipse.test}" includeEmptyDirs="true" />
+
+ <!-- rezip the JUnit plugin tests -->
+ <exec dir="${workingDirectory}" executable="zip">
+ <arg line="-r -q VE-junit-tests-${buildId}.zip eclipse"/>
+ </exec>
+
+ <delete dir="${workingDirectory}/eclipse" includeEmptyDirs="true" />
+
+ <!--Copy scripts and doc used in the automated testing to the testing directory-->
+ <copy todir="${workingDirectory}/ve-testing">
+ <fileset dir="${buildDirectory}/plugins/org.eclipse.test" includes="testframework.html,JUNIT.XSL" />
+ </copy>
+ <copy todir="${workingDirectory}/ve-testing">
+ <fileset dir="${builderDirectory}/testScripts" />
+ </copy>
+ <move file="${workingDirectory}/VE-junit-tests-${buildId}.zip" todir="${workingDirectory}/ve-testing"/>
+
+ <!--copy in the file containing the URL of the Eclipse build used for testing-->
+ <copy todir="${workingDirectory}/ve-testing" file="${buildDirectory}/maps/org.eclipse.ve.releng/maps/build.cfg" />
+
+ <!--set execute permission on *nix shell script-->
+ <chmod file="${workingDirectory}/ve-testing/runtests" perm="755"/>
+
+ <!--create zip file of the automated testing framework-->
+ <exec dir="${workingDirectory}" executable="zip">
+ <arg line="-r -q ${buildDirectory}/${buildLabel}/VE-Automated-Tests-${buildId}.zip ve-testing"/>
+ </exec>
+
+ <delete file="${buildDirectory}/${buildLabel}/VE-junit-tests-${buildId}.zip" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Default target -->
+<!-- ===================================================================== -->
+<target name="noDefault">
+ <echo message="You must specify a target when invoking this file" />
+</target>
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/customTest.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/customTest.xml
new file mode 100644
index 0000000..8b991b2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/customTest.xml
@@ -0,0 +1,15 @@
+<project name="Customized testing instructions" default="noDefault">
+
+ <target name="customSetup">
+ <!--copy the script which invokes the tests -->
+ <copy file="${tester}/runtests.bat" todir="${executionDir}" />
+
+ <!--copy the runtimes to install for testing, excluding the JUnit plug-in tests-->
+ <copy file="${buildDirectory}/${buildLabel}/VE-runtime-${buildId}.zip" todir="${executionDir}" />
+ <copy file="${buildDirectory}/../emf.zip" todir="${executionDir}" />
+ <copy file="${buildDirectory}/../gef.zip" todir="${executionDir}" />
+ <copy file="${buildDirectory}/../eclipse-SDK.zip" todir="${executionDir}" />
+ </target>
+
+ <target name="noDefault"/>
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/runtests.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/runtests.bat
new file mode 100644
index 0000000..6c73b28
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/runtests.bat
@@ -0,0 +1,4 @@
+@echo off
+cd .
+REM run tests
+call runtests.bat -vm ..\jdk1.3.1\jre\bin\java "-Dplatform=win32" > %1 \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/testing.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/testing.properties
new file mode 100644
index 0000000..532d71a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testConfigs/testingConfigTemplate/testing.properties
@@ -0,0 +1,51 @@
+###############################################################################
+# Copyright (c) 2000, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+#target to call in test.xml: runtests-local|runtests-remote
+testTarget=runtests-local
+
+#directory where automated testing framework will be installed
+testDir=${testBase}/${buildLabel}
+
+#name of zip file containing automated testing framework and JUnit test plug-ins
+testFramework=VE-Automated-Tests-${buildId}.zip
+
+#name of runtime to install and test
+runtime=VE-SDK-${buildId}.zip
+
+#directory where test scripts are launched
+executionDir=${testDir}/ve-testing
+
+#eclipse platforms: win32 | linux-motif | linux-gtk | aix-motif | hpux-motif |solaris-motif
+platform=win32
+
+#name of file that captures console output from running JUnit plug-in tests
+consolelog=win32_consolelog.txt
+
+#executable used to launch testing
+testExecutable=cmd
+
+#arguments to ${testExecutable}
+args=/c ${executionDir}/runtests.bat win32_consolelog.txt
+
+#URL to vm used to run tests
+vmUrl=
+
+#name and path to downloaded vm.
+vmDest=${testBase}/testVmWin.zip
+
+#executable used to install downloaded vm
+vmInstallExecutable=unzip
+
+#arguments to ${vmInstallExecutable}
+vmInstallCommand=-o -qq ${vmDest}
+
+#Ant property to set if vm installation not required
+#skipVmInstall=true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/readme.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/readme.html
new file mode 100644
index 0000000..5b59b04
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/readme.html
@@ -0,0 +1,166 @@
+<html>
+<head>
+<title>Instructions</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<font size="+2"> Automated Testing of VE Builds</font>
+<p>last updated: November 4, 2003</p>
+<p><font size="+1">Description</font></p>
+<p>This document describes how to run the Visual Editor JUnit test plugins from the command
+ line. This is the same mechanism used in VE builds.</p>
+<p>Click <a href="testframework.html">here</a> for a description of the testing
+ framework, and how it can be used outside of the setup described here.</p>
+<p>If you simply wish to write and run JUnit tests interactively from an Eclipse
+ workbench, try one of the links below:</p>
+<p><a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/jdt-ui-home/plugins/org.eclipse.jdt.junit/index.html">JUnit
+ Support in Eclipse</a><br>
+<a href="http://dev.eclipse.org:8080/help/content/help:/org.eclipse.jdt.doc.user/tasks/tasks-207.htm?resultof=%6a%75%6e%69%74%20&toc=%2Forg.eclipse.jdt.doc.user%2Ftoc.xml">Using
+ JUnit</a></p>
+
+<p><font size="+1">Requirements</font></p>
+<p>1. All test machines must have a java runtime environment (version 1.3.1) installed and added to the path environment variable (see
+ <a href="#vm">-vm</a> parameter below).<br>
+ 2. <a href="http://www.info-zip.org/pub/infozip/UnZip.html">Info-ZIP UnZip</a>
+ version 5.41 or later installed and added to the path.<br>
+ 3. The Automated Test feature from a
+ <a href="http|//download.eclipse.org/tools/vep/downloads/"> VE downloads</a>.
+ This contains the test framework plugins and the JUnit test plugins to run.<br>
+ 4. The VE-runtime zip file from the same build as the Automated Test feature.<br>
+ 5. An Eclipse SDK, GEF runtime, and EMF runtime zip files. The URL and build name of the required builds
+ are specified in the build.cfg file included in the Automated Test zip file.</p>
+<p><font size="+1">Setup</font></p>
+<p>1. Extract the VE-Automated-Tests-&lt;buildid&gt;.zip. On Window, extract
+ this file close to the root of the drive to prevent some path names from exceeding
+ the 255 character limit. This will create a top-level directory &quot;<b>ve-testing</b>&quot;.<br>
+ 2. Place the Eclipse SDK, GEF, EMF, and VE runtime zip files in the ve-testing directory.
+ Do not unzip these files. (The test scripts will take care of this)<br>
+</p>
+<p><font size="+1">Running Tests</font></p>
+<p>1. cd to the ve-testing directory<br>
+ 2. Run the following script:</p>
+<p><b>runtests [-os &lt;operating system&gt;] [-ws &lt;windowing system&gt;] [-arch
+ &lt;architecture&gt;] [-noclean] [&lt;testTarget&gt;][-properties &lt;path&gt;][-vm
+ &lt;path to java executable&gt;]</b></p>
+All parameters and targets are optional on windows systems. Just running &quot;runtests&quot;
+will run <b>ALL</b> tests on Windows, installing a clean Eclipse and VE SDK between
+each test target. On *nix systems, the os, ws and arch parameters must be specified.
+<br>
+<br>
+Test results are placed in the ve-testing/results directory in xml and html format.<br>
+<p><font size="+1"><a name="vm"></a>Parameters</font></p>
+<table width="90%" border="1">
+ <tr>
+ <td>Parameter</td>
+ <td>Description</td>
+ </tr>
+ <tr>
+ <td>-os &lt;operating system&gt;</td>
+ <td>The OS the tests are being run on. One of: aix, hpux, linux, qnx, solaris,
+ win32. <b>Default win32</b></td>
+ </tr>
+ <tr>
+ <td>-ws &lt;windowing system&gt;</td>
+ <td>The windowing system the tests are being run on. One of: motif, gtk, photon,
+ win32. <b>Default win32</b></td>
+ </tr>
+ <tr>
+ <td>-arch &lt;architecture&gt;</td>
+ <td>The architecture the tests are being run on. One of: ppc, PA_RISC, x86,
+ sparc. <b>Default x86</b></td>
+ </tr>
+ <tr>
+ <td>-noclean</td>
+ <td>Run tests without installing an Eclipse and GEF SDK and tests between
+ test targets. Default is to re-install these between test targets.</td>
+ </tr>
+ <tr>
+ <td>-properties</td>
+ <td>Used to reference a properties file containing additional Ant properties
+ used in running tests.Can be used to pass additional vm arguments to the
+ Java virtual machine running the tests by adding the entry &quot;extraVMargs=&lt;the
+ args to pass to the vm&gt;&quot; to the specified properties file.</td>
+ </tr>
+ <tr>
+ <td>-vm</td>
+ <td>The full path to the java executable with which to run the tests. Use
+ this to specify a specific virtual machine with which to run the tests.
+ For example, &quot;-vm c:\sun131\jre\bin\java&quot;. Default set to &quot;java&quot;
+ (i.e. java executable on system path). </td>
+ </tr>
+</table>
+
+<p><font size="+1">Test Targets</font></p>
+<p>Specifies which ant target to run in the main test.xml. Typically this corresponds
+ to a test project's tests. If you do not specify a test target then the <b>all</b>
+ test target is run.</p>
+
+<table width="90%" border="1">
+ <tr>
+ <td>all</td>
+ <td>Runs all the targets below.</td>
+ </tr>
+ <tr>
+ <td>ve</td>
+ <td>Runs the JUnit plug-in tests in org.eclipse.ve.tests</td>
+ </tr>
+ <tr>
+ <td>jem</td>
+ <td>Runs the JUnit plug-in tests in org.eclipse.jem.tests</td>
+ </tr>
+ <tr>
+ <td>genHtml</td>
+ <td>Converts xml test results in the &quot;ve-testing\results&quot; directory
+ to html.</td>
+ </tr>
+</table>
+<p>&nbsp;</p>
+<p><font size="+1"><a name="appendixb"></a>Appendix A- Supported os, ws, and arch
+ value combinations</font></p>
+<p>The following table contains the values that can be used with the -os, -ws,
+ and -arch switches.</p>
+<table width="75%" border="1">
+ <tr>
+ <td>Operating System (os)</td>
+ <td>Windowing System (ws)</td>
+ <td>Architecture (arch)</td>
+ </tr>
+ <tr>
+ <td>aix</td>
+ <td>motif</td>
+ <td>ppc</td>
+ </tr>
+ <tr>
+ <td>hpux</td>
+ <td>motif</td>
+ <td>PA_RISC</td>
+ </tr>
+ <tr>
+ <td>linux</td>
+ <td>gtk</td>
+ <td>x86</td>
+ </tr>
+ <tr>
+ <td>linux</td>
+ <td>motif</td>
+ <td>x86</td>
+ </tr>
+ <tr>
+ <td height="24">qnx</td>
+ <td height="24">photon</td>
+ <td height="24">x86</td>
+ </tr>
+ <tr>
+ <td>solaris</td>
+ <td>motif</td>
+ <td>sparc</td>
+ </tr>
+ <tr>
+ <td>win32</td>
+ <td>win32</td>
+ <td>x86</td>
+ </tr>
+</table>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests
new file mode 100644
index 0000000..5a3b1ea
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests
@@ -0,0 +1,96 @@
+# !/bin/sh
+
+# by default, use the java executable on the path
+vm=java
+
+#set the DISPLAY for running tests on Linux
+DISPLAY=`$HOST`:0.0;export DISPLAY
+
+#this value must be set when using rsh to execute this script, otherwise the script will execute from the user's home directory
+dir=.
+
+# operating system, windowing system and architecture variables
+os=
+ws=
+arch=
+
+# list of tests (targets) to execute in test.xml
+tests=
+
+# default value to determine if eclipse should be reinstalled between running of tests
+installmode="clean"
+
+# name of a property file to pass to Ant
+properties=
+
+# message printed to console
+usage="usage: $0 -os <osType> -ws <windowingSystemType> -arch <architecture> [-noclean] [<test target>][-properties <path>]"
+
+
+# proces command line arguments
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ -dir) dir="$2"; shift;;
+ -os) os="$2"; shift;;
+ -ws) ws="$2"; shift;;
+ -arch) arch="$2"; shift;;
+ -noclean) installmode="noclean";;
+ -properties) properties="-propertyfile $2";shift;;
+ -vm) vm="$2";shift;;
+ *) tests=$tests\ $1;;
+ esac
+ shift
+done
+
+# for *nix systems, os, ws and arch values must be specified
+if [ "x$os" = "x" ]
+then
+ echo >&2 "$usage"
+ exit 1
+fi
+
+if [ "x$ws" = "x" ]
+then
+ echo >&2 "$usage"
+ exit 1
+fi
+
+if [ "x$arch" = "x" ]
+then
+ echo >&2 "$usage"
+ exit 1
+fi
+
+#necessary when invoking this script through rsh
+cd $dir
+
+# verify os, ws and arch values passed in are valid before running tests
+if [ "$os-$ws-$arch" = "linux-motif-x86" ] || [ "$os-$ws-$arch" = "linux-gtk-x86" ] || [ "$os-$ws-$arch" = "solaris-motif-sparc" ] || [ "$os-$ws-$arch" = "solaris-gtk-sparc" ] || [ "$os-$ws-$arch" = "aix-motif-sparc" ] || [ "$os-$ws-$arch" = "hpux-motif-PA_RISC" ] || [ "$os-$ws-$arch" = "qnx-photon-x86" ]
+then
+ # Replace the boot eclipse (The eclipse used to run the main test.xml, this will start another eclipse later)
+ rm -r eclipse
+ rm -r workspace
+ tar -xzf eclipse-SDK-*.tar.gz
+ unzip -qq -o -C VE-junit-tests-*.zip */plugins/org.eclipse.test*
+
+ if [ "$installmode" = "noclean" ]
+ then
+ # if tests are to run without reinstalling eclipse, only install the test eclipse if it does not exist
+ # If the test-eclipse directory is in a partially installed state, it should be deleted manually
+
+ if [ ! -r test-eclipse/eclipse ]
+ then
+ $vm -cp eclipse/startup.jar org.eclipse.core.launcher.Main -noupdate -ws $ws -os $os -arch $arch -application org.eclipse.ant.core.antRunner -file test.xml setup -Dws=$ws -Dos=$os -Darch=$arch -Dclean=true -logger org.apache.tools.ant.DefaultLogger
+ fi
+ fi
+
+# run tests
+$vm -cp eclipse/startup.jar -Dosgi.ws=$ws -Dosgi.os=$os -Dosgi.arch=$arch org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -file test.xml $tests -Dws=$ws -Dos=$os -Darch=$arch -D$installmode=true $properties -logger org.apache.tools.ant.DefaultLogger
+
+# display message to user if os, ws and arch are invalid
+else
+ echo "The os, ws and arch values are either invalid or are an invalid combination"
+
+exit 1
+fi \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests.bat
new file mode 100644
index 0000000..2cb4bd5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/runtests.bat
@@ -0,0 +1,88 @@
+@echo off
+
+REM default java executable
+set vm=java
+
+REM reset list of ant targets in test.xml to execute
+set tests=
+
+REM default switch to determine if eclipse should be reinstalled between running of tests
+set installmode=clean
+
+REM property file to pass to Ant scripts
+set properties=
+
+REM default values for os, ws and arch
+set os=win32
+set ws=win32
+set arch=x86
+
+REM reset ant command line args
+set ANT_CMD_LINE_ARGS=
+
+REM ****************************************************************
+REM
+REM Delete previous Eclipse installation and workspace
+REM (This is the Eclipse that controls the test. The test will start another Eclipse.
+REM
+REM ****************************************************************
+if EXIST eclipse rmdir /S /Q eclipse
+if EXIST workspace rmdir /s /Q workspace
+
+REM ****************************************************************
+REM
+REM Install Eclipse and org.eclipse.test plugin
+REM
+REM ****************************************************************
+
+unzip -qq -o eclipse-SDK*.zip
+unzip -qq -o -C VE-junit-tests*.zip */plugins/org.eclipse.test*
+
+
+:processcmdlineargs
+
+REM ****************************************************************
+REM
+REM Process command line arguments
+REM
+REM ****************************************************************
+
+if x%1==x goto setup
+if x%1==x-ws set ws=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-os set os =%2 && shift && shift && goto processcmdlineargs
+if x%1==x-arch set arch=%2 && shift && shift && goto processcmdlineargs
+if x%1==x-noclean set installmode=noclean && shift && goto processcmdlineargs
+if x%1==x-properties set properties=-propertyfile %2 && shift && shift && goto processcmdlineargs
+if x%1==x-vm set vm=%2 && shift && shift && goto processcmdlineargs
+
+set tests=%tests% %1 && shift && goto processcmdlineargs
+
+
+:setup
+REM ****************************************************************
+REM
+REM Setup up the test (target) GEF SDK
+REM
+REM ** if -noclean set, Eclipse will be re-installed only if the
+REM directory target\eclipse does not exist. If this directory
+REM exists in a partially installed state, it should be deleted manually
+REM and the script rerun with the same parameter settings. **
+REM
+REM ****************************************************************
+
+REM command for executing antRunner headless
+set antRunner=%vm% -cp eclipse\startup.jar -Dosgi.ws=%ws% -Dosgi.os=%os% -Dosgi.arch=%arch% org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner
+
+if %installmode%==noclean %antRunner% -file test.xml setup -Dws=%ws% -Dos=%os% -Darch=%arch% "-D%installmode%=true" -logger org.apache.tools.ant.DefaultLogger
+goto run
+
+
+:run
+REM ***************************************************************************
+REM Run tests by running Ant in Eclipse on the test.xml script
+REM ***************************************************************************
+
+%antRunner% -file test.xml %tests% -Dws=%ws% -Dos=%os% -Darch=%arch% %properties% "-D%installmode%=true" -logger org.apache.tools.ant.DefaultLogger
+goto end
+
+:end \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/test.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/test.xml
new file mode 100644
index 0000000..334914c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/testScripts/test.xml
@@ -0,0 +1,77 @@
+<project name="Automated VE Testing" default="all" basedir="." >
+
+ <!--properties file containing the plugin directory name including version number-->
+ <property file="test.properties" />
+
+ <!--default directory where test-eclipse will be installed-->
+ <property name="install" value="${basedir}/target" />
+
+ <!--name that can be added to report name to identify which platform tests results come from-->
+ <property name="platform" value="" />
+
+ <!-- The root of the eclipse installation -->
+ <property name="eclipse-home" value="${install}/eclipse" />
+
+ <!-- The directory that will contain the xml and html results from the tests that are run -->
+ <property name="results" value="${basedir}/results" />
+
+ <target name="init">
+ </target>
+
+ <target name="setup" if="clean" description="Reinstall the test Eclipse installation if specified by user">
+ <delete dir="${install}" />
+ <mkdir dir="${install}" />
+
+ <!--The eclipse SDK must exist before this script is executed-->
+ <exec dir="." executable="unzip">
+ <arg line="-o -qq eclipse-SDK*.zip -d ${install}"/>
+ </exec>
+
+ <exec dir="." executable="unzip">
+ <arg line="-o -qq GEF*.zip -d ${install}/eclipse"/>
+ </exec>
+
+ <exec dir="." executable="unzip">
+ <arg line="-o -qq emf*.zip -d ${install}/eclipse"/>
+ </exec>
+
+ <exec dir="." executable="unzip">
+ <arg line="-o -qq VE-runtime-*.zip -d ${install}/eclipse"/>
+ </exec>
+
+ <exec dir="." executable="unzip">
+ <arg line="-o -qq VE-junit-tests-*.zip -d ${install}"/>
+ </exec>
+ </target>
+
+ <target name="runtests" depends="setup" description="Runs ant on the test.xml for a specified plugin. Requires a property value setting for testPlugin only if test.properties is not available. The property testPlugin represents a directory name made up of the plugin id and plugin version. This directory must contain a valid test.xml.">
+ <ant antfile="${eclipse-home}/plugins/${testPlugin}/test.xml" dir="${eclipse-home}" />
+ <copy file="${eclipse-home}/${report}.xml" tofile="${results}/xml/${report}_${platform}.xml" />
+ </target>
+
+ <target name="ve" description="Runs the org.eclipse.ve.tests test.xml">
+ <antcall target="runtests">
+ <param name="testPlugin" value="${org.eclipse.ve.tests}" />
+ <param name="report" value="org.eclipse.ve.tests" />
+ </antcall>
+ </target>
+
+ <target name="jem" description="Runs the org.eclipse.jem.tests test.xml">
+ <antcall target="runtests">
+ <param name="testPlugin" value="${org.eclipse.jem.tests}" />
+ <param name="report" value="org.eclipse.jem.tests" />
+ </antcall>
+ </target>
+
+ <target name="all">
+ <antcall target="jem" />
+ <antcall target="ve" />
+ <antcall target="genHtml" />
+ </target>
+
+ <target name="genHtml" description="Generates HTML results with provided JUNIT.XSL provided">
+ <style style="JUNIT.XSL" basedir="${results}/xml" destdir="${results}/html" />
+ </target>
+
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/tools/TestVersionTracker.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/tools/TestVersionTracker.java
new file mode 100644
index 0000000..9401f34
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/builderTemplate/tests/tools/TestVersionTracker.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/**
+ * This class finds the version of a feature, plugin, or fragment in a given
+ * build source tree.
+ */
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+import org.apache.xerces.parsers.SAXParser;
+import org.xml.sax.SAXException;
+import java.io.*;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+public class TestVersionTracker extends DefaultHandler {
+
+ private String installDirectory;
+ private Hashtable elements;
+ private SAXParser parser;
+ private String xmlFile;
+
+ //test
+ public static void main(String[] args) {
+ TestVersionTracker Tracker =
+ new TestVersionTracker(args[1]);
+ Tracker.parse(args[0]);
+ Tracker.writeProperties(args[2], true);
+ }
+
+ public TestVersionTracker(String install, Hashtable elements) {
+ // Create a Xerces SAX Parser
+ parser = new SAXParser();
+
+ // Set Content Handler
+ parser.setContentHandler (this);
+
+ // directory containing the source for a given build
+ installDirectory = install;
+
+ // instantiate hashtable that will hold directory names with versions for elements
+ this.elements = elements;
+ }
+
+ public TestVersionTracker(String install) {
+ this(install, new Hashtable());
+ }
+
+ public void parse(String xmlFile){
+ this.xmlFile = xmlFile;
+ // Parse the Document
+ try {
+ parser.parse(this.xmlFile);
+ } catch (SAXException e) {
+ System.err.println (e);
+ } catch (IOException e) {
+ System.err.println (e);
+
+ }
+ }
+
+ // Start Element Event Handler
+ public void startElement(
+ String uri,
+ String local,
+ String qName,
+ Attributes atts) {
+
+ String element = atts.getValue("id");
+ String version = atts.getValue("version");
+
+ if (local.equals("plugin") || local.equals("fragment")) {
+ elements.put(element,element+"_"+version);
+ } else if (local.equals("feature"))
+ elements.put(element+"-feature",element+"_"+version);
+ else if (local.equals("includes")) {
+ File thisFile = new File(xmlFile);
+ String includeFile = thisFile.getParentFile().getParent() + '/' + element+"_"+version + "/feature.xml";
+ TestVersionTracker recurseTracker = new TestVersionTracker(installDirectory, elements);
+ recurseTracker.parse(includeFile);
+ }
+ }
+
+ public void writeProperties(String propertiesFile,boolean append){
+ try{
+
+ PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append));
+
+ Enumeration keys = elements.keys();
+
+ while (keys.hasMoreElements()){
+ Object key = keys.nextElement();
+ writer.println(key.toString()+"="+elements.get(key).toString());
+ writer.flush();
+ }
+ writer.close();
+
+ } catch (IOException e){
+ System.out.println("Unable to write to file "+propertiesFile);
+ }
+
+
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/config.ini b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/config.ini
new file mode 100644
index 0000000..fd0adce
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/config.ini
@@ -0,0 +1,63 @@
+# Eclipse runtime configuration file
+# This file contains a number of key/value pairs that are merged into the
+# System properties on system startup. The values control the way the
+# runtime is structured and runs.
+
+# Note: Only platform:/base/ and file: URLs are supported. In general the
+# URLs given may include a version number (e.g., .../location_1.2.3).
+# If a version is not specified, the system binds
+# to the location which matches exactly or to the versioned location with the
+# latest version number. If a version number is given then only exact matches
+# are considered.
+
+# The URL for the runtime entry point. The default value is
+# platform:/base/plugins/org.eclipse.osgi
+#osgi.framework = platform:/base/plugins/org.eclipse.osgi
+
+# The classpath for the framework found at the osgi.framework location. This
+# comma-separated list contains either URLs or simple element names. Simple
+# names are assumed to be relative to the framework's install directory.
+# Typically this value need not be set as it is initialized by the framework itself.
+# Version match searching is not done for URLs listed here.
+#osgi.frameworkClassPath =
+
+# The comma-separated list of locations to search for the splash screen file (splash.bmp).
+# For each list element a subdirectory structure based on the pattern nl/<locale> is searched.
+# The system binds to the first matching file. There is no default value.
+osgi.splashPath = platform:/base/plugins/org.eclipse.platform
+
+# The location of the splash screen file. If this value is set at system startup it is used
+# in favour of the osgi.splashPath searching outlined above. If the value is not set
+# the searching is done and this key is bound to the result of the search.
+#osgi.splashLocation =
+
+# The comma-separated list of bundles which are automatically installed and optionally started
+# once the system is up and running. Each entry if of the form
+# <URL | simple bundle location>[@ [<startlevel>] [":start"]]
+# If the startlevel is omitted then the framework will use the default start level for the bundle.
+# If the "start" tag is added then the bundle will be marked as started after being installed.
+# Simple bundle locations are interepreted as relative to the framework's parent directory.
+# The startlevel indicates the OSGi start level at which the bundle should run.
+# If this value is not set, the system computes an appropriate default.
+#osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start, org.eclipse.core.runtime@start
+osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.equinox.ds@2:start, org.eclipse.update.configurator@3:start,org.eclipse.core.runtime@start
+
+# The product to run. A given Eclipse configuration may contain many products.
+# The product identified will supply the branding (window icons, title bar text) etc
+# as well as define the default application to run.
+eclipse.product=org.eclipse.sdk.ide
+
+# The application to run. The value specified here is the id of the application extension
+# the runtime will find, instantiate and execute once the system is up. Note that typically
+# the identified eclipse.product defines the default application to run.
+#eclipse.application=
+
+# The default workspace location
+osgi.instance.area.default=@user.home/workspace
+
+# The build identifier
+eclipse.buildId=200905221710
+
+
+# End of file marker - must be here
+eof=eof \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributions.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributions.3
new file mode 100644
index 0000000..bd4c5c2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributions.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributors.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributors.3
new file mode 100644
index 0000000..d49f8f6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.contributors.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.extraData.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.extraData.3
new file mode 100644
index 0000000..0c44b12
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.extraData.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.mainData.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.mainData.3
new file mode 100644
index 0000000..7ce0a46
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.mainData.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.10 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.10
new file mode 100644
index 0000000..5dfc715
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.10
@@ -0,0 +1,10 @@
+#safe table
+#Mon Jan 23 14:13:31 PST 2012
+.contributors=3
+.table=3
+.mainData=3
+.namespaces=3
+.orphans=3
+.extraData=3
+.contributions=3
+.crc5d9d7c2b.v1
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.9 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.9
new file mode 100644
index 0000000..ae0e0a0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTable.9
@@ -0,0 +1,10 @@
+#safe table
+#Tue Dec 20 17:38:12 PST 2011
+.contributors=2
+.mainData=2
+.table=2
+.namespaces=2
+.orphans=2
+.contributions=2
+.extraData=2
+.crc726175c7.v1
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTableLock b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTableLock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.manager/.fileTableLock
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.namespaces.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.namespaces.3
new file mode 100644
index 0000000..3bb6e58
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.namespaces.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.orphans.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.orphans.3
new file mode 100644
index 0000000..8e0a6c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.orphans.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.table.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.table.3
new file mode 100644
index 0000000..7215404
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.core.runtime/.table.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.equinox.app/.manager/.fileTableLock b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.equinox.app/.manager/.fileTableLock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.equinox.app/.manager/.fileTableLock
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.bundledata.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.bundledata.3
new file mode 100644
index 0000000..7d5aefd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.bundledata.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.lazy.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.lazy.3
new file mode 100644
index 0000000..1b9967d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.lazy.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.8 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.8
new file mode 100644
index 0000000..d09abd0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.8
@@ -0,0 +1,6 @@
+#safe table
+#Mon Jan 23 14:13:31 PST 2012
+.bundledata=3
+.state=2
+.lazy=2
+.crc63102c87.v1
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.9 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.9
new file mode 100644
index 0000000..4dd6eea
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTable.9
@@ -0,0 +1,6 @@
+#safe table
+#Mon Jan 23 14:13:31 PST 2012
+.bundledata=3
+.state=3
+.lazy=3
+.crc95c976f8.v1
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTableLock b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTableLock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.manager/.fileTableLock
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.state.3 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.state.3
new file mode 100644
index 0000000..7dea2ff
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/.state.3
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/-543407111/artifacts.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/-543407111/artifacts.xml
new file mode 100644
index 0000000..110e963
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/-543407111/artifacts.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<repository name='update site: file:/usr/local/google/home/vsiva/internal/master/prebuilts/tools/build/basebuilder/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/' type='org.eclipse.equinox.p2.artifact.repository.simpleRepository' version='1'>
+ <properties size='2'>
+ <property name='p2.timestamp' value='1323280286677'/>
+ <property name='site.checksum' value='0'/>
+ </properties>
+ <mappings size='3'>
+ <rule filter='(&amp; (classifier=osgi.bundle))' output='${repoUrl}/plugins/${id}_${version}.jar'/>
+ <rule filter='(&amp; (classifier=binary))' output='${repoUrl}/binary/${id}_${version}'/>
+ <rule filter='(&amp; (classifier=org.eclipse.update.feature))' output='${repoUrl}/features/${id}_${version}.jar'/>
+ </mappings>
+ <artifacts size='0'/>
+</repository>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/982983255/artifacts.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/982983255/artifacts.xml
new file mode 100644
index 0000000..8327125
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/11/data/982983255/artifacts.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<repository name='update site: file:/usr/local/google/home/vsiva/internal/master/out/host/eclipse/rcp/target/repos/platform/' type='org.eclipse.equinox.p2.artifact.repository.simpleRepository' version='1'>
+ <properties size='2'>
+ <property name='p2.timestamp' value='1324432544295'/>
+ <property name='site.checksum' value='0'/>
+ </properties>
+ <mappings size='3'>
+ <rule filter='(&amp; (classifier=osgi.bundle))' output='${repoUrl}/plugins/${id}_${version}.jar'/>
+ <rule filter='(&amp; (classifier=binary))' output='${repoUrl}/binary/${id}_${version}'/>
+ <rule filter='(&amp; (classifier=org.eclipse.update.feature))' output='${repoUrl}/features/${id}_${version}.jar'/>
+ </mappings>
+ <artifacts size='0'/>
+</repository>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/110/1/.cp/ant_tasks/publisher-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/110/1/.cp/ant_tasks/publisher-ant.jar
new file mode 100644
index 0000000..3fb41ed
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/110/1/.cp/ant_tasks/publisher-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/118/1/.cp/lib/jarprocessor-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/118/1/.cp/lib/jarprocessor-ant.jar
new file mode 100644
index 0000000..87e5ee1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/118/1/.cp/lib/jarprocessor-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/121/1/.cp/lib/apitooling-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/121/1/.cp/lib/apitooling-ant.jar
new file mode 100644
index 0000000..5067438
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/121/1/.cp/lib/apitooling-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/2/data/SCR b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/2/data/SCR
new file mode 100644
index 0000000..1c788c7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/2/data/SCR
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/24/1/.cp/ant_tasks/helpbase-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/24/1/.cp/ant_tasks/helpbase-ant.jar
new file mode 100644
index 0000000..ffadae0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/24/1/.cp/ant_tasks/helpbase-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/27/1/.cp/lib/antsupportlib.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/27/1/.cp/lib/antsupportlib.jar
new file mode 100644
index 0000000..4c32a89
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/27/1/.cp/lib/antsupportlib.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/34/1/.cp/ant_tasks/pde-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/34/1/.cp/ant_tasks/pde-ant.jar
new file mode 100644
index 0000000..fb081e1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/34/1/.cp/ant_tasks/pde-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/46/1/.cp/lib/repository-tools-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/46/1/.cp/lib/repository-tools-ant.jar
new file mode 100644
index 0000000..16ed46f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/46/1/.cp/lib/repository-tools-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/59/1/.cp/jdtCompilerAdapter.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/59/1/.cp/jdtCompilerAdapter.jar
new file mode 100644
index 0000000..de0af06
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/59/1/.cp/jdtCompilerAdapter.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/67/1/.cp/ant_tasks/director-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/67/1/.cp/ant_tasks/director-ant.jar
new file mode 100644
index 0000000..8506195
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/67/1/.cp/ant_tasks/director-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/76/1/.cp/ant_tasks/resources-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/76/1/.cp/ant_tasks/resources-ant.jar
new file mode 100644
index 0000000..edab53f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/76/1/.cp/ant_tasks/resources-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/84/1/.cp/ant_tasks/metadataRepository-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/84/1/.cp/ant_tasks/metadataRepository-ant.jar
new file mode 100644
index 0000000..607bce5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/84/1/.cp/ant_tasks/metadataRepository-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/93/1/.cp/convert.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/93/1/.cp/convert.jar
new file mode 100644
index 0000000..d1f24d6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/bundles/93/1/.cp/convert.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/manifests/org.eclipse.build.tools_1.0.0.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/manifests/org.eclipse.build.tools_1.0.0.MF
new file mode 100644
index 0000000..0d20466
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.osgi/manifests/org.eclipse.build.tools_1.0.0.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Generated-from: 1327097251000;type=2
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.build.tools
+Bundle-SymbolicName: org.eclipse.build.tools; singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Localization: plugin
+Eclipse-LazyStart: true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/history/1327097249000.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/history/1327097249000.xml
new file mode 100644
index 0000000..d91d99e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/history/1327097249000.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config date="1323280284590" transient="false" version="3.0">
+<site enabled="true" policy="USER-EXCLUDE" updateable="true" url="platform:/base/">
+</site>
+</config>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/last.config.stamp b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/last.config.stamp
new file mode 100644
index 0000000..210b7e8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/last.config.stamp
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/platform.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/platform.xml
new file mode 100644
index 0000000..c6aea0c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/configuration/org.eclipse.update/platform.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config date="1327356715974" transient="false" version="3.0">
+<site enabled="true" policy="USER-EXCLUDE" updateable="true" url="platform:/base/">
+</site>
+</config>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse
new file mode 100644
index 0000000..b12ace5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse.ini b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse.ini
new file mode 100644
index 0000000..59bff9b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/eclipse.ini
@@ -0,0 +1,13 @@
+-startup
+plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
+--launcher.library
+plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.1.R36x_v20100810
+-showsplash
+org.eclipse.platform
+--launcher.XXMaxPermSize
+256m
+--launcher.defaultAction
+openFile
+-vmargs
+-Xms40m
+-Xmx384m
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/epl-v10.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Revision>2</o:Revision>
+ <o:TotalTime>3</o:TotalTime>
+ <o:Created>2004-03-05T23:03:00Z</o:Created>
+ <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+ <o:Pages>4</o:Pages>
+ <o:Words>1626</o:Words>
+ <o:Characters>9270</o:Characters>
+ <o:Lines>77</o:Lines>
+ <o:Paragraphs>18</o:Paragraphs>
+ <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+ <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {font-family:Tahoma;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+ font-family:Tahoma;
+ mso-fareast-font-family:"Times New Roman";}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libXm.so.2 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libXm.so.2
new file mode 100644
index 0000000..dc827a9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libXm.so.2
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libcairo-swt.so b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libcairo-swt.so
new file mode 100644
index 0000000..b66f958
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/libcairo-swt.so
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/notice.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+ modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml
new file mode 100644
index 0000000..ff920c7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml
@@ -0,0 +1,230 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<repository name='download cache' type='org.eclipse.equinox.p2.artifact.repository.simpleRepository' version='1.0.0'>
+ <properties size='2'>
+ <property name='p2.system' value='true'/>
+ <property name='p2.timestamp' value='1323280875806'/>
+ </properties>
+ <mappings size='3'>
+ <rule filter='(&amp; (classifier=osgi.bundle))' output='${repoUrl}/plugins/${id}_${version}.jar'/>
+ <rule filter='(&amp; (classifier=binary))' output='${repoUrl}/binary/${id}_${version}'/>
+ <rule filter='(&amp; (classifier=org.eclipse.update.feature))' output='${repoUrl}/features/${id}_${version}.jar'/>
+ </mappings>
+ <artifacts size='43'>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.carbon.macosx.ppc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='17896'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='187617'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.motif.hpux.ia64_32' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='14989'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.solaris.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='11007'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.jdt_root' version='3.6.2.r362_v20101117-0800-7z8XFW6FLFlmjJcvz03jyeFBLS_F'>
+ <properties size='1'>
+ <property name='download.size' value='8825'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.solaris.sparc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='12310'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.solaris.sparc' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='24399'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.wpf.win32.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='26736'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.motif.aix.ppc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='31492'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.aix.ppc64' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='245103'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.cocoa.macosx.x86_64' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='40421'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.motif.linux.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='1163775'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.cocoa.macosx.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='48332'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.cocoa.macosx.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='19199'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.win32.win32.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='17487'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.ppc64' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='60976'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.motif.linux.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='888932'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.solaris.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='23096'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.aix.ppc64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='245105'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.ppc64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='39457'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.win32.win32.ia64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='120578'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='161529'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.s390' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='40125'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.s390x' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='40331'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.carbon.macosx.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='47030'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp_root' version='3.6.2.r362_v20101104-9SAxFMKFkSAqi8axkv1ZjegmiBLY'>
+ <properties size='1'>
+ <property name='download.size' value='47850'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.win32.win32.x86_64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='19076'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.win32.win32.x86_64' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='26443'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.motif.hpux.ia64_32' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='14991'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.win32.win32.x86' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='23179'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.cocoa.macosx.x86_64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='11288'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.s390' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='28664'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.s390x' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='28870'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.platform_root' version='3.6.2.r362_v20110210-9gF78Gs1FrIGnHDHWkEcopoN8AmxeZflGDGKQi'>
+ <properties size='1'>
+ <property name='download.size' value='47850'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.cocoa.macosx.ppc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='19199'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.ppc' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='157148'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.motif.aix.ppc' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='31490'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.ppc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='168609'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.motif.solaris.sparc' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='24526'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.carbon.macosx.ppc' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='47030'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.rcp.configuration_root.gtk.linux.x86_64' version='1.0.0.M20110210-1200'>
+ <properties size='1'>
+ <property name='download.size' value='205941'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.carbon.macosx.x86' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='17896'/>
+ </properties>
+ </artifact>
+ <artifact classifier='binary' id='org.eclipse.equinox.executable_root.gtk.linux.x86_64' version='3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY'>
+ <properties size='1'>
+ <property name='download.size' value='179853'/>
+ </properties>
+ </artifact>
+ </artifacts>
+</repository>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..677c0d2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..756c742
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.carbon.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..9c60c48
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..9c60c48
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..9e66a9b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.cocoa.macosx.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.aix.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.aix.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..f0162e5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.aix.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..1b22406
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..3895731
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..96af3c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390x_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390x_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..893af37
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.s390x_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..a620034
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..2565efc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.linux.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..4de4828
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..005da79
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.gtk.solaris.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.aix.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.aix.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..7d4aa49
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.aix.ppc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.hpux.ia64_32_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.hpux.ia64_32_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..fed2681
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.hpux.ia64_32_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..975d7a1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.linux.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..f0fdd67
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.motif.solaris.sparc_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.ia64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.ia64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..e12f15f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.ia64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..bc65a2f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..3061208
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.win32.win32.x86_64_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.wpf.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.wpf.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
new file mode 100644
index 0000000..e717f4f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.equinox.executable_root.wpf.win32.x86_3.4.2.R36x_v20110125-7N7K7bF8zk1BAKMh0iz0t94miBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.jdt_root_3.6.2.r362_v20101117-0800-7z8XFW6FLFlmjJcvz03jyeFBLS_F b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.jdt_root_3.6.2.r362_v20101117-0800-7z8XFW6FLFlmjJcvz03jyeFBLS_F
new file mode 100644
index 0000000..0d732d4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.jdt_root_3.6.2.r362_v20101117-0800-7z8XFW6FLFlmjJcvz03jyeFBLS_F
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_3.6.2.r362_v20110210-9gF78Gs1FrIGnHDHWkEcopoN8AmxeZflGDGKQi b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_3.6.2.r362_v20110210-9gF78Gs1FrIGnHDHWkEcopoN8AmxeZflGDGKQi
new file mode 100644
index 0000000..cead129
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_3.6.2.r362_v20110210-9gF78Gs1FrIGnHDHWkEcopoN8AmxeZflGDGKQi
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.ppc_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.ppc_1.0.0.M20110210-1200
new file mode 100644
index 0000000..c456fe5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.ppc_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..5957a69
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.carbon.macosx.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..ac71f6b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_64_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_64_1.0.0.M20110210-1200
new file mode 100644
index 0000000..7122c61
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.cocoa.macosx.x86_64_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.aix.ppc64_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.aix.ppc64_1.0.0.M20110210-1200
new file mode 100644
index 0000000..6b0bbbe
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.aix.ppc64_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc64_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc64_1.0.0.M20110210-1200
new file mode 100644
index 0000000..a75b1bb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc64_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc_1.0.0.M20110210-1200
new file mode 100644
index 0000000..6b205de
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.ppc_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390_1.0.0.M20110210-1200
new file mode 100644
index 0000000..e74021c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390x_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390x_1.0.0.M20110210-1200
new file mode 100644
index 0000000..14f5691
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.s390x_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..823e895
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_64_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_64_1.0.0.M20110210-1200
new file mode 100644
index 0000000..4a4d76c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.linux.x86_64_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.sparc_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.sparc_1.0.0.M20110210-1200
new file mode 100644
index 0000000..eb2e73e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.sparc_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..ac69a4f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.gtk.solaris.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.aix.ppc_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.aix.ppc_1.0.0.M20110210-1200
new file mode 100644
index 0000000..38dae2e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.aix.ppc_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.hpux.ia64_32_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.hpux.ia64_32_1.0.0.M20110210-1200
new file mode 100644
index 0000000..0b01721
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.hpux.ia64_32_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.linux.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.linux.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..5be6c62
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.motif.linux.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_1.0.0.M20110210-1200
new file mode 100644
index 0000000..a5c7255
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_64_1.0.0.M20110210-1200 b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_64_1.0.0.M20110210-1200
new file mode 100644
index 0000000..1adf2b4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp.configuration_root.win32.win32.x86_64_1.0.0.M20110210-1200
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_3.6.2.r362_v20101104-9SAxFMKFkSAqi8axkv1ZjegmiBLY b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_3.6.2.r362_v20101104-9SAxFMKFkSAqi8axkv1ZjegmiBLY
new file mode 100644
index 0000000..35b1c79
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_3.6.2.r362_v20101104-9SAxFMKFkSAqi8axkv1ZjegmiBLY
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.engine/.settings/org.eclipse.equinox.p2.artifact.repository.prefs b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.engine/.settings/org.eclipse.equinox.p2.artifact.repository.prefs
new file mode 100644
index 0000000..ed3854d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.engine/.settings/org.eclipse.equinox.p2.artifact.repository.prefs
@@ -0,0 +1,29 @@
+#Fri Mar 30 15:24:24 PDT 2012
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/suffix=artifacts.xml
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/type=org.eclipse.equinox.p2.artifact.repository.simpleRepository
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/version=1.0.0
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/uri=file\:/usr/local/google/home/vsiva/internal/master/vendor/eclipse/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/type=org.eclipse.equinox.p2.artifact.repository.simpleRepository
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/isSystem=true
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/provider=
+eclipse.preferences.version=1
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/enabled=true
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/description=
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/name=download cache
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/version=1.0.0
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/isSystem=true
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/provider=
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/type=org.eclipse.equinox.p2.artifact.repository.simpleRepository
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/suffix=artifacts.xml
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/isSystem=true
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/suffix=artifacts.xml
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/enabled=true
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/uri=file\:/usr/local/google/home/raphael/master-internal/vendor/eclipse/basebuilder-3.6.2/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/version=1.0.0
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/description=
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/provider=
+repositories/file\:_usr_local_google_home_vsiva_internal_master_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/name=download cache
+repositories/file\:_usr_local_google_home_vsiva_internal_master_prebuilts_tools_build_basebuilder_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/uri=file\:/usr/local/google/home/vsiva/internal/master/prebuilts/tools/build/basebuilder/org.eclipse.releng.basebuilder/p2/org.eclipse.equinox.p2.core/cache/
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/name=download cache
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/enabled=true
+repositories/file\:_usr_local_google_home_raphael_master-internal_vendor_eclipse_basebuilder-3.6.2_org.eclipse.releng.basebuilder_p2_org.eclipse.equinox.p2.core_cache/description=
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/.cvsignore b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/com.ibm.icu_4.2.1.v20100412.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/com.ibm.icu_4.2.1.v20100412.jar
new file mode 100644
index 0000000..ea3b164
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/com.ibm.icu_4.2.1.v20100412.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet.jsp_2.0.0.v200806031607.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet.jsp_2.0.0.v200806031607.jar
new file mode 100644
index 0000000..97b095d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet.jsp_2.0.0.v200806031607.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet_2.5.0.v200910301333.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet_2.5.0.v200910301333.jar
new file mode 100644
index 0000000..f26b78b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/javax.servlet_2.5.0.v200910301333.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..43be30c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..717b594
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/ECLIPSEF.SF
@@ -0,0 +1,179 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: zi51b+P1EfmwQ6CvcJbkaxkQvPU=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: MrkSD3jxUThhRkvxibmezdKD9k8=
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: Qf7Hpq6FlpgySlhCQhtObsd3HFI=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: APiAPtADgoYGSwEquxQdQx5NN0A=
+
+Name: bin/ant.bat
+SHA1-Digest: VRSA9YOPmicxeIZD8LdYkqdUmEA=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: oQK6F+rUwsdxfJl58vbKAmtTs3Y=
+
+Name: lib/ant.jar
+SHA1-Digest: ZtKYhkrGFJfbohkrynY3ZpSJBqw=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: 2ixiAvxgE6YH/uncOapiS40J+ho=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: 564XZgAosCegcu55KV1DbBOC6/M=
+
+Name: about_files/LICENSE.dom.html
+SHA1-Digest: xK0He1PkoQXdHC48ROEqZRNXTL4=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: Lk7Vo06ABrH7brbJkP1hKRxLkMg=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: k1nCLfkjYhoIM7HKW3JLmgc09bk=
+
+Name: about_files/asl-v20.txt
+SHA1-Digest: pJO0L/tUizs1vz2W9gV2VmGJsDs=
+
+Name: lib/ant-nodeps.jar
+SHA1-Digest: k5VQrQcVElJqzkUPYcF1MsbZu2Y=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: KGlY7plBAaLs5g/DBGUxsh47e8U=
+
+Name: bin/runant.pl
+SHA1-Digest: 4EKNYCEcyO/SMqxm79fnts8/Q1c=
+
+Name: lib/ant-weblogic.jar
+SHA1-Digest: IrjJNGECK83P1InePf2qqq8MgJM=
+
+Name: bin/envset.cmd
+SHA1-Digest: anGgepI9TTUvD6W73h+kGQrc2d0=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: Jzub6NSrWxS9hYda+Wy/SP49SeI=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: 2adPVCaAjDiKQ+PrLzi8inaOh1Y=
+
+Name: bin/ant.cmd
+SHA1-Digest: fKm5e7CiWr2UH61jbx6Yol3cQZo=
+
+Name: etc/log.xsl
+SHA1-Digest: 0HD61tw+M8q33hpPVPkjJJe4SDo=
+
+Name: bin/antRun
+SHA1-Digest: 3xz5zLVIT2QJnPskzZCOuX0LVnw=
+
+Name: bin/runant.py
+SHA1-Digest: uMviIJaN6y/k6xUbjXhmUd6TN8E=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: 4PIBmNKIkI6tklKIQSWR8I8kJw0=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: P5EwFnaZ7vNiaUMZ17yETzUT00w=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: OEsPHq3PIr185ocUtm81ULkmobs=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: mfVMgdE+9JoC0hKc0Vc5f7pbe/c=
+
+Name: etc/changelog.xsl
+SHA1-Digest: 9ZFS8fHSvz42GLs2NDnqzLFo5G8=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: 3fB8MGqGG9rXWon4pCbOrFtFc3I=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: M6boZHWa9+JeDhCjXtq5Z9Y61dY=
+
+Name: bin/runrc.cmd
+SHA1-Digest: aq6+dBb+jdiXyrvDNmLIOzj21N8=
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: oQtcwC9ibgNmjXQ/gVD1KCAq2zU=
+
+Name: lib/ant-starteam.jar
+SHA1-Digest: j+3HO183L5hlPzpImJp1ysOrFd8=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: XS1ZY8LWBa38Y3nzpSemOuDJl1U=
+
+Name: plugin.properties
+SHA1-Digest: tNIh5OEXJJxtqSciwBvjmG5gUGg=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: I4vpbNEWJCvKvQOdBNECb/zGv+0=
+
+Name: lib/ant-trax.jar
+SHA1-Digest: xgPztOvEVEaHBZLDkdnxy6yqFC4=
+
+Name: bin/antRun.bat
+SHA1-Digest: KX8SW+sZ8gtQYr3boWRpl2DkWrE=
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: Tk4/Yi97DaP+b1FcRDjnZYu34tc=
+
+Name: about_files/LICENSE.sax.txt
+SHA1-Digest: CnKqzCUI0E0NUSlVIAfUd8gctxU=
+
+Name: lib/ant-stylebook.jar
+SHA1-Digest: k0gxs2t6nwPYdGwybcraPbiP84Y=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: nnPD6SI8Jt1MCJcrb8Rm4UMN9BM=
+
+Name: bin/ant
+SHA1-Digest: bnS5vQF5wYnqXs8zr+3LORKIA0U=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: cQKamOMX7Att9wW45aAohAWp3K0=
+
+Name: bin/complete-ant-cmd.pl
+SHA1-Digest: wXOPsOb8rPKKwt6rAb3XoXCwFgQ=
+
+Name: about_files/NOTICE
+SHA1-Digest: g5R8FDyNNir6o/tFVnDNSlcP+z0=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: l9n5bbCb9c0M+KR+JATmJ6ARYvs=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: 2hTCiaPp95X9ZjX8ZDwjvqwfT6U=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: M4u7091ckN+zoCaRvjal1SDwJQE=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: U6kFqWPIOz00WJQ6W/yeqyBUQq0=
+
+Name: about.html
+SHA1-Digest: tujWEJAt+/IKSC26IMuUh48ercA=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: U8xxI3AoPSoVepSv0ZbfrARsTZY=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: Bvmst1NiMllcc+sricG/3Eyszc0=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: DxCUdBEASL37Rt0XmndwgjbAQhc=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: nO/2hYEmR8tWCOuYtbeWZ8398ck=
+
+Name: bin/lcp.bat
+SHA1-Digest: EA5m2+HfGFLhb6ForQdjnlvl3cU=
+
+Name: bin/antenv.cmd
+SHA1-Digest: as5/uc6NFrw5Zqzjc5vZEWg6MsM=
+
+Name: bin/antRun.pl
+SHA1-Digest: Cw3hkFZ/7NbP7kPUGL/WM1n8EKk=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..51a6e13
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/MANIFEST.MF
@@ -0,0 +1,234 @@
+Manifest-Version: 1.0
+Bundle-ClassPath: lib/ant.jar,lib/ant-antlr.jar,lib/ant-apache-bcel.ja
+ r,lib/ant-apache-bsf.jar,lib/ant-apache-log4j.jar,lib/ant-apache-oro.
+ jar,lib/ant-apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-com
+ mons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.jar,lib/ant-java
+ mail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-jsch.jar,lib/ant
+ -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-nodeps.ja
+ r,lib/ant-starteam.jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/an
+ t-trax.jar,lib/ant-weblogic.jar
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.ant
+Require-Bundle: org.eclipse.osgi
+Export-Package: images,org.apache.tools.ant,org.apache.tools.ant.dispa
+ tch,org.apache.tools.ant.filters,org.apache.tools.ant.filters.util,or
+ g.apache.tools.ant.helper,org.apache.tools.ant.input,org.apache.tools
+ .ant.launch,org.apache.tools.ant.listener,org.apache.tools.ant.loader
+ ,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.compiler
+ s,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.taskde
+ fs.cvslib,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.ta
+ skdefs.optional,org.apache.tools.ant.taskdefs.optional.ccm,org.apache
+ .tools.ant.taskdefs.optional.clearcase,org.apache.tools.ant.taskdefs.
+ optional.depend,org.apache.tools.ant.taskdefs.optional.depend.constan
+ tpool,org.apache.tools.ant.taskdefs.optional.dotnet,org.apache.tools.
+ ant.taskdefs.optional.ejb,org.apache.tools.ant.taskdefs.optional.exte
+ nsion,org.apache.tools.ant.taskdefs.optional.extension.resolvers,org.
+ apache.tools.ant.taskdefs.optional.i18n,org.apache.tools.ant.taskdefs
+ .optional.image,org.apache.tools.ant.taskdefs.optional.j2ee,org.apach
+ e.tools.ant.taskdefs.optional.javacc,org.apache.tools.ant.taskdefs.op
+ tional.javah,org.apache.tools.ant.taskdefs.optional.jdepend,org.apach
+ e.tools.ant.taskdefs.optional.jlink,org.apache.tools.ant.taskdefs.opt
+ ional.jsp,org.apache.tools.ant.taskdefs.optional.jsp.compilers,org.ap
+ ache.tools.ant.taskdefs.optional.junit,org.apache.tools.ant.taskdefs.
+ optional.junit.xsl,org.apache.tools.ant.taskdefs.optional.native2asci
+ i,org.apache.tools.ant.taskdefs.optional.net,org.apache.tools.ant.tas
+ kdefs.optional.perforce,org.apache.tools.ant.taskdefs.optional.pvcs,o
+ rg.apache.tools.ant.taskdefs.optional.scm,org.apache.tools.ant.taskde
+ fs.optional.script,org.apache.tools.ant.taskdefs.optional.sos,org.apa
+ che.tools.ant.taskdefs.optional.sound,org.apache.tools.ant.taskdefs.o
+ ptional.splash,org.apache.tools.ant.taskdefs.optional.ssh,org.apache.
+ tools.ant.taskdefs.optional.starteam,org.apache.tools.ant.taskdefs.op
+ tional.unix,org.apache.tools.ant.taskdefs.optional.vss,org.apache.too
+ ls.ant.taskdefs.optional.windows,org.apache.tools.ant.taskdefs.rmic,o
+ rg.apache.tools.ant.types,org.apache.tools.ant.types.conditions,org.a
+ pache.tools.ant.types.mappers,org.apache.tools.ant.types.optional,org
+ .apache.tools.ant.types.optional.depend,org.apache.tools.ant.types.op
+ tional.image,org.apache.tools.ant.types.resolver,org.apache.tools.ant
+ .types.resources,org.apache.tools.ant.types.resources.comparators,org
+ .apache.tools.ant.types.resources.selectors,org.apache.tools.ant.type
+ s.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org
+ .apache.tools.ant.types.spi,org.apache.tools.ant.util,org.apache.tool
+ s.ant.util.depend,org.apache.tools.ant.util.depend.bcel,org.apache.to
+ ols.ant.util.facade,org.apache.tools.ant.util.java15,org.apache.tools
+ .ant.util.optional,org.apache.tools.ant.util.regexp,org.apache.tools.
+ bzip2,org.apache.tools.mail,org.apache.tools.tar,org.apache.tools.zip
+Bundle-Version: 1.7.1.v20090120-1145
+Bundle-ManifestVersion: 2
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: HM9u2rZ4l9zkLblCgoojM7DDEMk=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: cQnziGYZC2FrO0zwFE92P1bP2v8=
+
+Name: bin/ant.bat
+SHA1-Digest: Rc2etgn1RATkrEL3NCa3Fs75Ov8=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: ddaegkBkww5CoIlRpSR8RDUI1bQ=
+
+Name: lib/ant.jar
+SHA1-Digest: 6PeOyYgHflq8/BJsNW5QJYe/bn8=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: vlcZ6hOJ0B7RIb9yDJ8Sdy03JIQ=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: 5wrstoQm1gOYvHQeAnbrZBc2bGs=
+
+Name: about_files/LICENSE.dom.html
+SHA1-Digest: 9F8cZaCgriCte0T6Mt5hAFumadk=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: 5SE/NhPWEbqzGDGL58dwEbkhwRs=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: Y2w9SRmP1NsSq2DkGjScvzXUt68=
+
+Name: about_files/asl-v20.txt
+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
+
+Name: lib/ant-nodeps.jar
+SHA1-Digest: uOgyCn32BqAQBpCM9xLDPkxnySw=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: usdaZv0i1yjlQ5XcTScfmfUIEgs=
+
+Name: bin/runant.pl
+SHA1-Digest: tynYaGh8+BtWDsZ6PljZdoi+egU=
+
+Name: lib/ant-weblogic.jar
+SHA1-Digest: 5ssaPFVHNNCQsan3rufoFu7aeMc=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: CqSzAXEeeV20DtFpeujwjL9FEW8=
+
+Name: bin/envset.cmd
+SHA1-Digest: EJ+ljL5sbUQ8mWVn8V49XPBuAz0=
+
+Name: bin/ant.cmd
+SHA1-Digest: 4jPJI7nJO+v3oPpbi5GbrT7x9qk=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: k9EbgDpEhTdQhwgIKD20KyOsL7Y=
+
+Name: bin/antRun
+SHA1-Digest: S63QT5F5EI1BCpIj59nosT3lVTw=
+
+Name: etc/log.xsl
+SHA1-Digest: juv2H0VplMm4ri1rzgdOW0yCroc=
+
+Name: bin/runant.py
+SHA1-Digest: Kg3iFzRnZW6PVIFmbj7Eyuo72cM=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: miXgzhj1QitlJUYa8FR0Gi5iwhU=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: uPJuOq6GfQabpmjPVkYFCUqxWAc=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: U2Bb6aMxgbEYqXkCm2sujeLP7Zo=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: yL3TqCA4pc0daZXtXwAiCN6xHxI=
+
+Name: etc/changelog.xsl
+SHA1-Digest: 2EZZ+jSTt1TTlBYPN4vGUAX7cTQ=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: bGdolUPtmG4eRAeyhMcFc+R+wKA=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: 0rf14aLzhLsun24uUsXVVvkHM6I=
+
+Name: bin/runrc.cmd
+SHA1-Digest: eNo+cuYQicndcc56FVkRScD5w30=
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: GRm06cVTNYi99j4PuKE0zi3tuCo=
+
+Name: lib/ant-starteam.jar
+SHA1-Digest: 97x6fh5MI5fCLCyWjjfPtNmNvS0=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: JN5XK4Ky8c7sb5zwM4qCH8jgm1g=
+
+Name: plugin.properties
+SHA1-Digest: oZ8G+d0YZCeLv5mafw0x2OwbwOY=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: 5lw0nvu49CabmDOvsPAa2B68PP0=
+
+Name: lib/ant-trax.jar
+SHA1-Digest: LLxDWjTIAq0948QQMnJ3GWkdmt4=
+
+Name: bin/antRun.bat
+SHA1-Digest: zB9JbFFhlXTVgwaJlw61wNELj6k=
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: Nhg3avD/t8Ty9qKh3S+jgw3Iplw=
+
+Name: about_files/LICENSE.sax.txt
+SHA1-Digest: uLnQn2qwT77aJ6MThuLeWz1I5ek=
+
+Name: lib/ant-stylebook.jar
+SHA1-Digest: 7g2IoaUKEgY/v8QV5DzW8V7hfOs=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: RLrJw13NTvtNstsyI7hEBgXZu2o=
+
+Name: bin/ant
+SHA1-Digest: jK7w10Hy+BIiSimUAhjgizdaBuY=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: 5KYg/jQq+iuWKS5gF1qX37F+UX0=
+
+Name: bin/complete-ant-cmd.pl
+SHA1-Digest: F1mrSua1xk98goAA1YvtOoJNiuw=
+
+Name: about_files/NOTICE
+SHA1-Digest: v3XrGNGv2sQGqBe+ObJZnq9915g=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: Xsg3BscJLl/a8Lm9AwSnRf/7O1E=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: XIcHcYoM8I5hzTkhdiy5iskupIM=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: zmgmTYDnXS0QZvMd3wUarjPR7aE=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: omL0ZVdwD4xhFXiFIYksr1yJbi0=
+
+Name: about.html
+SHA1-Digest: cPPs9diR9VPNDzWrCs1FLNOdJEo=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: 1oML7OYqWjV+hPKu/ItdzrAFGcA=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: ME/2vW22HRXG87EwVJ9LFfkfyEI=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: CiDNbIvUzidOCeF0eWI2p9weDa8=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: cqV1rJSd4vMgVjNOmR50j2aN8kg=
+
+Name: bin/lcp.bat
+SHA1-Digest: eX7ICcBsanATsaEDkn5+oTA4QaQ=
+
+Name: bin/antenv.cmd
+SHA1-Digest: s2zvcJEs2E2x6ckfXZoGxx1OF1Y=
+
+Name: bin/antRun.pl
+SHA1-Digest: mynp1agPByxojQUKZqlVZkXZSHY=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/eclipse.inf
new file mode 100644
index 0000000..68d6fa9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/META-INF/eclipse.inf
@@ -0,0 +1,4 @@
+#Processed using Jarprocessor
+jarprocessor.exclude.children.sign = true
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about.html
new file mode 100644
index 0000000..08d5781
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>July 14, 2008</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for
+terms and conditions of use.</p>
+
+<h4>Ant 1.7.1</h4>
+<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
+
+<p>The Ant binary code in ant.jar and the scripts ant, ant.bat, ant.cmd, antenv.cmd, antRun, antRun.bat, antRun.pl, complete-ant-cmd.pl, envset.cmd, lcp.bat, runant.pl, runant.py and runrc.cmd are included with the plug-in with no modifications.
+The Ant source code is located in the zip files named ant-*src.zip.</p>
+
+<p>Your use of the Ant code and the scripts is subject to the terms and conditions of the Apache License, Version 2.0. A copy of the license is contained
+in the file <a href="about_files/asl-v20.txt" target="_blank">asl-v20.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The names &quot;Ant&quot; and &quot;Apache Software Foundation&quot; must not be used to endorse or promote products derived from this
+software without prior written permission. For written permission, please contact <a href="mailto:apache@apache.org">apache@apache.org</a>.</p>
+
+<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Ant includes the following software:</p>
+
+<blockquote>
+ <h4>DOM</h4>
+ <p>DOM is developed by the World Wide Web Consortium. Your use of DOM is subject to the terms and conditions of the license found in the
+ file <a href="about_files/LICENSE.dom.html" target="_blank">LICENSE.dom.html</a> which is included with this plug-in and can also be found at
+ <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720" target="_blank">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>.</p>
+
+ <h4>SAX</h4>
+
+ <p>SAX is developed by the SAX project (<a href="http://www.saxproject.org" target="_blank">http://www.saxproject.org</a>). Your use of SAX is subject to the
+ terms and conditions of the license found in the file <a href="about_files/LICENSE.sax.txt" target="_blank">LICENSE.sax.txt</a> which is included with this plug-in.</p>
+</blockquote>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.dom.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.dom.html
new file mode 100644
index 0000000..97e7898
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.dom.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>License</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<p>This license came from:<br>
+<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a></p>
+
+<p>
+W3C® SOFTWARE NOTICE AND LICENSE<br>
+Copyright © 1994-2001 <a href="http://www.w3.org/">World Wide Web Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts Institute of Technology</a>,
+<a href="http://www.inria.fr/">Institut National de Recherche en Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.<br>
+<a href="http://www.w3.org/Consortium/Legal/">http://www.w3.org/Consortium/Legal/</a></p>
+
+<p>
+This W3C work (including software, documents, or other related<br>
+items) is being provided by the copyright holders under the<br>
+following license. By obtaining, using and/or copying this work,<br>
+you (the licensee) agree that you have read, understood, and will<br>
+comply with the following terms and conditions:<br>
+Permission to use, copy, modify, and distribute this software<br>
+and its documentation, with or without modification, for any<br>
+purpose and without fee or royalty is hereby granted, provided that<br>
+you include the following on ALL copies of the software and<br>
+documentation or portions thereof, including modifications, that<br>
+you make:</p>
+
+<p>
+The full text of this NOTICE in a location viewable to users of<br>
+the redistributed or derivative work.</p>
+
+<p>
+Any pre-existing intellectual property disclaimers, notices, or<br>
+terms and conditions. If none exist, a short notice of the<br>
+following form (hypertext is preferred, text is permitted) should<br>
+be used within the body of any redistributed or derivative code:<br>
+"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of<br>
+Technology, Institut National de<br>
+Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.<br>
+http://www.w3.org/Consortium/Legal/"</p>
+
+<p>
+Notice of any changes or modifications to the W3C files,<br>
+including the date changes were made. (We recommend you provide <br>
+URIs to the location from which the code is derived.)</p>
+
+<p>
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND<br>
+COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR<br>
+IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF<br>
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE<br>
+USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD<br>
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.<br>
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,<br>
+SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE<br>
+SOFTWARE OR DOCUMENTATION.</p>
+
+<p>
+The name and trademarks of copyright holders may NOT be used in<br>
+advertising or publicity pertaining to the software without<br>
+specific, written prior permission. Title to copyright in this<br>
+software and any associated documentation will at all times remain<br>
+with copyright holders.</p>
+
+<p>
+____________________________________<br>
+This formulation of W3C's notice and license became active on<br>
+August 14 1998 so as to improve compatibility with GPL. This<br>
+version ensures that W3C software licensing terms are no more<br>
+restrictive than GPL and consequently W3C software may be<br>
+distributed in GPL packages. See the older formulation for the<br>
+policy prior to this date. Please see our Copyright FAQ for common <br>
+questions about using materials from<br>
+our site, including specific terms and conditions for packages like<br>
+libwww, Amaya, and Jigsaw. <br>
+Other questions about this notice can be<br>
+directed to site-policy@w3.org.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.sax.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.sax.txt
new file mode 100644
index 0000000..d46b3dc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/LICENSE.sax.txt
@@ -0,0 +1,20 @@
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+
+This page is now out of date -- see the new SAX site at
+http://www.saxproject.org/ for more up-to-date
+releases and other information. Please change your bookmarks.
+
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/NOTICE b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/NOTICE
new file mode 100644
index 0000000..4c88cc6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/NOTICE
@@ -0,0 +1,26 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Ant distribution. ==
+ =========================================================================
+
+ Apache Ant
+ Copyright 1999-2008 The Apache Software Foundation
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ This product includes also software developed by :
+ - the W3C consortium (http://www.w3c.org) ,
+ - the SAX project (http://www.saxproject.org)
+
+ The <sync> task is based on code Copyright (c) 2002, Landmark
+ Graphics Corp that has been kindly donated to the Apache Software
+ Foundation.
+
+ Portions of this software were originally based on the following:
+ - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+ - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+ - voluntary contributions made by Paul Eng on behalf of the
+ Apache Software Foundation that were originally developed at iClick, Inc.,
+ software copyright (c) 1999.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/asl-v20.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/asl-v20.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/about_files/asl-v20.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant
new file mode 100644
index 0000000..36d6e7c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant
@@ -0,0 +1,326 @@
+#! /bin/sh
+
+# 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.
+
+# Extract launch and ant arguments, (see details below).
+ant_exec_args=
+no_config=false
+use_jikes_default=false
+ant_exec_debug=false
+show_help=false
+for arg in "$@" ; do
+ if [ "$arg" = "--noconfig" ] ; then
+ no_config=true
+ elif [ "$arg" = "--usejikes" ] ; then
+ use_jikes_default=true
+ elif [ "$arg" = "--execdebug" ] ; then
+ ant_exec_debug=true
+ elif [ my"$arg" = my"--h" -o my"$arg" = my"--help" ] ; then
+ show_help=true
+ ant_exec_args="$ant_exec_args -h"
+ else
+ if [ my"$arg" = my"-h" -o my"$arg" = my"-help" ] ; then
+ show_help=true
+ fi
+ ant_exec_args="$ant_exec_args \"$arg\""
+ fi
+done
+
+# Source/default ant configuration
+if $no_config ; then
+ rpm_mode=false
+ usejikes=$use_jikes_default
+else
+ # load system-wide ant configuration (ONLY if ANT_HOME has NOT been set)
+ if [ -z "$ANT_HOME" -o "$ANT_HOME" = "/usr/share/ant" ]; then
+ if [ -f "/etc/ant.conf" ] ; then
+ . /etc/ant.conf
+ fi
+ fi
+
+ # load user ant configuration
+ if [ -f "$HOME/.ant/ant.conf" ] ; then
+ . $HOME/.ant/ant.conf
+ fi
+ if [ -f "$HOME/.antrc" ] ; then
+ . "$HOME/.antrc"
+ fi
+
+ # provide default configuration values
+ if [ -z "$rpm_mode" ] ; then
+ rpm_mode=false
+ fi
+ if [ -z "$usejikes" ] ; then
+ usejikes=$use_jikes_default
+ fi
+fi
+
+# Setup Java environment in rpm mode
+if $rpm_mode ; then
+ if [ -f /usr/share/java-utils/java-functions ] ; then
+ . /usr/share/java-utils/java-functions
+ set_jvm
+ set_javacmd
+ fi
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_HOME" ] ; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
+ fi
+ ;;
+esac
+
+if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
+ ## resolve links - $0 may be a link to ant's home
+ PRG="$0"
+ progname=`basename "$0"`
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+ done
+
+ ANT_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ANT_HOME=`cd "$ANT_HOME" > /dev/null && pwd`
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$ANT_HOME" ] &&
+ ANT_HOME=`cygpath --unix "$ANT_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# set ANT_LIB location
+ANT_LIB="${ANT_HOME}/lib"
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ elif [ -x "$JAVA_HOME/jre/bin/java" ] ; then
+ JAVACMD="$JAVA_HOME/jre/bin/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=`which java 2> /dev/null `
+ if [ -z "$JAVACMD" ] ; then
+ JAVACMD=java
+ fi
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly."
+ echo " We cannot execute $JAVACMD"
+ exit 1
+fi
+
+# Build local classpath using just the launcher in non-rpm mode or
+# use the Jpackage helper in rpm mode with basic and default jars
+# specified in the ant.conf configuration. Because the launcher is
+# used, libraries linked in ANT_HOME/lib will also be included, but this
+# is discouraged as it is not java-version safe. A user should
+# request optional jars and their dependencies via the OPT_JAR_LIST
+# variable
+if $rpm_mode && [ -x /usr/bin/build-classpath ] ; then
+ LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
+
+ # If no optional jars have been specified then build the default list
+ if [ -z "$OPT_JAR_LIST" ] ; then
+ for file in /etc/ant.d/*; do
+ if [ -f "$file" ]; then
+ case "$file" in
+ *~) ;;
+ *#*) ;;
+ *.rpmsave) ;;
+ *.rpmnew) ;;
+ *)
+ for dep in `cat "$file"`; do
+ case "$OPT_JAR_LIST" in
+ *"$dep"*) ;;
+ *) OPT_JAR_LIST="$OPT_JAR_LIST${OPT_JAR_LIST:+ }$dep"
+ esac
+ done
+ esac
+ fi
+ done
+ fi
+
+ # If the user requested to try to add some other jars to the classpath
+ if [ -n "$OPT_JAR_LIST" ] ; then
+ _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
+ if [ -n "$_OPTCLASSPATH" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
+ fi
+ fi
+
+ # Explicitly add javac path to classpath, assume JAVA_HOME set
+ # properly in rpm mode
+ if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
+ fi
+ if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
+ fi
+
+ # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
+ # user CLASSPATH first and ant-found jars after.
+ # In that case, the user CLASSPATH will override ant-found jars
+ #
+ # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
+ # with ant-found jars first and user CLASSPATH after
+ if [ -n "$CLASSPATH" ] ; then
+ # merge local and specified classpath
+ if [ -z "$LOCALCLASSPATH" ] ; then
+ LOCALCLASSPATH="$CLASSPATH"
+ elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
+ LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
+ else
+ LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
+ fi
+
+ # remove class path from launcher -cp option
+ CLASSPATH=""
+ fi
+else
+ # not using rpm_mode; use launcher to determine classpaths
+ if [ -z "$LOCALCLASSPATH" ] ; then
+ LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
+ else
+ LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
+ fi
+fi
+
+if [ -n "$JAVA_HOME" ] ; then
+ # OSX hack to make Ant work with jikes
+ if $darwin ; then
+ OSXHACK="${JAVA_HOME}/../Classes"
+ if [ -d "${OSXHACK}" ] ; then
+ for i in "${OSXHACK}"/*.jar
+ do
+ JIKESPATH="$JIKESPATH:$i"
+ done
+ fi
+ fi
+fi
+
+# Allow Jikes support (off by default)
+if $usejikes; then
+ ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
+fi
+
+# For Cygwin, switch paths to appropriate format before running java
+# For PATHs convert to unix format first, then to windows format to ensure
+# both formats are supported. Probably this will fail on directories with ;
+# in the name in the path. Let's assume that paths containing ; are more
+# rare than windows style paths on cygwin.
+if $cygwin; then
+ if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
+ format=mixed
+ else
+ format=windows
+ fi
+ ANT_HOME=`cygpath --$format "$ANT_HOME"`
+ ANT_LIB=`cygpath --$format "$ANT_LIB"`
+ JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
+ LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
+ LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
+ if [ -n "$CLASSPATH" ] ; then
+ CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
+ CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
+ fi
+ CYGHOME=`cygpath --$format "$HOME"`
+fi
+
+# Show script help if requested
+if $show_help ; then
+ echo $0 '[script options] [options] [target [target2 [target3] ..]]'
+ echo 'Script Options:'
+ echo ' --help, --h print this message and ant help'
+ echo ' --noconfig suppress sourcing of /etc/ant.conf,'
+ echo ' $HOME/.ant/ant.conf, and $HOME/.antrc'
+ echo ' configuration files'
+ echo ' --usejikes enable use of jikes by default, unless'
+ echo ' set explicitly in configuration files'
+ echo ' --execdebug print ant exec line generated by this'
+ echo ' launch script'
+ echo ' '
+fi
+# add a second backslash to variables terminated by a backslash under cygwin
+if $cygwin; then
+ case "$ANT_HOME" in
+ *\\ )
+ ANT_HOME="$ANT_HOME\\"
+ ;;
+ esac
+ case "$CYGHOME" in
+ *\\ )
+ CYGHOME="$CYGHOME\\"
+ ;;
+ esac
+ case "$JIKESPATH" in
+ *\\ )
+ JIKESPATH="$JIKESPATH\\"
+ ;;
+ esac
+ case "$LOCALCLASSPATH" in
+ *\\ )
+ LOCALCLASSPATH="$LOCALCLASSPATH\\"
+ ;;
+ esac
+ case "$CLASSPATH" in
+ *\\ )
+ CLASSPATH="$CLASSPATH\\"
+ ;;
+ esac
+fi
+# Execute ant using eval/exec to preserve spaces in paths,
+# java options, and ant args
+ant_sys_opts=
+if [ -n "$CYGHOME" ]; then
+ if [ -n "$JIKESPATH" ]; then
+ ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
+ else
+ ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
+ fi
+else
+ if [ -n "$JIKESPATH" ]; then
+ ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
+ fi
+fi
+ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
+if $ant_exec_debug ; then
+ echo $ant_exec_command
+fi
+eval $ant_exec_command
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.bat
new file mode 100644
index 0000000..6d57c81
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.bat
@@ -0,0 +1,226 @@
+@echo off
+
+REM Licensed to the Apache Software Foundation (ASF) under one or more
+REM contributor license agreements. See the NOTICE file distributed with
+REM this work for additional information regarding copyright ownership.
+REM The ASF licenses this file to You under the Apache License, Version 2.0
+REM (the "License"); you may not use this file except in compliance with
+REM the License. You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+REM This is an inordinately troublesome piece of code, particularly because it
+REM tries to work on both Win9x and WinNT-based systems. If we could abandon '9x
+REM support, things would be much easier, but sadly, it is not yet time.
+REM Be cautious about editing this, and only add WinNT specific stuff in code that
+REM only runs on WinNT.
+
+if "%HOME%"=="" goto homeDrivePathPre
+if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
+
+:homeDrivePathPre
+if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePre
+if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePre
+if exist "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat"
+
+:userProfilePre
+if "%USERPROFILE%"=="" goto alpha
+if "%USERPROFILE%"=="%HOME%" goto alpha
+if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto alpha
+if exist "%USERPROFILE%\antrc_pre.bat" call "%USERPROFILE%\antrc_pre.bat"
+
+:alpha
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+if "%ANT_HOME%"=="" goto setDefaultAntHome
+
+:stripAntHome
+if not _%ANT_HOME:~-1%==_\ goto checkClasspath
+set ANT_HOME=%ANT_HOME:~0,-1%
+goto stripAntHome
+
+:setDefaultAntHome
+rem %~dp0 is expanded pathname of the current script under NT
+set ANT_HOME=%~dp0..
+
+:checkClasspath
+set _USE_CLASSPATH=yes
+rem CLASSPATH must not be used if it is equal to ""
+if "%CLASSPATH%"=="""" set _USE_CLASSPATH=no
+if "%CLASSPATH%"=="" set _USE_CLASSPATH=no
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of arguments (up to the command line limit, anyway).
+set ANT_CMD_LINE_ARGS=%1
+if ""%1""=="""" goto doneStart
+shift
+:setupArgs
+if ""%1""=="""" goto doneStart
+if ""%1""==""-noclasspath"" goto clearclasspath
+set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
+shift
+goto setupArgs
+
+rem here is there is a -noclasspath in the options
+:clearclasspath
+set _USE_CLASSPATH=no
+shift
+goto setupArgs
+
+rem This label provides a place for the argument list loop to break out
+rem and for NT handling to skip to.
+
+:doneStart
+
+if _USE_CLASSPATH==no goto findAntHome
+
+:stripClasspath
+if not _%CLASSPATH:~-1%==_\ goto findAntHome
+set CLASSPATH=%CLASSPATH:~0,-1%
+goto stripClasspath
+
+:findAntHome
+rem find ANT_HOME if it does not exist due to either an invalid value passed
+rem by the user or the %0 problem on Windows 9x
+if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
+
+rem check for ant in Program Files
+if not exist "%ProgramFiles%\ant" goto checkSystemDrive
+set ANT_HOME=%ProgramFiles%\ant
+goto checkJava
+
+:checkSystemDrive
+rem check for ant in root directory of system drive
+if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
+set ANT_HOME=%SystemDrive%\ant
+goto checkJava
+
+:checkCDrive
+rem check for ant in C:\ant for Win9X users
+if not exist C:\ant\lib\ant.jar goto noAntHome
+set ANT_HOME=C:\ant
+goto checkJava
+
+:noAntHome
+echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
+goto end
+
+:checkJava
+set _JAVACMD=%JAVACMD%
+
+if "%JAVA_HOME%" == "" goto noJavaHome
+if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
+goto checkJikes
+
+:noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=java.exe
+
+:checkJikes
+if not "%JIKESPATH%"=="" goto runAntWithJikes
+
+:runAnt
+if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
+:runAntWithClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+rem Check the error code of the Ant build
+if not "%OS%"=="Windows_NT" goto onError
+set ANT_ERROR=%ERRORLEVEL%
+goto end
+
+:runAntNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+rem Check the error code of the Ant build
+if not "%OS%"=="Windows_NT" goto onError
+set ANT_ERROR=%ERRORLEVEL%
+goto end
+
+:runAntWithJikes
+
+if not _%JIKESPATH:~-1%==_\ goto checkJikesAndClasspath
+set JIKESPATH=%JIKESPATH:~0,-1%
+goto runAntWithJikes
+
+:checkJikesAndClasspath
+
+if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
+
+:runAntWithJikesAndClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+rem Check the error code of the Ant build
+if not "%OS%"=="Windows_NT" goto onError
+set ANT_ERROR=%ERRORLEVEL%
+goto end
+
+:runAntWithJikesNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+rem Check the error code of the Ant build
+if not "%OS%"=="Windows_NT" goto onError
+set ANT_ERROR=%ERRORLEVEL%
+goto end
+
+:onError
+rem Windows 9x way of checking the error code. It matches via brute force.
+for %%i in (1 10 100) do set err%%i=
+for %%i in (0 1 2) do if errorlevel %%i00 set err100=%%i
+if %err100%==2 goto onError200
+if %err100%==0 set err100=
+for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%%i0 set err10=%%i
+if "%err100%"=="" if %err10%==0 set err10=
+:onError1
+for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%err10%%%i set err1=%%i
+goto onErrorEnd
+:onError200
+for %%i in (0 1 2 3 4 5) do if errorlevel 2%%i0 set err10=%%i
+if err10==5 for %%i in (0 1 2 3 4 5) do if errorlevel 25%%i set err1=%%i
+if not err10==5 goto onError1
+:onErrorEnd
+set ANT_ERROR=%err100%%err10%%err1%
+for %%i in (1 10 100) do set err%%i=
+
+:end
+rem bug ID 32069: resetting an undefined env variable changes the errorlevel.
+if not "%_JAVACMD%"=="" set _JAVACMD=
+if not "%_ANT_CMD_LINE_ARGS%"=="" set ANT_CMD_LINE_ARGS=
+
+if "%ANT_ERROR%"=="0" goto mainEnd
+
+rem Set the return code if we are not in NT. We can only set
+rem a value of 1, but it's better than nothing.
+if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1
+
+rem Set the ERRORLEVEL if we are running NT.
+if "%OS%"=="Windows_NT" color 00
+
+goto omega
+
+:mainEnd
+
+rem If there were no errors, we run the post script.
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
+if "%HOME%"=="" goto homeDrivePathPost
+if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
+
+:homeDrivePathPost
+if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePost
+if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePost
+if exist "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat"
+
+:userProfilePost
+if "%USERPROFILE%"=="" goto omega
+if "%USERPROFILE%"=="%HOME%" goto omega
+if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto omega
+if exist "%USERPROFILE%\antrc_post.bat" call "%USERPROFILE%\antrc_post.bat"
+
+:omega
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.cmd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.cmd
new file mode 100644
index 0000000..d221a40
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/ant.cmd
@@ -0,0 +1,93 @@
+/*
+ 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.
+
+ Run ant
+*/
+
+'@echo off'
+parse arg mode envarg '::' antarg
+
+if mode\='.' & mode\='..' & mode\='/' then do
+ envarg = mode envarg
+ mode = ''
+end
+
+if antarg = '' then do
+ antarg = envarg
+ envarg = ''
+end
+
+x = setlocal()
+
+env="OS2ENVIRONMENT"
+antenv = _getenv_('antenv')
+if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
+
+if mode = '' then mode = _getenv_('ANT_MODE' '..')
+if mode \= '/' then do
+ runrc = _getenv_('runrc')
+ antrc = _getenv_('antrc' 'antrc.cmd')
+ if mode = '..' then mode = '-r'
+ else mode = ''
+ interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
+end
+
+if _testenv_() = 0 then do
+ say 'Ant environment is not set properly'
+ x = endlocal()
+ exit 16
+end
+
+settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
+
+java = _getenv_('javacmd' 'java')
+opts = value('ANT_OPTS',,env)
+args = value('ANT_ARGS',,env)
+lcp = value('LOCALCLASSPATH',,env)
+cp = value('CLASSPATH',,env)
+if value('ANT_USE_CP',,env) \= '' then do
+ if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
+ lcp = lcp || cp
+ 'SET CLASSPATH='
+end
+if lcp\='' then lcp = '-classpath' lcp
+
+cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
+launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
+if launcher = '' then entry = 'org.apache.tools.ant.Main'
+else entry = 'org.apache.tools.ant.launch.Launcher'
+java opts lcp entry settings args antarg
+
+x = endlocal()
+
+return rc
+
+_testenv_: procedure expose env ANT_HOME JAVA_HOME
+ANT_HOME = value('ANT_HOME',,env)
+if ANT_HOME = '' then return 0
+JAVA_HOME = value('JAVA_HOME',,env)
+if JAVA_HOME = '' then return 0
+cp = translate(value('CLASSPATH',,env))
+if pos(translate(ANT_HOME), cp) = 0 then return 0
+if pos(translate(JAVA_HOME), cp) = 0 then return 0
+return 1
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun
new file mode 100644
index 0000000..a2dbdc0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun
@@ -0,0 +1,24 @@
+#! /bin/sh
+
+# 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.
+
+# Args: DIR command
+cd "$1"
+CMD="$2"
+shift
+shift
+
+exec "$CMD" "$@"
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.bat
new file mode 100644
index 0000000..10d2bbc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.bat
@@ -0,0 +1,50 @@
+@echo off
+
+REM Licensed to the Apache Software Foundation (ASF) under one or more
+REM contributor license agreements. See the NOTICE file distributed with
+REM this work for additional information regarding copyright ownership.
+REM The ASF licenses this file to You under the Apache License, Version 2.0
+REM (the "License"); you may not use this file except in compliance with
+REM the License. You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+if ""%1""=="""" goto runCommand
+
+rem Change drive and directory to %1
+if "%OS%"=="Windows_NT" goto nt_cd
+if "%OS%"=="WINNT" goto nt_cd
+cd ""%1""
+goto end_cd
+:nt_cd
+cd /d ""%1""
+:end_cd
+shift
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of arguments (up to the command line limit, anyway).
+set ANT_RUN_CMD=%1
+if ""%1""=="""" goto runCommand
+shift
+:loop
+if ""%1""=="""" goto runCommand
+set ANT_RUN_CMD=%ANT_RUN_CMD% %1
+shift
+goto loop
+
+:runCommand
+rem echo %ANT_RUN_CMD%
+%ANT_RUN_CMD%
+
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.pl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.pl
new file mode 100644
index 0000000..dbea10f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antRun.pl
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+#
+# 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.
+#
+#######################################################################
+#
+# antRun.pl
+#
+# wrapper script for invoking commands on a platform with Perl installed
+# this is akin to antRun.bat, and antRun the SH script
+#
+# created: 2001-10-18
+# author: Jeff Tulley jtulley@novell.com
+#######################################################################
+#be fussy about variables
+use strict;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info (currently unused)
+my $debug=1;
+
+#######################################################################
+# change drive and directory to "%1"
+my $ANT_RUN_CMD = @ARGV[0];
+
+# assign current run command to "%2"
+chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
+if ($^O eq "NetWare") {
+ # There is a bug in Perl 5 on NetWare, where chdir does not
+ # do anything. On NetWare, the following path-prefixed form should
+ # always work. (afaict)
+ $ANT_RUN_CMD .= "/".@ARGV[1];
+}
+else {
+ $ANT_RUN_CMD = @ARGV[1];
+}
+
+# dispose of the first two arguments, leaving only the command's args.
+shift;
+shift;
+
+# run the command
+my $returnValue = system $ANT_RUN_CMD, @ARGV;
+if ($returnValue eq 0) {
+ exit 0;
+}
+else {
+ # only 0 and 1 are widely recognized as exit values
+ # so change the exit value to 1
+ exit 1;
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antenv.cmd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antenv.cmd
new file mode 100644
index 0000000..170d89f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/antenv.cmd
@@ -0,0 +1,98 @@
+/*
+ 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.
+*/
+
+'@echo off'
+call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
+call SysLoadFuncs
+
+/* Prepare the parameters for later use */
+parse arg argv
+mode = ''
+args = ''
+opts = ''
+cp = ''
+lcp = ''
+
+do i = 1 to words(argv)
+ param = word(argv, i)
+ select
+ when param='-lcp' then mode = 'l'
+ when param='-cp' | param='-classpath' then mode = 'c'
+ when abbrev('-opts', param, 4) then mode = 'o'
+ when abbrev('-args', param, 4) then mode = 'a'
+ otherwise
+ select
+ when mode = 'a' then args = space(args param, 1)
+ when mode = 'c' then cp = space(cp param, 1)
+ when mode = 'l' then lcp = space(lcp param, 1)
+ when mode = 'o' then opts = space(opts param, 1)
+ otherwise
+ say 'Option' param 'ignored'
+ end
+ end
+end
+
+env="OS2ENVIRONMENT"
+antconf = _getenv_('antconf' 'antconf.cmd')
+runrc = _getenv_('runrc')
+interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
+ANT_HOME = value('ANT_HOME',,env)
+JAVA_HOME = value('JAVA_HOME',,env)
+classpath = value('CLASSPATH',,env)
+classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+
+classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
+'SET CLASSPATH=' || classpath
+
+/* Setting classpathes, options and arguments */
+envset = _getenv_('envset')
+if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
+if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
+if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
+if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
+
+exit 0
+
+addpath: procedure
+parse arg path elem
+if elem = '' then do
+ if path\='' & right(path, 1)\=';' then path = path || ';'
+ return path
+end
+if substr(path, length(path)) = ';' then glue = ''
+else glue = ';'
+if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
+return path
+
+prepend: procedure
+parse arg path elem
+if elem = '' then do
+ if path\='' & right(path, 1)\=';' then path = path || ';'
+ return path
+end
+if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
+return path
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/complete-ant-cmd.pl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/complete-ant-cmd.pl
new file mode 100644
index 0000000..b58c26e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/complete-ant-cmd.pl
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+#
+# 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.
+#
+# A script to allow Bash or Z-Shell to complete an Ant command-line.
+#
+# To install for Bash 2.0 or better, add the following to ~/.bashrc:
+#
+# $ complete -C complete-ant-cmd ant build.sh
+#
+# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
+#
+# function ant_complete () {
+# local args_line args
+# read -l args_line
+# set -A args $args_line
+# set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
+# }
+# compctl -K ant_complete ant build.sh
+#
+# @author Mike Williams <mikew@cortexebusiness.com.au>
+
+my $cmdLine = $ENV{'COMP_LINE'};
+my $antCmd = $ARGV[0];
+my $word = $ARGV[1];
+
+my @completions;
+if ($word =~ /^-/) {
+ list( restrict( $word, getArguments() ));
+} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
+ list( getBuildFiles($word) );
+} else {
+ list( restrict( $word, getTargets() ));
+}
+
+exit(0);
+
+sub list {
+ for (@_) {
+ print "$_\n";
+ }
+}
+
+sub restrict {
+ my ($word, @completions) = @_;
+ grep( /^\Q$word\E/, @completions );
+}
+
+sub getArguments {
+ qw(-buildfile -debug -emacs -f -find -help -listener -logfile
+ -logger -projecthelp -quiet -verbose -version);
+}
+
+
+sub getBuildFiles {
+ my ($word) = @_;
+ grep( /\.xml$/, glob( "$word*" ));
+}
+
+sub getTargets {
+
+ # Look for build-file
+ my $buildFile = 'build.xml';
+ if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
+ $buildFile = $2;
+ }
+ return () unless (-f $buildFile);
+
+ # Run "ant -projecthelp" to list targets. Keep a cache of results in a
+ # cache-file.
+ my $cacheFile = $buildFile;
+ $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
+ if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
+ open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
+ open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return();
+ my %targets;
+ while( <HELP> ) {
+ if (/^\s+(\S+)/) {
+ $targets{$1}++;
+ }
+ }
+ my @targets = sort keys %targets;
+ for (@targets) { print CACHE "$_\n"; }
+ return @targets;
+ }
+
+ # Read the target-cache
+ open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
+ my @targets;
+ while (<CACHE>) {
+ chop;
+ s/\r$//; # for Cygwin
+ push( @targets, $_ );
+ }
+ close( CACHE );
+ @targets;
+
+}
+
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/envset.cmd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/envset.cmd
new file mode 100644
index 0000000..3b07419
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/envset.cmd
@@ -0,0 +1,131 @@
+/*
+
+ 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.
+
+SET environment variables
+First optional parameter:
+ ; parameters are considered parts of a path variable, semicolons are
+ appended to each element if not already present
+ -D parameters are properties for Java or Makefile etc., -D will be
+ prepended and the parameters will be separated by a space
+ =D the same as above but equal sign is not required
+ , parameters should be comma separated in the environment variable
+ - parameters should be separated by the next parameter
+ Other values mean that the first parameter is missing and the environment
+ variable will be set to the space separated parameters
+
+Second parameter: name of the environment variable
+
+Next parameters: values
+; implies that the equal sign is considered a part of the parameter and is
+not interpreted
+
+-D requires parameters in the form name=value. If the equal sign is not found,
+the parameters are changed to name=expanded_name
+
+Other options have optional equal sign. If it is found, only the part after
+the equal sign will be oprionally expanded.
+
+If the parameter is the minus sign, the next parameter will not be expanded.
+If the parameter is a single dot, it will be replaced with the value of the
+environment variable as it existed before envset was invoked.
+
+For other parameters the batch looks for the environment variable with the
+same name (in uppercase). If it is found, it forms the expanded_name. If
+the environment variable with such a name does not exist, the expanded_name
+will hold the parameter name without case conversion.
+*/
+
+parse arg mode envar args
+
+equal = 0
+sep = ' '
+
+/* Parse command line parameters */
+select
+ when mode='-' then do
+ sep = envar
+ parse var args envar args
+ end
+ when mode=';' then do
+ sep = ''
+ equal = -1
+ end
+ when mode='-D' then equal = 1
+ when mode='=D' then mode = '-D'
+ when mode=',' then sep = ','
+otherwise
+ args = envar args
+ envar = mode
+ mode = ''
+end
+
+env = 'OS2ENVIRONMENT'
+envar = translate(envar)
+orig = value(envar,,env)
+newval = ''
+expand = 1
+
+/* for each parameter... */
+do i = 1 to words(args)
+ if expand > 0 & word(args, i) = '-' then expand = 0
+ else call addval word(args, i)
+end
+
+/* Optionally enclose path variable by quotes */
+if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
+
+/* Set the new value, 'SET' cannot be used since it does not allow '=' */
+x = value(envar, newval, env)
+exit 0
+
+addval: procedure expose sep equal orig expand newval mode env
+parse arg var
+
+if var = '.' then expvar = orig
+else do
+ if equal >= 0 then do
+ parse var var name '=' val
+ if val = '' then var = name
+ else var = val
+ end
+ if expand = 0 then expvar = var
+ else expvar = value(translate(var),,env)
+ if expvar = '' then expvar = var
+ if equal >= 0 then do
+ if val = '' then do
+ parse var expvar key '=' val
+ if val <> '' then name = key
+ else do
+ if equal > 0 then val = key
+ else name = key
+ end
+ end
+ else val = expvar
+ if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
+ if val = '' then expvar = name
+ else expvar = name || '=' || val
+ end
+ if mode = '-D' then expvar = '-D' || expvar
+ if mode = ';' then do
+ if right(expvar, 1) <> ';' then expvar = expvar || ';'
+ end
+end
+
+if newval = '' then newval = expvar
+else newval = newval || sep || expvar
+expand = 1
+return
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/lcp.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/lcp.bat
new file mode 100644
index 0000000..4bf2e7c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/lcp.bat
@@ -0,0 +1,31 @@
+REM
+REM Licensed to the Apache Software Foundation (ASF) under one or more
+REM contributor license agreements. See the NOTICE file distributed with
+REM this work for additional information regarding copyright ownership.
+REM The ASF licenses this file to You under the Apache License, Version 2.0
+REM (the "License"); you may not use this file except in compliance with
+REM the License. You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
+
+set _CLASSPATHCOMPONENT=%1
+if ""%1""=="""" goto gotAllArgs
+shift
+
+:argCheck
+if ""%1""=="""" goto gotAllArgs
+set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
+shift
+goto argCheck
+
+:gotAllArgs
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%_CLASSPATHCOMPONENT%
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.pl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.pl
new file mode 100644
index 0000000..5f8307a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.pl
@@ -0,0 +1,153 @@
+#!/usr/bin/perl
+#
+# 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.
+#
+#######################################################################
+#
+# runant.pl
+#
+# wrapper script for invoking ant in a platform with Perl installed
+# this may include cgi-bin invocation, which is considered somewhat daft.
+# (slo: that should be a separate file which can be derived from this
+# and returns the XML formatted output)
+#
+# the code is not totally portable due to classpath and directory splitting
+# issues. oops. (NB, use File::Spec::Functions will help and the code is
+# structured for the catfile() call, but because of perl version funnies
+# the code is not included.
+#
+# created: 2000-8-24
+# author: Steve Loughran steve_l@sourceforge.net
+#######################################################################
+#
+# Assumptions:
+#
+# - the "java" executable/script is on the command path
+# - ANT_HOME has been set
+# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
+# - target platform uses "/" as directory separator.
+
+#be fussy about variables
+use strict;
+
+#platform specifics (disabled)
+#use File::Spec::Functions;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info
+my $debug=1;
+
+#######################################################################
+#
+# check to make sure environment is setup
+#
+
+my $HOME = $ENV{ANT_HOME};
+if ($HOME eq "")
+ {
+ die "\n\nANT_HOME *MUST* be set!\n\n";
+ }
+
+my $JAVACMD = $ENV{JAVACMD};
+$JAVACMD = "java" if $JAVACMD eq "";
+
+my $onnetware = 0;
+if ($^O eq "NetWare")
+{
+ $onnetware = 1;
+}
+
+my $oncygwin = ($^O eq "cygwin");
+
+#ISSUE: what java wants to split up classpath varies from platform to platform
+#and perl is not too hot at hinting which box it is on.
+#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
+my $s=":";
+if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
+ ($onnetware == 1))
+ {
+ $s=";";
+ }
+
+#build up standard classpath
+my $localpath = "$HOME/lib/ant-launcher.jar";
+#set JVM options and Ant arguments, if any
+my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
+my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
+
+#jikes
+if($ENV{JIKESPATH} ne "")
+ {
+ push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
+ }
+
+#construct arguments to java
+my @ARGS;
+push @ARGS, @ANT_OPTS;
+
+my $CYGHOME = "";
+
+my $classpath=$ENV{CLASSPATH};
+if ($oncygwin == 1) {
+ $localpath = `cygpath --path --windows $localpath`;
+ chomp ($localpath);
+ if (! $classpath eq "")
+ {
+ $classpath = `cygpath --path --windows "$classpath"`;
+ chomp ($classpath);
+ }
+ $HOME = `cygpath --path --windows $HOME`;
+ chomp ($HOME);
+ $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
+ chomp ($CYGHOME);
+}
+push @ARGS, "-classpath", "$localpath";
+push @ARGS, "-Dant.home=$HOME";
+if ( ! $CYGHOME eq "" )
+{
+ push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
+}
+push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
+push @ARGS, @ARGV;
+if (! $classpath eq "")
+{
+ if ($onnetware == 1)
+ {
+ # make classpath literally $CLASSPATH
+ # this is to avoid pushing us over the 512 character limit
+ # even skip the ; - that is already in $localpath
+ push @ARGS, "-lib", "\$CLASSPATH";
+ }
+ else
+ {
+ push @ARGS, "-lib", "$classpath";
+ }
+}
+print "\n $JAVACMD @ARGS\n\n" if ($debug);
+
+my $returnValue = system $JAVACMD, @ARGS;
+if ($returnValue eq 0)
+ {
+ exit 0;
+ }
+else
+ {
+ # only 0 and 1 are widely recognized as exit values
+ # so change the exit value to 1
+ exit 1;
+ }
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.py b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.py
new file mode 100644
index 0000000..eec549e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runant.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+# 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.
+#
+
+"""
+
+ runant.py
+
+ This script is a translation of the runant.pl written by Steve Loughran.
+ It runs ant with/out arguments, it should be quite portable (thanks to
+ the python os library)
+ This script has been tested with Python2.0/Win2K
+
+ created: 2001-04-11
+ author: Pierre Dittgen pierre.dittgen@criltelecom.com
+
+ Assumptions:
+
+ - the "java" executable/script is on the command path
+"""
+import os, os.path, string, sys
+
+# Change it to 1 to get extra debug information
+debug = 0
+
+#######################################################################
+
+# If ANT_HOME is not set default to script's parent directory
+if os.environ.has_key('ANT_HOME'):
+ ANT_HOME = os.environ['ANT_HOME']
+else:
+ ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
+
+# set ANT_LIB location
+ANT_LIB = os.path.join(ANT_HOME, 'lib')
+
+# set JAVACMD (check variables JAVACMD and JAVA_HOME)
+JAVACMD = None
+if not os.environ.has_key('JAVACMD'):
+ if os.environ.has_key('JAVA_HOME'):
+ if not os.path.exists(os.environ['JAVA_HOME']):
+ print "Warning: JAVA_HOME is not defined correctly."
+ else:
+ JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
+ else:
+ print "Warning: JAVA_HOME not set."
+else:
+ JAVACMD = os.environ['JAVACMD']
+if not JAVACMD:
+ JAVACMD = 'java'
+
+launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
+if not os.path.exists(launcher_jar):
+ print 'Unable to locate ant-launcher.jar. Expected to find it in %s' % \
+ ANT_LIB
+
+# Build up standard classpath (LOCALCLASSPATH)
+LOCALCLASSPATH = launcher_jar
+if os.environ.has_key('LOCALCLASSPATH'):
+ LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
+
+ANT_OPTS = ""
+if os.environ.has_key('ANT_OPTS'):
+ ANT_OPTS = os.environ['ANT_OPTS']
+
+OPTS = ""
+if os.environ.has_key('JIKESPATH'):
+ OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
+
+ANT_ARGS = ""
+if os.environ.has_key('ANT_ARGS'):
+ ANT_ARGS = os.environ['ANT_ARGS']
+
+CLASSPATH = ""
+if os.environ.has_key('CLASSPATH'):
+ CLASSPATH = os.environ['CLASSPATH']
+
+# Builds the commandline
+cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
+ 'org.apache.tools.ant.launch.Launcher %s -lib %s %s') \
+ % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
+ CLASSPATH, string.join(sys.argv[1:], ' '))
+
+if debug:
+ print '\n%s\n\n' % (cmdline)
+sys.stdout.flush()
+
+# Run the biniou!
+os.system(cmdline)
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runrc.cmd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runrc.cmd
new file mode 100644
index 0000000..c68f04d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/bin/runrc.cmd
@@ -0,0 +1,60 @@
+/*
+ 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.
+
+ Run RC file, name is in the first arg, second arg is either PATH
+ ENV or -r or nothing
+*/
+
+parse arg name path rest
+
+if name = '' then do
+ say 'RC file name is missing'
+ exit 1
+end
+
+if rest \= '' then do
+ say 'Too many parameters'
+ exit 1
+end
+
+call runit name path
+exit 0
+
+runit: procedure
+parse arg name path dir
+
+if path \= '' & path \= '-r' then do
+ dir = value(translate(path),,'OS2ENVIRONMENT')
+ if dir = '' then return
+ dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
+end
+
+if dir = '' then dir = directory()
+
+if path = '-r' then do /* recursive call */
+ subdir = filespec('path', dir)
+ if subdir \= '\' then do
+ subdir = left(subdir, length(subdir)-1)
+ call runit name path filespec('drive', dir) || subdir
+ end
+end
+
+/* Look for the file and run it */
+if right(dir, 1) \= '\' then dir = dir || '\'
+rcfile = stream(dir || name, 'c', 'query exists')
+if rcfile \= '' then interpret 'call "' || rcfile || '"'
+
+return
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/changelog.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/changelog.xsl
new file mode 100644
index 0000000..c6aef8f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/changelog.xsl
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+ version='1.0'>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+ <xsl:param name="title"/>
+ <xsl:param name="module"/>
+ <xsl:param name="cvsweb"/>
+
+ <xsl:output method="html" indent="yes" encoding="US-ASCII"
+ doctype-public="-//W3C//DTD HTML 4.01//EN"
+ doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
+
+ <!-- Copy standard document elements. Elements that
+ should be ignored must be filtered by apply-templates
+ tags. -->
+ <xsl:template match="*">
+ <xsl:copy>
+ <xsl:copy-of select="attribute::*[. != '']"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="changelog">
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <style type="text/css">
+ body, p {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ color: #000000;
+ background-color: #ffffff;
+ }
+ tr, td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ background: #eeeee0;
+ }
+ td {
+ padding-left: 20px;
+ }
+ .dateAndAuthor {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ text-align: left;
+ background: #a6caf0;
+ padding-left: 3px;
+ }
+ a {
+ color: #000000;
+ }
+ pre {
+ font-weight: bold;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>
+ <a name="top"><xsl:value-of select="$title"/></a>
+ </h1>
+ <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
+ <hr/>
+ <table border="0" width="100%" cellspacing="1">
+
+ <xsl:apply-templates select=".//entry">
+ <xsl:sort select="date" data-type="text" order="descending"/>
+ <xsl:sort select="time" data-type="text" order="descending"/>
+ </xsl:apply-templates>
+
+ </table>
+
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <tr>
+ <td class="dateAndAuthor">
+ <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre>
+<xsl:apply-templates select="msg"/></pre>
+ <ul>
+ <xsl:apply-templates select="file"/>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="date">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="time">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="author">
+ <i>
+ <a>
+ <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+ <xsl:value-of select="."/></a>
+ </i>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <li>
+ <a>
+ <xsl:choose>
+ <xsl:when test="string-length(prevrevision) = 0 ">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a>
+ </li>
+ </xsl:template>
+
+ <!-- Any elements within a msg are processed,
+ so that we can preserve HTML tags. -->
+ <xsl:template match="msg">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-frames.xsl
new file mode 100644
index 0000000..abaafd6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-frames.xsl
@@ -0,0 +1,299 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+
+<!--
+ 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.
+-->
+
+ <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+ <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+ <xsl:param name="output.dir" select="'.'"/>
+ <xsl:param name="basedir" select="'.'"/>
+
+ <xsl:template match="checkstyle">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-summary.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="overview"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all files -->
+ <xsl:apply-templates select="file[count(error) != 0]"/>
+ </xsl:template>
+
+ <xsl:template name="index.html">
+ <html>
+ <head>
+ <title>CheckStyle Audit</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frame src="allclasses-frame.html" name="fileListFrame"/>
+ <frame src="overview-frame.html" name="fileFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature.
+ If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="pageHeader">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
+ </tr>
+ <tr>
+ <td class="text-align:right">Designed for use with
+ <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and
+ <a href='http://ant.apache.org/'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="overview">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <!-- page header -->
+ <xsl:call-template name="pageHeader"/>
+
+ <!-- Summary part -->
+ <xsl:apply-templates select="." mode="summary"/>
+ <hr size="1" width="100%" align="left"/>
+
+ <!-- File list part -->
+ <xsl:apply-templates select="." mode="filelist"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .oddrow td {
+ background: #efefef;
+ }
+ .evenrow td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ </xsl:template>
+
+ <!--
+ Creates an all-classes.html file that contains a link to all files.
+ -->
+ <xsl:template match="checkstyle" mode="all.classes">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <h2>Files</h2>
+ <p>
+ <table width="100%">
+ <!-- For each file create its part -->
+ <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes">
+ <xsl:sort select="substring-after(@name, $basedir)"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="filelist">
+ <h3>Files</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Name</th>
+ <th>Errors</th>
+ </tr>
+ <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+ <xsl:sort select="count(error)" order="descending" data-type="number"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="file" mode="filelist">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td nowrap="nowrap">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ <td><xsl:value-of select="count(error)"/></td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="file" mode="all.classes">
+ <tr>
+ <td nowrap="nowrap">
+ <a target="fileFrame">
+ <xsl:attribute name="href">
+ <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <!--
+ transform string like a/b/c to ../../../
+ @param path the path to transform into a descending directory path
+ -->
+ <xsl:template name="path">
+ <xsl:param name="path"/>
+
+ <!-- Convert a windows path '\' to a unix path '/' for further processing. -->
+ <xsl:variable name="path2" select="translate($path,'\','/')"/>
+
+
+ <xsl:if test="contains($path2,'/')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path2,'/')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path2,'/')) and not($path2 = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css">
+ <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
+ </link>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Error Description</th>
+ <th>Line:Column</th>
+ </tr>
+ <xsl:for-each select="error">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+ <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+ </redirect:write>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="summary">
+ <h3>Summary</h3>
+ <xsl:variable name="fileCount" select="count(file)"/>
+ <xsl:variable name="errorCount" select="count(file/error)"/>
+ <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Total Files</th>
+ <th>Files With Errors</th>
+ <th>Errors</th>
+ </tr>
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><xsl:value-of select="$fileCount"/></td>
+ <td><xsl:value-of select="$fileErrorCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="alternated-row">
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+ <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+ </xsl:attribute>
+ </xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-text.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-text.xsl
new file mode 100644
index 0000000..7359e41
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-text.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+ <xsl:strip-space elements="checkstyle"/>
+ <xsl:preserve-space elements="file"/>
+ <xsl:output method="text"/>
+ <xsl:template match="checkstyle/file/error">
+ <xsl:value-of select="../@name"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@line"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@column"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@message"/>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-xdoc.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-xdoc.xsl
new file mode 100644
index 0000000..5fc6eab
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/checkstyle/checkstyle-xdoc.xsl
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+
+<!--
+ 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.
+-->
+
+ <xsl:output method="xml" indent="yes"/>
+ <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+ <xsl:param name="output.dir" select="'.'"/>
+ <xsl:param name="basedir" select="'.'"/>
+
+ <xsl:template match="checkstyle">
+ <document>
+ <properties>
+ <title>Checkstyle Audit</title>
+ </properties>
+
+ <body>
+ <xsl:apply-templates select="." mode="summary"/>
+ <!-- File list part -->
+ <xsl:apply-templates select="." mode="filelist"/>
+ <xsl:apply-templates select="file[count(error) != 0]"/>
+ </body>
+ </document>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="filelist">
+ <section name="Files">
+ <table>
+ <tr>
+ <th>Name</th>
+ <th>Errors</th>
+ </tr>
+ <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+ <xsl:sort select="count(error)" order="descending" data-type="number"/>
+ </xsl:apply-templates>
+ </table>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="file" mode="filelist">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td nowrap="nowrap">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ <td><xsl:value-of select="count(error)"/></td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml">
+ <document>
+ <properties>
+ <title>Checkstyle Audit</title>
+ </properties>
+
+ <body>
+ <section name="Details for {substring-after(@name, $basedir)}">
+ <table>
+ <tr>
+ <th>Error Description</th>
+ <th>Line</th>
+ </tr>
+ <xsl:for-each select="error">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+ <td><xsl:value-of select="@line"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </section>
+ </body>
+ </document>
+ </redirect:write>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="summary">
+ <section name="Summary">
+ <xsl:variable name="fileCount" select="count(file)"/>
+ <xsl:variable name="errorCount" select="count(file/error)"/>
+ <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+ <table>
+ <tr>
+ <th>Files</th>
+ <th>Files With Errors</th>
+ <th>Errors</th>
+ </tr>
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><xsl:value-of select="$fileCount"/></td>
+ <td><xsl:value-of select="$fileErrorCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ </tr>
+ </table>
+ </section>
+ </xsl:template>
+
+ <xsl:template name="alternated-row">
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+ <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+ </xsl:attribute>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/coverage-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/coverage-frames.xsl
new file mode 100644
index 0000000..a55a52a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/coverage-frames.xsl
@@ -0,0 +1,489 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ 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.
+-->
+
+<!--
+
+ Sample stylesheet to be used with JProbe 3.0 XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ It is best used with JProbe Coverage Ant task that gives you the benefit
+ of a reference classpath so that you have the list of classes/methods
+ that are not used at all in a given classpath.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+
+-->
+
+<!-- default output directory is current directory -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- ======================================================================
+ Root element
+ ======================================================================= -->
+<xsl:template match="/snapshot">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:apply-templates select="./package" mode="write"/>
+</xsl:template>
+
+<!-- =======================================================================
+ Frameset definition. Entry point for the report.
+ 3 frames: packageListFrame, classListFrame, classFrame
+ ======================================================================= -->
+<xsl:template name="index.html">
+<html>
+ <head><title>Coverage Results.</title></head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+</html>
+</xsl:template>
+
+<!-- =======================================================================
+ Stylesheet CSS used
+ ======================================================================= -->
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+</xsl:template>
+
+<!-- =======================================================================
+ List of all classes in all packages
+ This will be the first page in the classListFrame
+ ======================================================================= -->
+<xsl:template match="snapshot" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="package/class">
+ <xsl:sort select="@name"/>
+ <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+ <xsl:variable name="link">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:variable>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<!-- list of all packages -->
+<xsl:template match="snapshot" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:for-each select="package">
+ <xsl:sort select="@name" order="ascending"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<!-- overview of statistics in packages -->
+<xsl:template match="snapshot" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <!--th width="10%" nowrap="nowrap">Date</th>
+ <th width="10%" nowrap="nowrap">Elapsed time</th-->
+ <th width="10%" nowrap="nowrap">Reported Classes</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+ <tr class="a">
+ <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
+ <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
+ <td><xsl:value-of select="count(package/class)"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ To ensure accurate test runs on Java applications, developers need to know how much of
+ the code has been tested, and where to find any untested code. Coverage helps you
+ locate untested code, and measure precisely how much code has been exercised.
+ The result is a higher quality application in a shorter period of time.
+ <p/>
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="package[1]" mode="stats.header"/>
+ <!-- display packages and sort them via their coverage rate -->
+ <xsl:for-each select="package">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+<!--
+ detailed info for a package. It will output the list of classes
+, the summary page, and the info for each class
+-->
+<xsl:template match="package" mode="write">
+ <xsl:variable name="package.dir">
+ <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
+ <xsl:if test="@name = ''">.</xsl:if>
+ </xsl:variable>
+
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:apply-templates select="." mode="classes.list"/>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:apply-templates select="." mode="package.summary"/>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <xsl:for-each select="class">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+ <html>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <H2>Classes</H2>
+ <TABLE WIDTH="100%">
+ <xsl:for-each select="class">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </TABLE>
+ </BODY>
+ </html>
+</xsl:template>
+
+<!-- summary of a package -->
+<xsl:template match="package" mode="package.summary">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <!-- when loading this package, it will open the classes into the frame -->
+ <BODY onload="open('package-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="@name"/></h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="." mode="stats"/>
+ </table>
+
+ <xsl:if test="count(class) &gt; 0">
+ <H3>Classes</H3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="class" mode="stats">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:if>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+<!-- details of a class -->
+<xsl:template match="class" mode="class.details">
+ <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+ <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+ <!-- class summary -->
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="." mode="stats"/>
+ </table>
+
+ <!-- details of methods -->
+ <H3>Methods</H3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="method[1]" mode="stats.header"/>
+ <xsl:apply-templates select="method" mode="stats">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ </xsl:apply-templates>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+
+</xsl:template>
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Coverage</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+
+<xsl:template name="table.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+
+<xsl:template match="method" mode="stats.header">
+ <tr>
+ <th width="90%">Name</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+<xsl:template match="method" mode="stats">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@name"/></td>
+ <td>
+ <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
+ </td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="package|class" mode="stats.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+<xsl:template match="package|class" mode="stats">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@name"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+</xsl:template>
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend-frames.xsl
new file mode 100644
index 0000000..ccc9dcc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend-frames.xsl
@@ -0,0 +1,487 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+ 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.
+
+-->
+<!--
+
+ Sample stylesheet to be used with JDepend XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a>
+
+ -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<xsl:template match="JDepend">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-packages.html">
+ <xsl:apply-templates select="." mode="packages.details"/>
+ </redirect:write>
+
+ <!-- create the overview-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/overview-cycles.html">
+ <xsl:apply-templates select="." mode="cycles.details"/>
+ </redirect:write>
+
+ <!-- create the overview-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/overview-explanations.html">
+ <xsl:apply-templates select="." mode="explanations"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/all-packages.html">
+ <xsl:apply-templates select="Packages" mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/all-cycles.html">
+ <xsl:apply-templates select="Cycles" mode="all.cycles"/>
+ </redirect:write>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title>JDepend Analysis</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="all-packages.html" name="packageListFrame"/>
+ <frame src="all-cycles.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ margin-left:2em;
+ margin-right:2em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="overview.packages">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Summary</h2><td>
+ </td><td align="right">
+ [summary]
+ [<a href="overview-packages.html">packages</a>]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ <table width="100%" class="details">
+ <tr>
+ <th>Package</th>
+ <th>Total Classes</th>
+ <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
+ <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
+ <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
+ <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
+ <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
+ <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
+ <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
+
+ </tr>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <tr>
+ <td align="left">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+ <td align="right"><xsl:value-of select="Stats/A"/></td>
+ <td align="right"><xsl:value-of select="Stats/I"/></td>
+ <td align="right"><xsl:value-of select="Stats/D"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) &gt; 0">
+ <tr>
+ <td align="left">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="packages.details">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Packages</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [packages]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+ <xsl:value-of select="@name"/></a></h3>
+
+ <table width="100%"><tr>
+ <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+ <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+ <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+ <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+ <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+ </tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Abstract Classes</th>
+ <th>Concrete Classes</th>
+ <th>Used by Packages</th>
+ <th>Uses Packages</th>
+ </tr>
+ <tr>
+ <td valign="top" width="25%">
+ <xsl:if test="count(AbstractClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="AbstractClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(ConcreteClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="ConcreteClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(UsedBy/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="UsedBy/Package">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(DependsUpon/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="DependsUpon/Package">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+ <!-- this is often a long listing; provide a lower navigation table also -->
+ <table width="100%"><tr align="left"><td></td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [packages]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="cycles.details">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Cycles</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [cycles]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ <!--<table width="100%"><tr><td>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table> -->
+
+ <xsl:if test="count(Cycles/Package) = 0">
+ <p>There are no cyclic dependancies.</p>
+ </xsl:if>
+ <xsl:for-each select="Cycles/Package">
+ <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
+ <xsl:for-each select="Package">
+ <xsl:value-of select="."/><br/>
+ </xsl:for-each></p>
+ </xsl:for-each>
+ <!-- this is often a long listing; provide a lower navigation table also -->
+ <table width="100%"><tr align="left"><td></td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [cycles]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="explanations">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+
+ <table width="100%"><tr align="left"><h2>Explanations</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [<a href="overview-cycles.html">cycles</a>]
+ [explanations]
+ </td></tr></table>
+
+ <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+ <h3><a name="EXnumber">Number of Classes</a></h3>
+ <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+ <h3><a name="EXafferent">Afferent Couplings</a></h3>
+ <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+ <h3><a name="EXefferent">Efferent Couplings</a></h3>
+ <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+ <h3><a name="EXabstractness">Abstractness</a></h3>
+ <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+ <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+ <h3><a name="EXinstability">Instability</a></h3>
+ <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+ <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+ <h3><a name="EXdistance">Distance</a></h3>
+ <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+ <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+ <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+Creates an html file that contains a link to all package links in overview-packages.html.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages" mode="all.packages">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+ [<a href="overview-summary.html" target="classFrame">summary</a>]
+ [<a href="overview-packages.html" target="classFrame">packages</a>]
+ [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+ [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+ </td></tr></table>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="Package[count(error) &gt; 0]" mode="all.packages.nolink">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="overview-packages.html#PK{@name}" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+I do not know JDepend enough to know if every error results in a non-analyzed package,
+but that is how I am presenting it to the viewer. This may need to change.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
+ <tr>
+ <td nowrap="nowrap">
+ Not Analyzed: <xsl:value-of select="@name"/>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+Creates an html file that contains a link to all package links in overview-cycles.html.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Cycles" mode="all.cycles">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+ [<a href="overview-summary.html" target="classFrame">summary</a>]
+ [<a href="overview-packages.html" target="classFrame">packages</a>]
+ [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+ [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+ </td></tr></table>
+ <h2>Cycles</h2>
+ <table width="100%">
+ <xsl:apply-templates select="Package" mode="all.cycles">
+ <xsl:sort select="@Name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>JDepend Analysis</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend.xsl
new file mode 100644
index 0000000..f813297
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/jdepend.xsl
@@ -0,0 +1,276 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+
+<xsl:template match="JDepend">
+ <html>
+ <head>
+ <title>JDepend Analysis</title>
+
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ margin-left:2em;
+ margin-right:2em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+
+
+ </head>
+ <body>
+ <!--h1>JDepend Report</h1>
+ <ul>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:sort select="@name"/>
+ <li><xsl:value-of select="@name"/></li>
+ </xsl:for-each>
+ </ul-->
+
+ <h1><a name="top">JDepend Analysis</a></h1>
+ <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
+ <hr size="2" />
+
+ <table width="100%"><tr><td>
+ <a name="NVsummary"><h2>Summary</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Package</th>
+ <th>Total Classes</th>
+ <th><a href="#EXnumber">Abstract Classes</a></th>
+ <th><a href="#EXnumber">Concrete Classes</a></th>
+ <th><a href="#EXafferent">Afferent Couplings</a></th>
+ <th><a href="#EXefferent">Efferent Couplings</a></th>
+ <th><a href="#EXabstractness">Abstractness</a></th>
+ <th><a href="#EXinstability">Instability</a></th>
+ <th><a href="#EXdistance">Distance</a></th>
+
+ </tr>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <tr>
+ <td align="left">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+ <td align="right"><xsl:value-of select="Stats/A"/></td>
+ <td align="right"><xsl:value-of select="Stats/I"/></td>
+ <td align="right"><xsl:value-of select="Stats/D"/></td>
+
+
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) &gt; 0">
+ <tr>
+ <td align="left">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ </table>
+
+ <table width="100%"><tr><td>
+ <a name="NVpackages"><h2>Packages</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+ <xsl:value-of select="@name"/></a></h3>
+
+ <table width="100%"><tr>
+ <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+ <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+ <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+ <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+ <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+ </tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Abstract Classes</th>
+ <th>Concrete Classes</th>
+ <th>Used by Packages</th>
+ <th>Uses Packages</th>
+ </tr>
+ <tr>
+ <td valign="top" width="25%">
+ <xsl:if test="count(AbstractClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="AbstractClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(ConcreteClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="ConcreteClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(UsedBy/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="UsedBy/Package">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(DependsUpon/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="DependsUpon/Package">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+
+ <table width="100%"><tr><td>
+ <a name="NVcycles"><h2>Cycles</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <xsl:if test="count(Cycles/Package) = 0">
+ <p>There are no cyclic dependancies.</p>
+ </xsl:if>
+ <xsl:for-each select="Cycles/Package">
+ <h3><xsl:value-of select="@Name"/></h3><p>
+ <xsl:for-each select="Package">
+ <xsl:value-of select="."/><br/>
+ </xsl:for-each></p>
+ </xsl:for-each>
+
+ <table width="100%"><tr><td>
+ <a name="NVexplanations"><h2>Explanations</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+ <h3><a name="EXnumber">Number of Classes</a></h3>
+ <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+ <h3><a name="EXafferent">Afferent Couplings</a></h3>
+ <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+ <h3><a name="EXefferent">Efferent Couplings</a></h3>
+ <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+ <h3><a name="EXabstractness">Abstractness</a></h3>
+ <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+ <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+ <h3><a name="EXinstability">Instability</a></h3>
+ <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+ <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+ <h3><a name="EXdistance">Distance</a></h3>
+ <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+ <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+ <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+ </body>
+ </html>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames-xalan1.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames-xalan1.xsl
new file mode 100644
index 0000000..8cef4ca
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames-xalan1.xsl
@@ -0,0 +1,719 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+ 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.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ <xsl:if test="string-length(./system-out)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt">
+ <xsl:value-of select="./system-out" />
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt">
+ <xsl:value-of select="./system-err" />
+ </redirect:write>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title>Unit Test Results.</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+}
+table tr td, table tr th {
+ font-size: 68%;
+}
+table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+}
+table.details tr td{
+ background:#eeeee0;
+}
+
+p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+ font-weight:bold; color:red;
+}
+.Failure {
+ font-weight:bold; color:purple;
+}
+.Properties {
+ text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every testsuite class.
+ It prints a summary of the testsuite and detailed information about
+ testcase methods.
+ ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+ <html>
+ <head>
+ <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:apply-templates select="properties"/>
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document;
+ doc.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style type=\"text/css\">");
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="." mode="print.test"/>
+ </table>
+
+ <h2>Tests</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties &#187;
+ </a>
+ </div>
+ <xsl:if test="string-length(./system-out)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+ System.out &#187;
+ </a>
+ </div>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+ System.err &#187;
+ </a>
+ </div>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every package.
+ It prints the name of all classes that belongs to this package.
+ @param name the package name to print classes.
+ ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <h2><a href="package-summary.html" target="classFrame">
+ <xsl:value-of select="$name"/>
+ <xsl:if test="$name = ''">&lt;none&gt;</xsl:if>
+ </a></h2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+ <html>
+ <head>
+ <title>All Unit Test Classes</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+ <html>
+ <head>
+ <title>All Unit Test Packages</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+ <xsl:sort select="@package"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+ <html>
+ <head>
+ <title>Unit Test Results: Summary</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+ <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+ </td>
+ </tr>
+ </table>
+
+ <h2>Packages</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <!-- get the node set containing all testsuites that have the same package -->
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <tr valign="top">
+ <!-- display a failure if there is any failure/error in the package -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
+ <xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+ </a></td>
+ <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+ <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+ <xsl:if test="count($insamepackage) &gt; 0">
+ <h2>Classes</h2>
+ <p>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="$insamepackage" mode="print.test">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>Unit Test Results</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ <th nowrap="nowrap">Time Stamp</th>
+ <th>Host</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+ <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@tests"/></td>
+ <td><xsl:apply-templates select="@errors"/></td>
+ <td><xsl:apply-templates select="@failures"/></td>
+ <td><xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:apply-templates select="@timestamp"/></td>
+ <td><xsl:apply-templates select="@hostname"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="error">Error</xsl:when>
+ <xsl:when test="failure">Failure</xsl:when>
+ <xsl:otherwise>TableRowColor</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+ so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <br/><br/>
+ <code>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the latter is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:param name="br"><br/></xsl:param>
+ <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames.xsl
new file mode 100644
index 0000000..9ea322a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-frames.xsl
@@ -0,0 +1,877 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="http://xml.apache.org/xalan/redirect"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+ 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.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+<xsl:param name="TITLE">Unit Test Results.</xsl:param>
+
+
+<xsl:template match="testsuites">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- create the all-tests.html at the root -->
+ <redirect:write file="{$output.dir}/all-tests.html">
+ <xsl:apply-templates select="." mode="all.tests"/>
+ </redirect:write>
+
+ <!-- create the alltests-fails.html at the root -->
+ <redirect:write file="{$output.dir}/alltests-fails.html">
+ <xsl:apply-templates select="." mode="all.tests">
+ <xsl:with-param name="type" select="'fails'"/>
+ </xsl:apply-templates>
+ </redirect:write>
+
+ <!-- create the alltests-errors.html at the root -->
+ <redirect:write file="{$output.dir}/alltests-errors.html">
+ <xsl:apply-templates select="." mode="all.tests">
+ <xsl:with-param name="type" select="'errors'"/>
+ </xsl:apply-templates>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ <xsl:if test="string-length(./system-out)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
+ <xsl:value-of disable-output-escaping="yes" select="./system-out"/>
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
+ <xsl:value-of disable-output-escaping="yes" select="./system-err"/>
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="@failures != 0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-fails.html">
+ <xsl:apply-templates select="." mode="class.details">
+ <xsl:with-param name="type" select="'fails'"/>
+ </xsl:apply-templates>
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="@errors != 0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-errors.html">
+ <xsl:apply-templates select="." mode="class.details">
+ <xsl:with-param name="type" select="'errors'"/>
+ </xsl:apply-templates>
+ </redirect:write>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title><xsl:value-of select="$TITLE"/></title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+}
+table tr td, table tr th {
+ font-size: 68%;
+}
+table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+}
+table.details tr td{
+ background:#eeeee0;
+}
+
+p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+ font-weight:bold; color:red;
+}
+.Failure {
+ font-weight:bold; color:purple;
+}
+.Properties {
+ text-align:right;
+}
+</xsl:template>
+
+<!-- Create list of all/failed/errored tests -->
+<xsl:template match="testsuites" mode="all.tests">
+ <xsl:param name="type" select="'all'"/>
+ <html>
+ <xsl:variable name="title">
+ <xsl:choose>
+ <xsl:when test="$type = 'fails'">
+ <xsl:text>All Failures</xsl:text>
+ </xsl:when>
+ <xsl:when test="$type = 'errors'">
+ <xsl:text>All Errors</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>All Tests</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <head>
+ <title>Unit Test Results: <xsl:value-of select="$title"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h2><xsl:value-of select="$title"/></h2>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header">
+ <xsl:with-param name="show.class" select="'yes'"/>
+ </xsl:call-template>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4">
+ <xsl:apply-templates select="./error"/>
+ </td>
+ </tr>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$type = 'fails'">
+ <xsl:apply-templates select=".//testcase[failure]" mode="print.test">
+ <xsl:with-param name="show.class" select="'yes'"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$type = 'errors'">
+ <xsl:apply-templates select=".//testcase[error]" mode="print.test">
+ <xsl:with-param name="show.class" select="'yes'"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".//testcase" mode="print.test">
+ <xsl:with-param name="show.class" select="'yes'"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every testsuite class.
+ It prints a summary of the testsuite and detailed information about
+ testcase methods.
+ ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+ <xsl:param name="type" select="'all'"/>
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+ <html>
+ <head>
+ <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:apply-templates select="properties"/>
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document;
+ doc.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style type=\"text/css\">");
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="." mode="print.test"/>
+ </table>
+
+ <xsl:choose>
+ <xsl:when test="$type = 'fails'">
+ <h2>Failures</h2>
+ </xsl:when>
+ <xsl:when test="$type = 'errors'">
+ <h2>Errors</h2>
+ </xsl:when>
+ <xsl:otherwise>
+ <h2>Tests</h2>
+ </xsl:otherwise>
+ </xsl:choose>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$type = 'fails'">
+ <xsl:apply-templates select="./testcase[failure]" mode="print.test"/>
+ </xsl:when>
+ <xsl:when test="$type = 'errors'">
+ <xsl:apply-templates select="./testcase[error]" mode="print.test"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties &#187;
+ </a>
+ </div>
+ <xsl:if test="string-length(./system-out)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+ System.out &#187;
+ </a>
+ </div>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+ System.err &#187;
+ </a>
+ </div>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every package.
+ It prints the name of all classes that belongs to this package.
+ @param name the package name to print classes.
+ ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <h2><a href="package-summary.html" target="classFrame">
+ <xsl:value-of select="$name"/>
+ <xsl:if test="$name = ''">&lt;none&gt;</xsl:if>
+ </a></h2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+ <html>
+ <head>
+ <title>All Unit Test Classes</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+ <html>
+ <head>
+ <title>All Unit Test Packages</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+ <xsl:sort select="@package"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+ <html>
+ <head>
+ <title>Unit Test Results: Summary</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+ <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a title="Display all tests" href="all-tests.html"><xsl:value-of select="$testCount"/></a></td>
+ <td><a title="Display all failures" href="alltests-fails.html"><xsl:value-of select="$failureCount"/></a></td>
+ <td><a title="Display all errors" href="alltests-errors.html"><xsl:value-of select="$errorCount"/></a></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+ </td>
+ </tr>
+ </table>
+
+ <h2>Packages</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <!-- get the node set containing all testsuites that have the same package -->
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <tr valign="top">
+ <!-- display a failure if there is any failure/error in the package -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
+ <xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+ </a></td>
+ <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+ <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+ <xsl:if test="count($insamepackage) &gt; 0">
+ <h2>Classes</h2>
+ <p>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="$insamepackage" mode="print.test">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1><xsl:value-of select="$TITLE"/></h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ <th nowrap="nowrap">Time Stamp</th>
+ <th>Host</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <xsl:param name="show.class" select="''"/>
+ <tr valign="top">
+ <xsl:if test="boolean($show.class)">
+ <th>Class</th>
+ </xsl:if>
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+ <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:apply-templates select="@tests"/></a></td>
+ <td>
+ <xsl:choose>
+ <xsl:when test="@errors != 0">
+ <a title="Display only errors" href="{@id}_{@name}-errors.html"><xsl:apply-templates select="@errors"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="@errors"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td>
+ <xsl:choose>
+ <xsl:when test="@failures != 0">
+ <a title="Display only failures" href="{@id}_{@name}-fails.html"><xsl:apply-templates select="@failures"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="@failures"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td><xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:apply-templates select="@timestamp"/></td>
+ <td><xsl:apply-templates select="@hostname"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <xsl:param name="show.class" select="''"/>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="error">Error</xsl:when>
+ <xsl:when test="failure">Failure</xsl:when>
+ <xsl:otherwise>TableRowColor</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:variable name="class.href">
+ <xsl:value-of select="concat(translate(../@package,'.','/'), '/', ../@id, '_', ../@name, '.html')"/>
+ </xsl:variable>
+ <xsl:if test="boolean($show.class)">
+ <td><a href="{$class.href}"><xsl:value-of select="../@name"/></a></td>
+ </xsl:if>
+ <td>
+ <a name="{@name}"/>
+ <xsl:choose>
+ <xsl:when test="boolean($show.class)">
+ <a href="{concat($class.href, '#', @name)}"><xsl:value-of select="@name"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+ so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <br/><br/>
+ <code>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the latter is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","&lt;br/>")'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-noframes.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-noframes.xsl
new file mode 100644
index 0000000..f0ab964
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/junit-noframes.xsl
@@ -0,0 +1,467 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"
+ doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ 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.
+ -->
+
+<xsl:param name="TITLE">Unit Test Results.</xsl:param>
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+
+-->
+<xsl:template match="testsuites">
+ <html>
+ <head>
+ <title><xsl:value-of select="$TITLE"/></title>
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, table tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:for-each select="./testsuite">
+ <xsl:apply-templates select="properties"/>
+ </xsl:for-each>
+
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document;
+ doc.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style>")
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <a name="top"></a>
+ <xsl:call-template name="pageHeader"/>
+
+ <!-- Summary part -->
+ <xsl:call-template name="summary"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- Package List part -->
+ <xsl:call-template name="packagelist"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each package create its part -->
+ <xsl:call-template name="packages"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each class create the part -->
+ <xsl:call-template name="classes"/>
+
+ </body>
+ </html>
+</xsl:template>
+
+
+
+ <!-- ================================================================== -->
+ <!-- Write a list of all packages with an hyperlink to the anchor of -->
+ <!-- of the package name. -->
+ <!-- ================================================================== -->
+ <xsl:template name="packagelist">
+ <h2>Packages</h2>
+ Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <!-- list all packages recursively -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+ <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+ <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+ <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+
+ <!-- write a summary for the package -->
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+ <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>
+ <td><xsl:value-of select="$testsuites-in-package/@hostname"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:template>
+
+
+ <!-- ================================================================== -->
+ <!-- Write a package level report -->
+ <!-- It creates a table with values from the document: -->
+ <!-- Name | Tests | Errors | Failures | Time -->
+ <!-- ================================================================== -->
+ <xsl:template name="packages">
+ <!-- create an anchor to this package name -->
+ <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <a name="{@package}"></a>
+ <h3>Package <xsl:value-of select="@package"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+
+ <!-- match the testsuites of this package -->
+ <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+ </table>
+ <a href="#top">Back to top</a>
+ <p/>
+ <p/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="classes">
+ <xsl:for-each select="testsuite">
+ <xsl:sort select="@name"/>
+ <!-- create an anchor to this class name -->
+ <a name="{@name}"></a>
+ <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties &#187;
+ </a>
+ </div>
+ <p/>
+
+ <a href="#top">Back to top</a>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="summary">
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+ <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1><xsl:value-of select="$TITLE"/></h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://ant.apache.org/ant'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ <th nowrap="nowrap">Time Stamp</th>
+ <th>Host</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+ <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <!-- print testsuite information -->
+ <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:value-of select="@tests"/></td>
+ <td><xsl:value-of select="@errors"/></td>
+ <td><xsl:value-of select="@failures"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:apply-templates select="@timestamp"/></td>
+ <td><xsl:apply-templates select="@hostname"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="failure | error">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <code>
+ <br/><br/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the later is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","&lt;br/>")'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/log.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/log.xsl
new file mode 100644
index 0000000..5040993
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/log.xsl
@@ -0,0 +1,203 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+ 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.
+
+-->
+
+<!--
+
+ The purpose have this XSL is to provide a nice way to look at the output
+ from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
+
+ @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
+
+-->
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+<xsl:template match="/">
+<html>
+ <head>
+ <style type="text/css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin: 0;
+ font:normal 100% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ table.status {
+ font:bold 80% arial,helvetica,sanserif;
+ background-color:#525D76;
+ color:#ffffff;
+ }
+ table.log tr td, tr th {
+ font-size: 80%;
+ }
+ .error {
+ color:red;
+ }
+ .warn {
+ color:brown;
+ }
+ .info {
+ color:gray;
+ }
+ .debug{
+ color:gray;
+ }
+ .failed {
+ font-size:80%;
+ background-color: red;
+ color:#FFFFFF;
+ font-weight: bold
+ }
+ .complete {
+ font-size:80%;
+ background-color: #525D76;
+ color:#FFFFFF;
+ font-weight: bold
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ border: none
+ }
+ h3 {
+ font:bold 80% arial,helvetica,sanserif;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td valign="top" class="bannercell">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right;vertical-align:bottom">
+ <a href="http://ant.apache.org/">Apache Ant</a>
+ </td>
+ </tr>
+ </table>
+
+ <table border="0" width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ </table>
+
+ <xsl:apply-templates select="build"/>
+
+ </body>
+</html>
+</xsl:template>
+
+<xsl:template match="build">
+ <!-- build status -->
+ <table width="100%">
+ <xsl:attribute name="class">
+ <xsl:if test="@error">failed</xsl:if>
+ <xsl:if test="not(@error)">complete</xsl:if>
+ </xsl:attribute>
+ <tr>
+ <xsl:if test="@error">
+ <td nowrap="yes">Build Failed</td>
+ </xsl:if>
+ <xsl:if test="not(@error)">
+ <td nowrap="yes">Build Complete</td>
+ </xsl:if>
+ <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <xsl:if test="@error">
+ <tt><xsl:value-of select="@error"/></tt><br/>
+ <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
+ </xsl:if>
+ </td>
+ </tr>
+ </table>
+ <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
+ <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr>
+ <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr>
+ <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr>
+ <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr>
+ </table>
+ <!-- build information -->
+ <h3>Build events</h3>
+ <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
+ <tr>
+ <th nowrap="yes" align="left" width="1%">target</th>
+ <th nowrap="yes" align="left" width="1%">task</th>
+ <th nowrap="yes" align="left">message</th>
+ </tr>
+ <xsl:apply-templates select=".//message[@priority != 'debug']"/>
+ </table>
+ <p>
+ <!-- stacktrace -->
+ <xsl:if test="stacktrace">
+ <a name="stacktrace"/>
+ <h3>Error details</h3>
+ <table width="100%">
+ <tr><td>
+ <pre><xsl:value-of select="stacktrace"/></pre>
+ </td></tr>
+ </table>
+ </xsl:if>
+ </p>
+</xsl:template>
+
+<!-- report every message but those with debug priority -->
+<xsl:template match="message[@priority!='debug']">
+ <tr valign="top">
+ <!-- alternated row style -->
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+ </xsl:attribute>
+ <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
+ <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
+ <td class="{@priority}" nowrap="yes">
+ <xsl:value-of select="text()"/>
+ </td>
+ </tr>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/maudit-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/maudit-frames.xsl
new file mode 100644
index 0000000..257c0c8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/maudit-frames.xsl
@@ -0,0 +1,503 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ 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.
+-->
+<!--
+
+ Stylesheet to transform an XML file generated by the Ant MAudit task into
+ a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
+
+ It use the Xalan redirect extension to write to multiple output files.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+-->
+
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="classes">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/classes/class[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<HTML>
+ <HEAD><TITLE>Audit Results.</TITLE></HEAD>
+ <FRAMESET cols="20%,80%">
+ <FRAMESET rows="30%,70%">
+ <FRAME src="overview-frame.html" name="packageListFrame"/>
+ <FRAME src="allclasses-frame.html" name="classListFrame"/>
+ </FRAMESET>
+ <FRAME src="overview-summary.html" name="classFrame"/>
+ </FRAMESET>
+ <noframes>
+ <H2>Frame Alert</H2>
+ <P>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </P>
+ </noframes>
+</HTML>
+</xsl:template>
+
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+</xsl:template>
+
+
+<!-- print the violations of the class -->
+<xsl:template match="class" mode="class.details">
+ <xsl:variable name="package.name" select="@package"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+ <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:apply-templates select="." mode="print.audit"/>
+ </table>
+
+ <H3>Violations</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="violation.audit.header"/>
+ <xsl:apply-templates select="./violation" mode="print.audit">
+ <xsl:sort data-type="number" select="@line"/>
+ </xsl:apply-templates>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <TABLE WIDTH="100%">
+ <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </TABLE>
+ </BODY>
+ </HTML>
+</xsl:template>
+<!-- the class to list -->
+<xsl:template match="class" mode="classes.list">
+ <tr>
+ <td nowrap="nowrap">
+ <!-- @bug naming to fix for inner classes -->
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="classes" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select=".//class" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+ <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="classes" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
+ <xsl:sort select="@package" order="ascending"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="classes" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Audited classes</th>
+ <th>Reported classes</th>
+ <th>Violations</th>
+ </tr>
+ <tr class="a">
+ <td><xsl:value-of select="@audited"/></td>
+ <td><xsl:value-of select="@reported"/></td>
+ <td><xsl:value-of select="@violations"/></td>
+ </tr>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Rules checked have originated from style guidelines suggested by the language designers,
+ experience from the Java development community and insite experience. Violations are generally
+ reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
+ and Metamata Audit rules (x.x).
+ Please consult these documents for additional information about violations.
+ <p/>
+ Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
+ <p/>
+ One should note that these violations do not necessary underline errors but should be used
+ as an indication for <i>possible</i> errors. As always, use your best judgment and review
+ them carefully, it might save you hours of debugging.
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
+ <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:if test="count(/classes/class[./@package = $name]) &gt; 0">
+ <H3>Classes</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:if>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Audit</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+
+<!-- class header -->
+<xsl:template name="class.audit.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th>Violations</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="violation.audit.header">
+ <tr>
+ <th>Line</th>
+ <th>Message</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="class" mode="print.audit">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@violations"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="violation" mode="print.audit">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@line"/></td>
+ <td><xsl:apply-templates select="@message"/></td>
+ </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/mmetrics-frames.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/mmetrics-frames.xsl
new file mode 100644
index 0000000..8b4643a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/mmetrics-frames.xsl
@@ -0,0 +1,1026 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ exclude-result-prefixes="xalan"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ 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.
+-->
+<!--
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- default max value for the metrics -->
+<xsl:param name="vg.max" select="10"/>
+<xsl:param name="loc.max" select="1000"/>
+<xsl:param name="dit.max" select="10"/>
+<xsl:param name="noa.max" select="250"/>
+<xsl:param name="nrm.max" select="50"/>
+<xsl:param name="nlm.max" select="250"/>
+<xsl:param name="wmc.max" select="250"/>
+<xsl:param name="rfc.max" select="50"/>
+<xsl:param name="dac.max" select="10"/>
+<xsl:param name="fanout.max" select="10"/>
+<xsl:param name="cbo.max" select="15"/>
+<xsl:param name="lcom.max" select="10"/>
+<xsl:param name="nocl.max" select="10"/>
+
+
+<!-- create a tree fragment to speed up processing -->
+<xsl:variable name="doctree.var">
+ <xsl:element name="classes">
+ <xsl:for-each select=".//class">
+ <xsl:element name="class">
+ <xsl:attribute name="package">
+ <xsl:value-of select="(ancestor::package)[last()]/@name"/>
+ </xsl:attribute>
+ <xsl:copy-of select="@*"/>
+ <xsl:attribute name="name">
+ <xsl:apply-templates select="." mode="class.name"/>
+ </xsl:attribute>
+ <xsl:copy-of select="method"/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+</xsl:variable>
+
+<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
+
+<xsl:template match="metrics">
+
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <redirect:write file="{$output.dir}/metrics-reference.html">
+ <xsl:call-template name="metrics-reference.html"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:apply-templates select=".//package"/>
+</xsl:template>
+
+
+<xsl:template match="package">
+ <xsl:variable name="package.name" select="@name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
+ <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
+ </xsl:variable>
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:apply-templates select="." mode="classes.list"/>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:apply-templates select="." mode="package.summary"/>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+ <!--Processing <xsl:value-of select="$class.name"/><xsl:text>&#10;</xsl:text> -->
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- little trick to compute the classname for inner and non inner classes -->
+<!-- this is all in one line to avoid CRLF in the name -->
+<xsl:template match="class" mode="class.name">
+ <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<HTML>
+ <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
+ <FRAMESET cols="20%,80%">
+ <FRAMESET rows="30%,70%">
+ <FRAME src="overview-frame.html" name="packageListFrame"/>
+ <FRAME src="allclasses-frame.html" name="classListFrame"/>
+ </FRAMESET>
+ <FRAME src="overview-summary.html" name="classFrame"/>
+ </FRAMESET>
+ <noframes>
+ <H2>Frame Alert</H2>
+ <P>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </P>
+ </noframes>
+</HTML>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="metrics-reference.html">
+<html>
+<head>
+<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body style="text-align:justify;">
+<h2>Metrics Reference</h2>
+<a href="#V(G)">V(G)</a> |
+<a href="#LOC">LOC</a> |
+<a href="#DIT">DIT</a> |
+<a href="#NOA">NOA</a> |
+<a href="#NRM">NRM</a> |
+<a href="#NLM">NLM</a> |
+<a href="#WMC">WMC</a> |
+<a href="#RFC">RFC</a> |
+<a href="#DAC">DAC</a> |
+<a href="#FANOUT">FANOUT</a> |
+<a href="#CBO">CBO</a> |
+<a href="#LCOM">LCOM</a> |
+<a href="#NOC">NOC</a>
+
+<a name="V(G)"/>
+<h3>Cyclomatic Complexity - V(G)</h3>
+This metric was introduced in the 1970s to measure the amount of control
+flow complexity or branching complexity in a module such as a
+subroutine. It gives the number of paths that may be taken through the
+code, and was initially developed to give some measure of the cost of
+producing a test case for the module by executing each path.
+<p/>
+Methods with a high cyclomatic complexity tend to be more difficult to
+understand and maintain. In general the more complex the methods of an
+application, the more difficult it will be to test it, and this will adversely
+affect its reliability.
+<p/>
+V(G) is a measure of the control flow complexity of a method or
+constructor. It counts the number of branches in the body of the method,
+defined as:
+<ul>
+<li>while statements;</li>
+<li>if statements;</li>
+<li>for statements.</li>
+</ul>
+
+The metric can also be configured to count each case of a switch
+statement as well.
+
+<a name="LOC"/>
+<h3>Lines of Code - LOC</h3>
+
+This is perhaps the simplest of all the metrics to define and compute.
+Counting lines has a long history as a software metric dating from before
+the rise of structured programming, and it is still in widespread use today.
+The size of a method affects the ease with which it can be understood, its
+reusability and its maintainability. There are a variety of ways that the size
+can be calculated. These include counting all the lines of code, the number
+of statements, the blank lines of code, the lines of commentary, and the
+lines consisting only of syntax such as block delimiters.
+<p/>
+This metric can also be used for sizing other constructs as well, for
+example, the overall size of a Java class or package can be measured by
+counting the number of source lines it consists of.
+<p/>
+LOC can be used to determine the size of a compilation unit (source file),
+class or interface, method, constructor, or field. It can be configured to
+ignore:
+<ul>
+<li>blank lines;</li>
+<li>lines consisting only of comments;</li>
+<li>lines consisting only of opening and closing braces.</li>
+</ul>
+
+<a name="DIT"/>
+<h3>Depth of Inheritance Hierarchy - DIT</h3>
+
+This metric calculates how far down the inheritance hierarchy a class is
+declared. In Java all classes have java.lang.Object as their ultimate
+superclass, which is defined to have a depth of 1. So a class that
+immediately extends java.lang.Object has a metric value of 2; any of its
+subclasses will have a value of 3, and so on.
+<p/>
+A class that is deep within the tree inherits more methods and state
+variables, thereby increasing its complexity and making it difficult to
+predict its behavior. It can be harder to understand a system with many
+inheritance layers.
+<p/>
+DIT is defined for classes and interfaces:
+<ul>
+<li>all interface types have a depth of 1;</li>
+<li>the class java.lang.Object has a depth of 1;</li>
+<li>all other classes have a depth of 1 + the depth of their super class.</li>
+</ul>
+
+<a name="NOA"/>
+<h3>Number of Attributes - NOA</h3>
+
+The number of distinct state variables in a class serves as one measure of
+its complexity. The more state a class represents the more difficult it is to
+maintain invariants for it. It also hinders comprehensibility and reuse.
+<p/>
+In Java, state can be exposed to subclasses through protected fields, which
+entails that the subclass also be aware of and maintain any invariants. This
+interference with the class's data encapsulation can be a source of defects
+and hidden dependencies between the state variables.
+<p/>
+NOA is defined for classes and interfaces. It counts the number of fields
+declared in the class or interface.
+
+<a name="NRM"/>
+<h3>Number of Remote Methods - NRM</h3>
+
+NRM is defined for classes. A remote method call is defined as an
+invocation of a method that is not declared in any of:
+<ul>
+<li>the class itself;</li>
+<li>a class or interface that the class extends or implements;</li>
+<li>a class or method that extends the class.</li>
+</ul>
+
+The value is the count of all the remote method calls in all of the methods
+and constructors of the class.
+
+<a name="NLM"/>
+<h3>Number of Local Methods - NLM</h3>
+
+NLM is defined for classes and interfaces. A local method is defined as a
+method that is declared in the class or interface. NLM can be configured to
+include the local methods of all of the class's superclasses. Methods with
+public, protected, package and private visibility can be independently
+counted by setting configuration parameters.
+
+<a name="WMC"/>
+<h3>Weighted Methods per Class - WMC</h3>
+
+If the number of methods in a class can be determined during the design
+and modeling phase of a project, it can be used as a predictor of how
+much time and effort is needed to develop, debug and maintain it. This
+metric can be further refined by incorporating a weighting for the
+complexity of each method. The usual weighting is given by the cyclomatic
+complexity of the method.
+<p/>
+The subclasses of a class inherit all of its public and protected methods,
+and possibly its package methods as well, so the number of methods a
+class has directly impacts the complexity of its subclasses. Classes with
+large numbers of methods are often specific to a particular application,
+reducing the ability to reuse them.
+<p/>
+The definition of WMC is based upon NLM, and it provides the same
+configuration parameters for counting inherited methods and of varying
+visibility. The main difference is that NLM always counts each method as 1,
+whereas WMC will weight each method. There are two weighting schemes:
+<ul>
+<li>V(G) the cyclomatic complexity of the method is used as its weight.
+ Methods from class files are given a V(G) of 1.</li>
+<li>the arity, or the number of parameters of the method are used to
+ determine the weight.</li>
+</ul>
+
+<a name="RFC"/>
+<h3>Response For Class - RFC</h3>
+
+The response set of a class is the set of all methods that can be invoked as
+a result of a message sent to an object of the class. This includes methods
+in the class's inheritance hierarchy and methods that can be invoked on
+other objects. The Response For Class metric is defined to be size of the
+response set for the class. A class which provides a larger response set is
+considered to be more complex than one with a smaller response set.
+<p/>
+One reason for this is that if a method call on a class can result in a large
+number of different method calls on the target and other classes, then it
+can be harder to test the behavior of the class and debug problems. It will
+typically require a deeper understanding of the potential interactions that
+objects of the class can have with the rest of the system.
+<p/>
+RFC is defined as the sum of NLM and NRM for the class. The local methods
+include all of the public, protected, package and private methods, but not
+methods declared only in a superclass.
+
+<a name="DAC"/>
+<h3>Data Abstraction Coupling - DAC</h3>
+
+DAC is defined for classes and interfaces. It counts the number of reference
+types that are used in the field declarations of the class or interface. The
+component types of arrays are also counted. Any field with a type that is
+either a supertype or a subtype of the class is not counted.
+
+<a name="FANOUT"/>
+<h3>Fan Out - FANOUT</h3>
+
+FANOUT is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations;</li>
+<li>formal parameters and return types;</li>
+<li>throws declarations;</li>
+<li>local variables.</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="CBO"/>
+<h3>Coupling Between Objects - CBO</h3>
+
+When one object or class uses another object or class they are said to be
+coupled. One major source of coupling is that between a superclass and a
+subclass. A coupling is also introduced when a method or field in another
+class is accessed, or when an object of another class is passed into or out
+of a method invocation. Coupling Between Objects is a measure of the
+non-inheritance coupling between two objects.
+<p/>
+A high value of coupling reduces the modularity of the class and makes
+reuse more difficult. The more independent a class is the more likely it is
+that it will be possible to reuse it in another part of the system. When a
+class is coupled to another class it becomes sensitive to changes in that
+class, thereby making maintenance for difficult. In addition, a class that is
+overly dependent on other classes can be difficult to understand and test in
+isolation.
+<p/>
+CBO is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations</li>
+<li>formal parameters and return types</li>
+<li>throws declarations</li>
+<li>local variables</li>
+</ul>
+
+It also counts:
+<ul>
+<li>types from which field and method selections are made</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="LCOM"/>
+<h3>Lack of Cohesion Of Methods - LCOM</h3>
+
+The cohesion of a class is the degree to which its methods are related to
+each other. It is determined by examining the pattern of state variable
+accesses within the set of methods. If all the methods access the same state
+variables then they have high cohesion; if they access disjoint sets of
+variables then the cohesion is low. An extreme example of low cohesion
+would be if none of the methods accessed any of the state variables.
+
+If a class exhibits low method cohesion it indicates that the design of the
+class has probably been partitioned incorrectly, and could benefit by being
+split into more classes with individually higher cohesion. On the other
+hand, a high value of cohesion (a low lack of cohesion) implies that the
+class is well designed. A cohesive class will tend to provide a high degree
+of encapsulation, whereas a lack of cohesion decreases encapsulation and
+increases complexity.
+<p/>
+Another form of cohesion that is useful for Java programs is cohesion
+between nested and enclosing classes. A nested class that has very low
+cohesion with its enclosing class would probably better designed as a peer
+class rather than a nested class.
+<p/>
+LCOM is defined for classes. Operationally, LCOM takes each pair of
+methods in the class and determines the set of fields they each access. If
+they have disjoint sets of field accesses increase the count P by one. If they
+share at least one field access then increase Q by one. After considering
+each pair of methods,
+LCOM = (P > Q) ? (P - Q) : 0
+<p/>
+Indirect access to fields via local methods can be considered by setting a
+metric configuration parameter.
+
+<a name="NOC"/>
+<h3>Number Of Classes - NOC</h3>
+
+The overall size of the system can be estimated by calculating the number
+of classes it contains. A large system with more classes is more complex
+than a smaller one because the number of potential interactions between
+objects is higher. This reduces the comprehensibility of the system which
+in turn makes it harder to test, debug and maintain.
+<p/>
+If the number of classes in the system can be projected during the initial
+design phase of the project it can serve as a base for estimating the total
+effort and cost of developing, debugging and maintaining the system.
+<p/>
+The NOC metric can also usefully be applied at the package and class level
+as well as the total system.
+<p/>
+NOCL is defined for class and interfaces. It counts the number of classes or
+interfaces that are declared. This is usually 1, but nested class declarations
+will increase this number.
+</body>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+
+</xsl:template>
+
+<!-- print the metrics of the class -->
+<xsl:template match="class" mode="class.details">
+ <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
+ <xsl:variable name="package.name" select="@package"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+
+ <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+
+ <H3>Methods</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="method.metrics.header"/>
+ <xsl:apply-templates select="method" mode="print.metrics"/>
+ </table>
+
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <H2>Classes</H2>
+ <TABLE WIDTH="100%">
+ <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
+ <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </TABLE>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="metrics" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="''"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="$doctree/classes/class">
+ <xsl:sort select="@name"/>
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name" select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='unnamed package')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="$class.name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="metrics" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="./package/@name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="package" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="metrics" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="''"/>
+ </xsl:call-template>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
+ <th><a href="metrics-reference.html#LOC">LOC</a></th>
+ <th><a href="metrics-reference.html#DIT">DIT</a></th>
+ <th><a href="metrics-reference.html#NOA">NOA</a></th>
+ <th><a href="metrics-reference.html#NRM">NRM</a></th>
+ <th><a href="metrics-reference.html#NLM">NLM</a></th>
+ <th><a href="metrics-reference.html#WMC">WMC</a></th>
+ <th><a href="metrics-reference.html#RFC">RFC</a></th>
+ <th><a href="metrics-reference.html#DAC">DAC</a></th>
+ <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
+ <th><a href="metrics-reference.html#CBO">CBO</a></th>
+ <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
+ <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
+ </tr>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+ various kind of complexity. Complexity is a common source of problems and defects in software.
+ High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+ a program.
+ <p/>
+ The primary use of metrics is to focus your attention on those parts of code that potentially are
+ complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+ actions.
+ For additional information about metrics and their meaning, please consult
+ Metamata Metrics manual.
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
+ <xsl:sort select="@name" order="ascending"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </xsl:for-each>
+ </table>
+ <!-- @bug there could some classes at this level (classes in unnamed package) -->
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="package" mode="package.summary">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <body onload="open('package-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <!-- create an anchor to this package name -->
+ <h3>Package <xsl:value-of select="@name"/></h3>
+
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+ various kind of complexity. Complexity is a common source of problems and defects in software.
+ High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+ a program.
+ <p/>
+ The primary use of metrics is to focus your attention on those parts of code that potentially are
+ complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+ actions.
+ For additional information about metrics and their meaning, please consult
+ Metamata Metrics manual.
+ </td>
+ </tr>
+ </table>
+
+ <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
+ <xsl:if test="count($classes-in-package) &gt; 0">
+ <H3>Classes</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:for-each select="$classes-in-package">
+ <xsl:sort select="@name"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </xsl:for-each>
+ </table>
+ </xsl:if>
+
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Metrics</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="all.metrics.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th nowrap="nowrap">V(G)</th>
+ <th>LOC</th>
+ <th>DIT</th>
+ <th>NOA</th>
+ <th>NRM</th>
+ <th>NLM</th>
+ <th>WMC</th>
+ <th>RFC</th>
+ <th>DAC</th>
+ <th>FANOUT</th>
+ <th>CBO</th>
+ <th>LCOM</th>
+ <th>NOCL</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="method.metrics.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th nowrap="nowrap">V(G)</th>
+ <th>LOC</th>
+ <th>FANOUT</th>
+ <th>CBO</th>
+ </tr>
+</xsl:template>
+
+<!-- method information -->
+<xsl:template match="method" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:apply-templates select="@name"/></td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ </tr>
+</xsl:template>
+
+<!-- class information -->
+<xsl:template match="class" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@dit"/></td>
+ <td><xsl:apply-templates select="@noa"/></td>
+ <td><xsl:apply-templates select="@nrm"/></td>
+ <td><xsl:apply-templates select="@nlm"/></td>
+ <td><xsl:apply-templates select="@wmc"/></td>
+ <td><xsl:apply-templates select="@rfc"/></td>
+ <td><xsl:apply-templates select="@dac"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ <td><xsl:apply-templates select="@lcom"/></td>
+ <td><xsl:apply-templates select="@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="file|package" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td>
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@dit"/></td>
+ <td><xsl:apply-templates select="@noa"/></td>
+ <td><xsl:apply-templates select="@nrm"/></td>
+ <td><xsl:apply-templates select="@nlm"/></td>
+ <td><xsl:apply-templates select="@wmc"/></td>
+ <td><xsl:apply-templates select="@rfc"/></td>
+ <td><xsl:apply-templates select="@dac"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ <td><xsl:apply-templates select="@lcom"/></td>
+ <td><xsl:apply-templates select="@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="metrics" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <!-- the global metrics is the top package metrics -->
+ <td><xsl:apply-templates select="./package/@vg"/></td>
+ <td><xsl:apply-templates select="./package/@loc"/></td>
+ <td><xsl:apply-templates select="./package/@dit"/></td>
+ <td><xsl:apply-templates select="./package/@noa"/></td>
+ <td><xsl:apply-templates select="./package/@nrm"/></td>
+ <td><xsl:apply-templates select="./package/@nlm"/></td>
+ <td><xsl:apply-templates select="./package/@wmc"/></td>
+ <td><xsl:apply-templates select="./package/@rfc"/></td>
+ <td><xsl:apply-templates select="./package/@dac"/></td>
+ <td><xsl:apply-templates select="./package/@fanout"/></td>
+ <td><xsl:apply-templates select="./package/@cbo"/></td>
+ <td><xsl:apply-templates select="./package/@lcom"/></td>
+ <td><xsl:apply-templates select="./package/@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+
+<!-- how to display the metrics with their max value -->
+<!-- @todo the max values must be external to the xsl -->
+
+ <xsl:template match="@vg">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$vg.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@loc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$loc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@dit">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$dit.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@noa">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$noa.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nrm">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nrm.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nlm">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nlm.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@wmc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$wmc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@rfc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$rfc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@dac">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$dac.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@fanout">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$fanout.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@cbo">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$cbo.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@lcom">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$lcom.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nocl">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nocl.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="display-value">
+ <xsl:param name="value"/>
+ <xsl:param name="max"/>
+ <xsl:if test="$value > $max">
+ <xsl:attribute name="class">Error</xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="$value"/>
+ </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/tagdiff.xsl b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/tagdiff.xsl
new file mode 100644
index 0000000..5d430a7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/etc/tagdiff.xsl
@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- a stylesheet to display changelogs ala netbeans -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+ <xsl:param name="title"/>
+ <xsl:param name="module"/>
+ <xsl:param name="cvsweb"/>
+
+ <xsl:output method="html" indent="yes"/>
+
+ <!-- Copy standard document elements. Elements that
+ should be ignored must be filtered by apply-templates
+ tags. -->
+ <xsl:template match="*">
+ <xsl:copy>
+ <xsl:copy-of select="attribute::*[. != '']"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="tagdiff">
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <style type="text/css">
+ body, p {
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ color:#000000;
+ }
+ .dateAndAuthor {
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ tr, td{
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ background:#eeeee0;
+ }
+ </style>
+ </head>
+ <body link="#000000" alink="#000000" vlink="#000000" text="#000000">
+ <h1>
+ <a name="top"><xsl:value-of select="$title"/></a>
+ </h1>
+ Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
+ <xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
+ <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p>
+ <hr size="2"/>
+ <a name="TOP"/>
+ <table width="100%">
+ <tr>
+ <td align="right">
+ <a href="#New">New Files</a> |
+ <a href="#Modified">Modified Files</a> |
+ <a href="#Removed">Removed Files</a>
+ </td>
+ </tr>
+ </table>
+ <table border="0" width="100%" cellpadding="3" cellspacing="1">
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">New Files</xsl:with-param>
+ <xsl:with-param name="anchor">New</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">Modified Files</xsl:with-param>
+ <xsl:with-param name="anchor">Modified</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
+ </xsl:call-template>
+
+ <!-- change to entries select to address bug #36827 -->
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">Removed Files</xsl:with-param>
+ <xsl:with-param name="anchor">Removed</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[not(file/revision)][file/prevrevision]"/>
+ </xsl:call-template>
+ </table>
+
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="show-entries">
+ <xsl:param name="title"/>
+ <xsl:param name="anchor"/>
+ <xsl:param name="entries"/>
+ <tr>
+ <td colspan="2" class="dateAndAuthor">
+ <a>
+ <xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
+ <xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
+ </a>
+ <a href="#TOP">(back to top)</a>
+ </td>
+ </tr>
+ <tr>
+ <td width="20">
+ <xsl:text> </xsl:text>
+ </td>
+ <td>
+ <ul>
+ <xsl:apply-templates select="$entries"/>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <xsl:apply-templates select="file"/>
+ </xsl:template>
+
+ <xsl:template match="date">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="time">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="author">
+ <i>
+ <a>
+ <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </a>
+ </i>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <li>
+ <a target="_new">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
+ <xsl:value-of select="name" />
+ </a>
+ <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
+ <xsl:text> </xsl:text>
+ <a target="_new">
+ <xsl:choose>
+ <xsl:when test="string-length(prevrevision) = 0 ">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/>&amp;diff_format=h</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose> (<xsl:if test="count(prevrevision) &gt; 0"> <xsl:value-of select="prevrevision"/> --&gt; </xsl:if> <xsl:value-of select="revision"/>)
+ </a>
+ </xsl:if>
+ </li>
+ </xsl:template>
+
+ <!-- Any elements within a msg are processed,
+ so that we can preserve HTML tags. -->
+ <xsl:template match="msg">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-antlr.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-antlr.jar
new file mode 100644
index 0000000..b96e61f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-antlr.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bcel.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bcel.jar
new file mode 100644
index 0000000..6bba544
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bcel.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bsf.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bsf.jar
new file mode 100644
index 0000000..58639ac
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-bsf.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-log4j.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-log4j.jar
new file mode 100644
index 0000000..fed3e47
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-log4j.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-oro.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-oro.jar
new file mode 100644
index 0000000..ada184d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-oro.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-regexp.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-regexp.jar
new file mode 100644
index 0000000..1486d31
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-regexp.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-resolver.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-resolver.jar
new file mode 100644
index 0000000..0309f48
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-apache-resolver.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-logging.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-logging.jar
new file mode 100644
index 0000000..0abc8d4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-logging.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-net.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-net.jar
new file mode 100644
index 0000000..5184b34
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-commons-net.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jai.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jai.jar
new file mode 100644
index 0000000..b169eb5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jai.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-javamail.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-javamail.jar
new file mode 100644
index 0000000..4d3f649
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-javamail.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar
new file mode 100644
index 0000000..4b19710
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jdepend.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jmf.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jmf.jar
new file mode 100644
index 0000000..94ea610
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jmf.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar
new file mode 100644
index 0000000..395c96e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-jsch.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar
new file mode 100644
index 0000000..9cd017b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar
new file mode 100644
index 0000000..38d8676
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-netrexx.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-netrexx.jar
new file mode 100644
index 0000000..cc53843
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-netrexx.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar
new file mode 100644
index 0000000..6f44ba2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-nodeps.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-starteam.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-starteam.jar
new file mode 100644
index 0000000..b492adb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-starteam.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-stylebook.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-stylebook.jar
new file mode 100644
index 0000000..d3d34cf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-stylebook.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar
new file mode 100644
index 0000000..417ea25
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-swing.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar
new file mode 100644
index 0000000..f3b7ce5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-trax.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-weblogic.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-weblogic.jar
new file mode 100644
index 0000000..f432d63
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-weblogic.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar
new file mode 100644
index 0000000..f70d28d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/plugin.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/plugin.properties
new file mode 100644
index 0000000..488e922
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.7.1.v20090120-1145/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Apache Ant
+providerName = Eclipse.org
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.codec_1.3.0.v20100518-1140.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.codec_1.3.0.v20100518-1140.jar
new file mode 100644
index 0000000..f87586a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.codec_1.3.0.v20100518-1140.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.el_1.0.0.v201004212143.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.el_1.0.0.v201004212143.jar
new file mode 100644
index 0000000..747bc36
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.el_1.0.0.v201004212143.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.httpclient_3.1.0.v201005080502.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.httpclient_3.1.0.v201005080502.jar
new file mode 100644
index 0000000..a2a6beb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.httpclient_3.1.0.v201005080502.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.logging_1.0.4.v201005080501.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.logging_1.0.4.v201005080501.jar
new file mode 100644
index 0000000..f35669b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.commons.logging_1.0.4.v201005080501.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.jasper_5.5.17.v201004212143.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.jasper_5.5.17.v201004212143.jar
new file mode 100644
index 0000000..390d3ac
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.jasper_5.5.17.v201004212143.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar
new file mode 100644
index 0000000..f7fc62c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene_1.9.1.v20100518-1140.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene_1.9.1.v20100518-1140.jar
new file mode 100644
index 0000000..9ed58b9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.apache.lucene_1.9.1.v20100518-1140.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ant.core_3.2.200.v20100427.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ant.core_3.2.200.v20100427.jar
new file mode 100644
index 0000000..04f40c0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ant.core_3.2.200.v20100427.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.classpath b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.classpath
new file mode 100644
index 0000000..49c14c9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="src_rss"/>
+ <classpathentry kind="src" path="src_bugzilla"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="var" path="ECLIPSE_HOME/plugins/org.eclipse.osgi.util_3.2.100.v20100503.jar"/>
+ <classpathentry kind="var" path="ECLIPSE_HOME/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar"/>
+ <classpathentry kind="var" path="ECLIPSE_HOME/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-launcher.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.cvsignore b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.cvsignore
new file mode 100644
index 0000000..b274aa8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.cvsignore
@@ -0,0 +1,3 @@
+bin
+logs
+*.settings
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.project b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.project
new file mode 100644
index 0000000..4cec12b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.build.tools</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/about.html
new file mode 100644
index 0000000..9db411a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/about.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>20th June, 2002</p>
+<h3>License</h3>
+<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Common Public License Version 1.0 (&quot;CPL&quot;). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
+For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
+
+<h3>Contributions</h3>
+
+<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
+made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
+Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
+
+<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
+other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
+host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
+to others under the terms of the Other License. In addition, with regard to Modifications for which you are the copyright holder, you are also
+providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
+the CPL.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/bugTools.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/bugTools.jar
new file mode 100644
index 0000000..1e1f2d6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/bugTools.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/buildTools.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/buildTools.jar
new file mode 100644
index 0000000..1f753eb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/buildTools.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/_README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/_README.txt
new file mode 100644
index 0000000..ab54702
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/_README.txt
@@ -0,0 +1,2 @@
+These files are sample data to get you started, generated using
+the feedPublish.*.properties files in the properties/ folder. \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-eclipse-3.3.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-eclipse-3.3.xml
new file mode 100644
index 0000000..3ee1147
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-eclipse-3.3.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>Eclipse Builds</title>
+ <link href="http://download.eclipse.org/eclipse/downloads/builds-eclipse.xml" rel="self" type="application/atom+xml"/>
+ <updated>2006-11-14T23:54:27Z</updated>
+ <author>
+ <name>Eclipse Build Team</name>
+ </author>
+ <id>http://download.eclipse.org/eclipse/downloads/builds-eclipse.xml</id>
+ <entry>
+ <title>[announce] Eclipse I20060922-0010 (3.3.0.I20060922-0010) is available</title>
+ <link href="http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010"/>
+ <id>http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010</id>
+ <updated>2006-11-14T23:54:27Z</updated>
+ <summary>
+ <build xmlns="http://www.eclipse.org/2006/BuildFeed" branch="HEAD" datetime="20060922-0010" href="http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010" type="I" version="3.3.0">
+ <detail href="http://www.eclipse.org/downloads/download.php?r=1&amp;file=/eclipse/downloads/drops/I20060922-0010/" map="directory.txt"/>
+ <downloads>http://download.eclipse.org/eclipse/downloads/</downloads>
+ <releasenotes>http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010/buildNotes.php
+ </releasenotes>
+ <releases>
+ <release arch="x86" os="win32" type="SDK" ws="win">eclipse-SDK-I20060922-0010-win32.zip</release>
+ <release arch="x86" os="linux" type="SDK" ws="gtk">eclipse-SDK-I20060922-0010-linux-gtk.tar.gz</release>
+ </releases>
+ <tests>
+ <test href="http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010/testResults.php" type="junit">
+ <result arch="x86" os="win32" ws="win">UNKNOWN</result>
+ <result arch="x86" os="linux" ws="gtk">UNKNOWN</result>
+ <result arch="x86_64" os="linux" ws="gtk">UNKNOWN</result>
+ <result arch="ppc" os="linux" ws="gtk">UNKNOWN</result>
+ <result arch="x86" os="linux" ws="motif">UNKNOWN</result>
+ <result arch="x86" os="solaris8" ws="gtk">UNKNOWN</result>
+ <result arch="x86" os="aix" ws="motif">UNKNOWN</result>
+ <result arch="x86" os="hp-ux" ws="motif">UNKNOWN</result>
+ <result arch="ppc" os="macosx" ws="carbon">UNKNOWN</result>
+ </test>
+ <test href="http://download.eclipse.org/eclipse/downloads/drops/I20060922-0010/performance/performance.php" type="performance">
+ <result arch="x86" id="RHEL4-3GHz-2.5GB" os="linux" ws="gtk">PENDING</result>
+ <result arch="x86" id="winxp-3GHz-2GB" os="win32" ws="win">UNKNOWN</result>
+ <result arch="x86" id="RHEL3-3GHz-2GB" os="linux" ws="gtk">UNKNOWN</result>
+ <result arch="x86" id="winxp-2GHz-512MB" os="win32" ws="win">UNKNOWN</result>
+ </test>
+ </tests>
+ <coordinated status="COMPLETE"/>
+ </build>
+ </summary>
+ </entry>
+</feed>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-emf-2.3.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-emf-2.3.xml
new file mode 100644
index 0000000..4b3f599
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-emf-2.3.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>EMF Builds</title>
+ <link href="http://download.eclipse.org/tools/emf/feeds/builds.xml" rel="self" type="application/atom+xml"/>
+ <updated>2006-11-14T23:07:56Z</updated>
+ <author>
+ <name>EMF Build Team</name>
+ </author>
+ <id>http://download.eclipse.org/tools/emf/feeds/builds.xml</id>
+ <entry>
+ <title>[announce] EMF 2.3.0M3 (S200611091546) is available</title>
+ <link href="http://www.eclipse.org/emf/downloads/?showAll=1&amp;hlbuild=S200611091546#S200611091546"/>
+ <id>http://www.eclipse.org/emf/downloads/?showAll=1&amp;hlbuild=S200611091546#S200611091546</id>
+ <updated>2006-11-14T23:07:56Z</updated>
+ <summary>
+ <build xmlns="http://www.eclipse.org/2006/BuildFeed" branch="HEAD" datetime="200611091546" href="http://www.eclipse.org/emf/downloads/?showAll=1&amp;hlbuild=S200611091546#S200611091546" type="S" version="2.3.0">
+ <detail config="build.cfg" href="http://www.eclipse.org/downloads/download.php?r=1&amp;file=/tools/emf/downloads/drops/2.3.0/S200611091546/" log="buildlog.txt" map="directory.txt"/>
+ <update>http://download.eclipse.org/tools/emf/updates/</update>
+ <downloads>http://www.eclipse.org/emf/downloads/</downloads>
+ <releasenotes>http://www.eclipse.org/emf/news/release-notes.php?version=2.3.0
+ </releasenotes>
+ <releases>
+ <release arch="ALL" os="ALL" type="SDK" ws="ALL">emf-sdo-xsd-SDK-2.3.0M3.zip</release>
+ </releases>
+ <tests>
+ <test href="http://www.eclipse.org/downloads/download.php?r=1&amp;file=/tools/emf/downloads/drops/2.3.0/S200611091546/testResults.php" type="junit">
+ <result arch="ALL" os="ALL" ws="ALL">PASS</result>
+ </test>
+ </tests>
+ <dependencies>
+ <dependency>http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/M20060919-1045/eclipse-SDK-M20060919-1045-linux-gtk.tar.gz</dependency>
+ </dependencies>
+ <coordinated status="COMPLETE"/>
+ </build>
+ </summary>
+ </entry>
+</feed>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-uml2-uml-2.1.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-uml2-uml-2.1.xml
new file mode 100644
index 0000000..0ae3ea4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/data/builds-uml2-uml-2.1.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>UML2 Builds</title>
+ <link href="http://download.eclipse.org/modeling/mdt/feeds/builds-uml2-uml-2.0.xml" rel="self" type="application/atom+xml"/>
+ <updated>2006-11-14T23:12:21Z</updated>
+ <author>
+ <name>UML2 Build Team</name>
+ </author>
+ <id>http://download.eclipse.org/modeling/mdt/feeds/builds-uml2-uml-2.0.xml</id>
+ <entry>
+ <title>[announce] UML2 2.0.1 M200609210850 is available</title>
+ <link href="http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml&amp;showAll=1&amp;hlbuild=M200609210850#M200609210850"/>
+ <id>http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml&amp;showAll=1&amp;hlbuild=M200609210850#M200609210850</id>
+ <updated>2006-11-14T23:12:21Z</updated>
+ <summary>
+ <build xmlns="http://www.eclipse.org/2006/BuildFeed" branch="HEAD" datetime="200609210850" href="http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml&amp;showAll=1&amp;hlbuild=M200609210850#M200609210850" type="M" version="2.0.1">
+ <detail config="build.cfg" href="http://www.eclipse.org/downloads/download.php?r=1&amp;file=/modeling/mdt/uml2-uml/downloads/drops/2.0.1/M200609210850/" log="buildlog.txt" map="directory.txt"/>
+ <update>http://download.eclipse.org/modeling/mdt/updates/?project=uml2-uml</update>
+ <downloads>http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml#uml2-uml</downloads>
+ <releasenotes>http://www.eclipse.org/modeling/mdt/news/release-notes.php?project=uml2-uml&amp;amp;version=2.0.1
+ </releasenotes>
+ <releases>
+ <release arch="ALL" os="ALL" type="SDK" ws="ALL">uml2-SDK-.zip</release>
+ </releases>
+ <tests>
+ <test href="http://www.eclipse.org/downloads/download.php?r=1&amp;file=/modeling/mdt/uml2-uml/downloads/drops/2.0.1/M200609210850/testResults.php" type="junit">
+ <result arch="ALL" os="ALL" ws="ALL">PASS</result>
+ </test>
+ </tests>
+ <dependencies>
+ <dependency>http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/M20060919-1045/eclipse-SDK-M20060919-1045-linux-gtk.tar.gz</dependency>
+ <dependency>http://www.eclipse.org/downloads/download.php?file=/tools/emf/downloads/drops/2.2.1/S200609210005/emf-sdo-xsd-SDK-2.2.1RC2.zip</dependency>
+ </dependencies>
+ <coordinated status="COMPLETE"/>
+ </build>
+ </summary>
+ </entry>
+</feed>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/feedTools.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/feedTools.jar
new file mode 100644
index 0000000..e10ea43
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/feedTools.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/plugin.xml
new file mode 100644
index 0000000..29b7f74
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/plugin.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin
+ id="org.eclipse.build.tools"
+ name="org.eclipse.build.tools"
+ version="1.0.0">
+
+ <runtime>
+ </runtime>
+
+ <extension
+ point="org.eclipse.ant.core.extraClasspathEntries">
+ <extraClasspathEntry
+ library="buildTools.jar">
+ </extraClasspathEntry>
+ <extraClasspathEntry
+ library="feedTools.jar">
+ </extraClasspathEntry>
+ </extension>
+ <!-- Tasks -->
+ <extension point="org.eclipse.ant.core.antTasks">
+ <antTask
+ library="buildTools.jar"
+ name="sysProp"
+ class="org.eclipse.releng.SystemProperty">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="generateBaseFetchScript"
+ class="org.eclipse.releng.generators.FetchBaseTask">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="generateTestProperties"
+ class="org.eclipse.releng.generators.TestVersionTracker">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="verifyCompile"
+ class="org.eclipse.releng.CompileErrorCheck">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="findMachine"
+ class="org.eclipse.releng.FindMachineTask">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="modifiedMaps"
+ class="org.eclipse.releng.CvsDiffParser">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="unpackUpdateJars"
+ class="org.eclipse.releng.UnpackUpdateJars">
+ </antTask>
+ <antTask
+ library="buildTools.jar"
+ name="generateExcludeList"
+ class="org.eclipse.releng.GenerateExcludeListTask">
+ </antTask>
+
+
+ <!-- <antTask
+ library="feedTools.jar"
+ name="CreateFeed"
+ class="org.eclipse.releng.generators.rss.RSSFeedCreateFeedTask">
+ </antTask>
+ <antTask
+ library="feedTools.jar"
+ name="AddEntry"
+ class="org.eclipse.releng.generators.rss.RSSFeedAddEntryTask">
+ </antTask>
+ <antTask
+ library="feedTools.jar"
+ name="GetProperty"
+ class="org.eclipse.releng.generators.rss.RSSFeedGetPropertyTask">
+ </antTask>
+ <antTask
+ library="feedTools.jar"
+ name="UpdateEntry"
+ class="org.eclipse.releng.generators.rss.RSSFeedUpdateEntryTask">
+ </antTask>
+ <antTask
+ library="feedTools.jar"
+ name="PublishFeed"
+ class="org.eclipse.releng.services.rss.RSSFeedPublisherTask">
+ </antTask>
+ <antTask
+ library="feedTools.jar"
+ name="WatchFeed"
+ class="org.eclipse.releng.services.rss.RSSFeedWatcherTask">
+ </antTask> -->
+ </extension>
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/UpdateBugStateTask.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/UpdateBugStateTask.properties
new file mode 100644
index 0000000..b6c21ad
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/UpdateBugStateTask.properties
@@ -0,0 +1,6 @@
+#this file should be loaded by UpdateBugStateTask.xml when running
+#it is expected to contain login and logincookie, run BugzillaLogin.sh to generate these
+#see below for sample syntax
+
+login=8130
+logincookie=982276000 \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/_README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/_README.txt
new file mode 100644
index 0000000..959c36c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/_README.txt
@@ -0,0 +1,13 @@
+These files are examples to get you started. Since you cannot commit
+your files into CVS here, just point the scripts at your own properties
+files, similar in content to these, and run accordingly.
+
+You can also run the Ant scripts without properties files if you set
+the attributes statically in your ant script.
+
+Or, you can call the Tasks themselves within another Java class.
+RSSFeedAddEntryTask is an example of this, in that it optionally
+calls RSSFeedCreateFeedTask if no existing feed file already exists.
+RSSFeedGetPropertyTask is a wrapper for RSSFeedUpdateEntryTask, which
+also queries for an attribute value, but instead of changing it,
+simply returns it. \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.eclipse.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.eclipse.properties
new file mode 100644
index 0000000..3629240
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.eclipse.properties
@@ -0,0 +1,108 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# properties for: RSSFeedCreateFeedTask.java, RSSFeedAddEntryTask.java, RSSFeedGetPropertyTask.java, RSSFeedUpdateEntryTask.java, RSSFeedPublisherTask.java
+
+# NOTE: if values are commented out (#), they must be passed in to Ant via commandline instead (eg., from emf's promoteToEclipse.sh when promoting a build)
+
+# one of 0|1|2
+debug=1
+
+# if file does not exist, it will be created; if it does, it will be modified
+#file=/builds/transfer/files/master/downloads/builds-eclipse-3.3.xml
+file=../data/builds-eclipse-3.4.xml
+
+# required
+project=Eclipse
+branch=HEAD
+version=3.3.0
+buildID=I20060922-0010
+feedURL=http://download.eclipse.org/eclipse/downloads/builds-eclipse.xml
+buildURL=http://download.eclipse.org/eclipse/downloads/drops/%%buildID%%
+
+# optional build alias, like 3.3M3
+buildAlias=I20060922-0010
+
+# optional build type; one of: N, I, M, S, R; if not provided, will be pulled from buildID above
+buildType=
+
+# optional
+buildDetailURL=http://www.eclipse.org/downloads/download.php?r=1&file=/eclipse/downloads/drops/%%buildID%%/
+buildConfigURL=
+buildLogURL=
+buildMapURL=directory.txt
+
+# optional
+releaseNotesURL=http://download.eclipse.org/eclipse/downloads/drops/%%buildID%%/buildNotes.php
+updateManagerURL=
+downloadsURL=http://download.eclipse.org/eclipse/downloads/
+
+# optional: one of NONE|UNSIGNED|SIGNREADY|BUILDREADY|SIGNED
+jarSigningStatus=
+
+# optional: one of NONE|BUILDCOMPLETE|UMSITEREADY|CALLISTOSITEREADY|COMPLETE, or
+coordinatedStatus=
+# optional: timestamp when will be ready (eg., 2006-05-02T20:50:00Z), or
+# project on which you're waiting (eg., TPTP)
+coordinatedDetails=
+
+# comma or space separated values
+dependencyURLs=
+
+#optional
+JUnitTestURL=http://download.eclipse.org/eclipse/downloads/drops/%%buildID%%/testResults.php
+performanceTestURL=http://download.eclipse.org/eclipse/downloads/drops/%%buildID%%/performance/performance.php
+APITestURL=
+
+# values to set for test results in quints of id,os,ws,arch,status,id,os,ws,arch,status,...
+JUnitTestResults=\
+0,win32,win,x86,UNKNOWN,\
+0,linux,gtk,x86,UNKNOWN,\
+0,linux,gtk,x86_64,UNKNOWN,\
+0,linux,gtk,ppc,UNKNOWN,\
+0,solaris8,gtk,x86,UNKNOWN,\
+0,aix,motif,x86,UNKNOWN,\
+0,hp-ux,motif,x86,UNKNOWN,\
+0,macosx,carbon,ppc,UNKNOWN
+performanceTestResults=\
+RHEL4-3GHz-2.5GB,linux,gtk,x86,UNKNOWN,\
+winxp-3GHz-2GB,win32,win,x86,UNKNOWN,\
+RHEL3-3GHz-2GB,linux,gtk,x86,UNKNOWN,\
+winxp-2GHz-512MB,win32,win,x86,UNKNOWN
+APITestResults=
+
+# values to set for release bundles in quints of os,ws,arch,name/type,filename,os,ws,arch,name/type,filename...
+# only need the filename; the full http URL can be assembled from buildURL + "/download.php?dropFile=" + filename or buildURL (switched to ftp://) + "/" + filename
+# eg., win32,win,SDK,eclipse-SDK-%%buildAlias%%-win32.zip,linux,gtk,SDK,eclipse-SDK-%%buildAlias%%-linux-gtk.tar.gz
+Releases=\
+win32,win,x86,SDK,eclipse-SDK-%%buildAlias%%-win32.zip,\
+linux,gtk,x86,SDK,eclipse-SDK-%%buildAlias%%-linux-gtk.tar.gz
+
+########################################
+
+# options for publishing files - need either an scp target or a cvs root/path, or both
+# file (above) is required too
+
+# /path/to/cvs/executable
+cvsExec=/usr/bin/cvs
+# user@cvsServer:/path/to/cvs/root
+cvsRoot=
+# cvs/module/path
+cvsPath=www/news
+# /tmp/folder/path/for/checkout
+cvsTemp=
+
+# /path/to/scp/executable
+scpExec=/usr/bin/scp
+# user@server:/path/to/destination/file.xml - destintion folder MUST ALREADY EXIST
+scpTarget=
+
+# optionally, if the target folder might not exist, you can use ssh to create it before scp'ing the file - only runs if sshMakeDirCommand is defined
+sshExec=/usr/bin/ssh
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.emf.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.emf.properties
new file mode 100644
index 0000000..314e027
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.emf.properties
@@ -0,0 +1,100 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# properties for: RSSFeedCreateFeedTask.java, RSSFeedAddEntryTask.java, RSSFeedGetPropertyTask.java, RSSFeedUpdateEntryTask.java, RSSFeedPublisherTask.java
+
+# NOTE: if values are commented out (#), they must be passed in to Ant via commandline instead (eg., from emf's promoteToEclipse.sh when promoting a build)
+
+# one of 0|1|2
+debug=0
+
+# if file does not exist, it will be created; if it does, it will be modified
+#file=/var/www/emf/feeds/builds-emf-2.3.xml
+file=../data/builds-emf-2.3.xml
+
+# required
+project=EMF
+branch=HEAD
+version=2.3.0
+buildID=S200611091546
+feedURL=http://download.eclipse.org/tools/emf/feeds/builds-emf-2.3.xml
+buildURL=http://www.eclipse.org/emf/downloads/?showAll=1&hlbuild=%%buildID%%#%%buildID%%
+
+# optional build alias, like 2.2.1RC2
+buildAlias=2.3.0M3
+
+# optional build type; one of: N, I, M, S, R; if not provided, will be pulled from buildID above
+buildType=
+
+# optional
+buildDetailURL=http://www.eclipse.org/downloads/download.php?r=1&file=/tools/emf/downloads/drops/%%version%%/%%buildID%%/
+buildConfigURL=build.cfg
+buildLogURL=buildlog.txt
+buildMapURL=directory.txt
+
+# optional
+releaseNotesURL=http://www.eclipse.org/emf/news/release-notes.php?version=%%version%%
+updateManagerURL=http://download.eclipse.org/tools/emf/updates/
+downloadsURL=http://www.eclipse.org/emf/downloads/
+
+# optional: one of NONE|UNSIGNED|SIGNREADY|BUILDREADY|SIGNED
+jarSigningStatus=
+
+# optional: one of NONE|BUILDCOMPLETE|UMSITEREADY|CALLISTOSITEREADY|COMPLETE
+coordinatedStatus=CALLISTOSITEREADY
+# optional: timestamp when will be ready (eg., 2006-05-02T20:50:00Z), or
+# project on which you're waiting (eg., TPTP)
+coordinatedDetails=
+
+# comma or space separated values
+dependencyURLs=http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/M20060919-1045/eclipse-SDK-M20060919-1045-linux-gtk.tar.gz
+
+# optional
+JUnitTestURL=http://www.eclipse.org/downloads/download.php?r=1&file=/tools/emf/downloads/drops/%%version%%/%%buildID%%/testResults.php
+performanceTestURL=
+APITestURL=
+
+# values to set for test results in quints of id,os,ws,arch,status,id,os,ws,arch,status,...
+JUnitTestResults=0,ALL,ALL,ALL,PASS
+performanceTestResults=
+APITestResults=
+
+# values to set for release bundles in quints of os,ws,arch,name/type,filename,os,ws,arch,name/type,filename...
+# only need the filename; the full http URL can be assembled from buildURL + "/download.php?dropFile=" + filename or buildURL (switched to ftp://) + "/" + filename
+# eg., ALL,ALL,ALL,SDK,emf-sdo-xsd-SDK-%%buildAlias%%.zip
+Releases=ALL,ALL,ALL,SDK,emf-sdo-xsd-SDK-%%buildAlias%%.zip
+
+########################################
+
+# options for publishing files - need either an scp target or a cvs root/path, or both
+# file (above) is required too
+
+# /path/to/cvs/executable
+cvsExec=/usr/bin/cvs
+# user@cvsServer:/path/to/cvs/root
+cvsRoot=nickb@dev.eclipse.org:/cvsroot/org.eclipse
+# cvs/module/path
+cvsPath=www/emf/feeds
+# /tmp/folder/path/for/checkout
+cvsTemp=/tmp/tmp-RSSFeedPublisherTask-emf-nickb
+
+# /path/to/scp/executable
+scpExec=/usr/bin/scp
+# user@server:/path/to/destination/folder/ - destination folder MUST ALREADY EXIST
+scpTarget=nickb@download1.eclipse.org:/home/data/httpd/download.eclipse.org/tools/emf/feeds/
+
+# optionally, if the target folder might not exist, you can use ssh to create it before scp'ing the file
+sshExec=/usr/bin/ssh
+
+# for local testing purposes only
+#cvsRoot=nickb@dbzi:/home/cvs
+#cvsPath=tmp/foo
+#scpTarget=nickb@dbzi:/tmp/foo/
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.uml2.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.uml2.properties
new file mode 100644
index 0000000..7ca324f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedPublish.uml2.properties
@@ -0,0 +1,94 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# properties for: RSSFeedCreateFeedTask.java, RSSFeedAddEntryTask.java, RSSFeedGetPropertyTask.java, RSSFeedUpdateEntryTask.java, RSSFeedPublisherTask.java
+
+# NOTE: if values are commented out (#), they must be passed in to Ant via commandline instead (eg., from emf's promoteToEclipse.sh when promoting a build)
+
+# one of 0|1|2
+debug=0
+
+# if file does not exist, it will be created; if it does, it will be modified
+#file=/var/www/modeling/mdt/feeds/builds-uml2-uml-2.1.xml
+file=../data/builds-uml2-uml-2.1.xml
+
+# required
+project=UML2
+branch=HEAD
+version=2.1.0
+buildID=I200611141702
+feedURL=http://download.eclipse.org/modeling/mdt/feeds/builds-uml2-uml-2.1.xml
+buildURL=http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml&showAll=1&hlbuild=%%buildID%%#%%buildID%%
+
+# optional build alias, like 2.0.1RC1
+buildAlias=
+
+# optional build type; one of: N, I, M, S, R; if not provided, will be pulled from buildID above
+buildType=
+
+# optional
+buildDetailURL=http://www.eclipse.org/downloads/download.php?r=1&file=/modeling/mdt/uml2-uml/downloads/drops/%%version%%/%%buildID%%/
+buildConfigURL=build.cfg
+buildLogURL=buildlog.txt
+buildMapURL=directory.txt
+
+# optional
+releaseNotesURL=http://www.eclipse.org/modeling/mdt/news/release-notes.php?project=uml2-uml&amp;version=%%version%%
+updateManagerURL=http://download.eclipse.org/modeling/mdt/updates/?project=uml2-uml
+downloadsURL=http://www.eclipse.org/modeling/mdt/downloads/?project=uml2-uml#uml2-uml
+
+# optional: one of NONE|UNSIGNED|SIGNREADY|BUILDREADY|SIGNED
+jarSigningStatus=
+
+# optional: one of NONE|BUILDCOMPLETE|UMSITEREADY|CALLISTOSITEREADY|COMPLETE
+coordinatedStatus=
+# optional: timestamp when will be ready (eg., 2006-05-02T20:50:00Z), or
+# project on which you're waiting (eg., TPTP)
+coordinatedDetails=
+
+# comma or space separated values
+dependencyURLs=http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/M20060919-1045/eclipse-SDK-M20060919-1045-linux-gtk.tar.gz http://www.eclipse.org/downloads/download.php?file=/tools/emf/downloads/drops/2.2.1/S200609210005/emf-sdo-xsd-SDK-2.2.1RC2.zip
+
+# optional
+JUnitTestURL=http://www.eclipse.org/downloads/download.php?r=1&file=/modeling/mdt/uml2-uml/downloads/drops/%%version%%/%%buildID%%/testResults.php
+performanceTestURL=
+APITestURL=
+
+# values to set for test results in quints of id,os,ws,arch,status,id,os,ws,arch,status,...
+JUnitTestResults=0,ALL,ALL,ALL,PASS
+performanceTestResults=
+APITestResults=
+
+# values to set for release bundles in quints of os,ws,arch,name/type,filename,os,ws,arch,name/type,filename...
+# only need the filename; the full http URL can be assembled from buildURL + "/download.php?dropFile=" + filename or buildURL (switched to ftp://) + "/" + filename
+# eg., ALL,ALL,ALL,SDK,uml2-SDK-%%buildAlias%%.zip
+Releases=ALL,ALL,ALL,SDK,uml2-SDK-%%buildAlias%%.zip
+
+########################################
+
+# options for publishing files - need either an scp target or a cvs root/path, or both
+# file (above) is required too
+
+# /path/to/cvs/executable
+cvsExec=/usr/bin/cvs
+# user@cvsServer:/path/to/cvs/root
+cvsRoot=khussey@dev.eclipse.org:/cvsroot/org.eclipse
+# cvs/module/path
+cvsPath=www/uml2/feeds
+# /tmp/folder/path/for/checkout
+cvsTemp=/tmp/RSSFeedPublisherTask-uml2-khussey
+
+# /path/to/scp/executable
+scpExec=/usr/bin/scp
+# user@server:/path/to/destination/folder/ - destination folder MUST ALREADY EXIST
+scpTarget=khussey@download1.eclipse.org:/home/data/httpd/download.eclipse.org/tools/uml2/feeds/
+
+# optionally, if the target folder might not exist, you can use ssh to create it before scp'ing the file - only runs if sshMakeDirCommand is defined
+sshExec=/usr/bin/ssh
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.emf.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.emf.properties
new file mode 100644
index 0000000..ad8f528
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.emf.properties
@@ -0,0 +1,96 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# properties for RSSFeedWatcherTask.java
+
+# one of 0|1|2
+debug=0
+
+# if file does not exist, it will be created; if it does, it will be modified
+file=../data/builds-eclipse-3.4.xml
+
+# required URL for the feed to check
+feedURL=http://download.eclipse.org/downloads/builds-eclipse.xml
+
+# Feed Watch Actions - must be defined as triplets of [xpath0]; [script0]; [commandline0]; [xpath1]; [script1]; [commandline1]; ...
+# must be separated by semi-colons. Line breaks are permitted for clarity and will be String.trim()'d
+feedWatchActions=\
+//*[name()='entry'][1]/*/*[name()='build']/@href;null;null;\
+//*[name()='entry'][1]/*/*[name()='build']/*[name()='releases']/*[@os='linux'][@ws='gtk'][@type='SDK']/text();null;null;\
+//*[name()='entry'][1]/*/*[name()='build']/@type;null;null;\
+
+# PASSING ANT TASK RESULTS TO EXTERNAL SCRIPT AS COMMANDLINE ARGUMENTS
+######################################################################
+
+# The <exec> task that is run within RSSFeedWatcherTask.java, eg.
+# <exec executable="/path/to/executable"><arg line="-somearg value -someotherarg anothervalue"/></exec>
+# will be passed some default commandline arguments BEFORE any you might want to specify as well (so that you can override them if you wish).
+
+# For example, if you have these properties set in this file:
+# debug=1
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; -debug 0
+# you will execute the following under the covers of the org.eclipse.releng.services.RSSFeedWatcherTask:
+# <exec executable="../scripts_rss/sendEmailAlert.sh">
+# <arg line="-debug 1 -feedURL http://www.eclipse.org/emf/feeds/builds.xml
+# -xpath "/*[name() = 'feed']/*[name() = 'updated']/text()"
+# -oldvalue "2006-05-04T12:14:33Z" -newvalue "2006-05-11T12:14:33Z" -debug 0"/>
+# </exec>
+
+# Therefore, you can use these values in the script that you execute (be it sending an email or starting a build or whatever).
+# If you do NOT want to pass arguments to your executable, use the word "null" instead. This will NOT be passed to your script.
+
+
+# CHECKING ANT TASK RESULTS WITHIN ANT SCRIPT
+#############################################
+
+# If you want to run some <exec> and then check the results of that execution, you can do so in the ant script that calls RSSFeedWatcherTask.
+# The following properties will be set after you run the task:
+
+# feedWatchAction.Result.0 - The result returned from the <exec> task; if set, something bad happened
+# feedWatchAction.Error.0 - Details about the error that occurred, if set, something bad happened
+# feedWatchAction.Output.0 - Console output from your <exec>, if any;
+# this will depend on what you run in response to a feed change, and if that process produces console output
+# feedWatchAction.OldValue.0 - The original value of the node you asked for, from the previous cached version of the feed
+# feedWatchAction.NewValue.0 - The changed value of the node you asked for, from the latest version of the feed;
+# if you asked for changes to the test status for performance tests, this could be "PASS";
+# if you asked for any changes to the feed, this will be the XML datestamp of the last update, eg: 2006-05-04T12:14:33Z
+#
+# If you are watching for more than one condition, you can check for feedWatchAction.Result.0, feedWatchAction.Result.1, feedWatchAction.Result.2, etc.
+
+
+# RUNNING NO EXTERNAL <exec>
+#############################################
+
+# If you only want to check for changes to the feed and handle the response yourself within Ant instead of an <exec>,
+# simply pass in the executable as "null" to prevent any shell execution from occurring. For example:
+
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); null; null
+
+# If the node is found and the feed has been changed, the property feedWatchAction.NewValue.0
+# (and/or feedWatchAction.NewValue.1, feedWatchAction.NewValue.2, etc.) will be set to the new changed value.
+
+
+# XPATH EXAMPLES - SAMPLE NODES TO WATCH FOR CHANGES
+####################################################
+
+# 1. to watch for ANY change in the feed, check the <feed>'s <updated> node (and respond with an email, passing -debug 1 to the mail script)
+# feedWatchActions=/*[name() = 'feed']/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; -debug 1
+
+# 2. to watch for ANY changes in the current build, check the first <entry>'s <updated> node (and respond with an email, no commandline flags)
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; null
+
+# 3a. to watch for coordinated status changes, check the first <entry>'s <build> node's coordinated="" attribute (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*/*[name() = 'coordinated']/@status; null; null
+
+# 3b. to watch for jar signing status changes, check the first <entry>'s <build> node's jars="" attribute (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*[name() = 'build']/@jars; null; null
+
+# 3c. to watch for changes in the current build's performance test results on linux-gtk (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*/*/*[@type = 'performance']/*[name() = 'result'][@os = 'linux'][@ws = 'gtk']/text(); null; null
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.uml2.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.uml2.properties
new file mode 100644
index 0000000..8f76d74
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/properties/feedWatch.uml2.properties
@@ -0,0 +1,93 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# properties for RSSFeedWatcherTask.java
+
+# one of 0|1|2
+debug=2
+
+# if file does not exist, it will be created; if it does, it will be modified
+file=../data/builds-emf-2.3.xml
+
+# required URL for the feed to check
+feedURL=http://www.eclipse.org/emf/feeds/builds-emf-2.3.xml
+
+# Feed Watch Actions - must be defined as triplets of [xpath0]; [script0]; [commandline0]; [xpath1]; [script1]; [commandline1]; ...
+# must be separated by semi-colons. Line breaks are permitted for clarity and will be String.trim()'d
+feedWatchActions=/*[name() = 'feed']/*[name() = 'updated']/text(); null; null
+
+# PASSING ANT TASK RESULTS TO EXTERNAL SCRIPT AS COMMANDLINE ARGUMENTS
+######################################################################
+
+# The <exec> task that is run within RSSFeedWatcherTask.java, eg.
+# <exec executable="/path/to/executable"><arg line="-somearg value -someotherarg anothervalue"/></exec>
+# will be passed some default commandline arguments BEFORE any you might want to specify as well (so that you can override them if you wish).
+
+# For example, if you have these properties set in this file:
+# debug=1
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; -debug 0
+# you will execute the following under the covers of the org.eclipse.releng.services.RSSFeedWatcherTask:
+# <exec executable="../scripts_rss/sendEmailAlert.sh">
+# <arg line="-debug 1 -feedURL http://www.eclipse.org/emf/feeds/builds.xml
+# -xpath "/*[name() = 'feed']/*[name() = 'updated']/text()"
+# -oldvalue "2006-05-04T12:14:33Z" -newvalue "2006-05-11T12:14:33Z" -debug 0"/>
+# </exec>
+
+# Therefore, you can use these values in the script that you execute (be it sending an email or starting a build or whatever).
+# If you do NOT want to pass arguments to your executable, use the word "null" instead. This will NOT be passed to your script.
+
+
+# CHECKING ANT TASK RESULTS WITHIN ANT SCRIPT
+#############################################
+
+# If you want to run some <exec> and then check the results of that execution, you can do so in the ant script that calls RSSFeedWatcherTask.
+# The following properties will be set after you run the task:
+
+# feedWatchAction.Result.0 - The result returned from the <exec> task; if set, something bad happened
+# feedWatchAction.Error.0 - Details about the error that occurred, if set, something bad happened
+# feedWatchAction.Output.0 - Console output from your <exec>, if any;
+# this will depend on what you run in response to a feed change, and if that process produces console output
+# feedWatchAction.OldValue.0 - The original value of the node you asked for, from the previous cached version of the feed
+# feedWatchAction.NewValue.0 - The changed value of the node you asked for, from the latest version of the feed;
+# if you asked for changes to the test status for performance tests, this could be "PASS";
+# if you asked for any changes to the feed, this will be the XML datestamp of the last update, eg: 2006-05-04T12:14:33Z
+#
+# If you are watching for more than one condition, you can check for feedWatchAction.Result.0, feedWatchAction.Result.1, feedWatchAction.Result.2, etc.
+
+
+# RUNNING NO EXTERNAL <exec>
+#############################################
+
+# If you only want to check for changes to the feed and handle the response yourself within Ant instead of an <exec>,
+# simply pass in the executable as "null" to prevent any shell execution from occurring. For example:
+
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); null; null
+
+# If the node is found and the feed has been changed, the property feedWatchAction.NewValue.0
+# (and/or feedWatchAction.NewValue.1, feedWatchAction.NewValue.2, etc.) will be set to the new changed value.
+
+
+## XPATH EXAMPLES - SAMPLE NODES TO WATCH FOR CHANGES
+####################################################
+
+# 1. to watch for ANY change in the feed, check the <feed>'s <updated> node (and respond with an email, passing -debug 1 to the mail script)
+# feedWatchActions=/*[name() = 'feed']/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; -debug 1
+
+# 2. to watch for ANY changes in the current build, check the first <entry>'s <updated> node (and respond with an email, no commandline flags)
+# feedWatchActions=//*[name() = 'entry'][1]/*[name() = 'updated']/text(); ../scripts_rss/sendEmailAlert.sh; null
+
+# 3a. to watch for coordinated status changes, check the first <entry>'s <build> node's coordinated="" attribute (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*/*[name() = 'coordinated']/@status; null; null
+
+# 3b. to watch for jar signing status changes, check the first <entry>'s <build> node's jars="" attribute (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*[name() = 'build']/@jars; null; null
+
+# 3c. to watch for changes in the current build's performance test results on linux-gtk (and respond using some custom Ant script)
+# feedWatchActions=//*[name() = 'entry'][1]/*/*/*/*[@type = 'performance']/*[name() = 'result'][@os = 'linux'][@ws = 'gtk']/text(); null; null
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/_README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/_README.txt
new file mode 100644
index 0000000..8da3676
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/_README.txt
@@ -0,0 +1,2 @@
+These files are for reference, but are not required to run the
+Ant scripts + tasks. \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/atom10_build.xsd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/atom10_build.xsd
new file mode 100644
index 0000000..93b3ed5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/atom10_build.xsd
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:atom="http://www.w3.org/2005/Atom" xmlns:bf="http://www.eclipse.org/2006/BuildFeed" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2005/Atom">
+ <xsd:import namespace="http://www.eclipse.org/2006/BuildFeed" schemaLocation="build.xsd"/>
+ <xsd:element name="feed">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="atom:title"/>
+ <xsd:element ref="atom:link"/>
+ <xsd:element ref="atom:updated"/>
+ <xsd:element ref="atom:author"/>
+ <xsd:element ref="atom:id"/>
+ <xsd:element maxOccurs="unbounded" ref="atom:entry"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="author">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="atom:name"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="entry">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="atom:title"/>
+ <xsd:element ref="atom:link"/>
+ <xsd:element ref="atom:id"/>
+ <xsd:element ref="atom:updated"/>
+ <xsd:element ref="atom:summary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="summary">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element maxOccurs="1" minOccurs="1" ref="bf:build"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="title" type="xsd:string"/>
+ <xsd:element name="link">
+ <xsd:complexType>
+ <xsd:attribute name="href" type="xsd:anyURI" use="required"/>
+ <xsd:attribute name="rel" type="xsd:NCName"/>
+ <xsd:attribute name="type"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="updated" type="xsd:dateTime"/>
+ <xsd:element name="id" type="xsd:anyURI"/>
+</xsd:schema>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/build.xsd b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/build.xsd
new file mode 100644
index 0000000..fc5e9d3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/schema/build.xsd
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.eclipse.org/2006/BuildFeed" elementFormDefault="qualified" targetNamespace="http://www.eclipse.org/2006/BuildFeed">
+
+ <xs:element name="build">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" ref="detail"/>
+ <xs:element maxOccurs="1" minOccurs="0" ref="update"/>
+ <xs:element maxOccurs="1" minOccurs="0" ref="downloads"/>
+ <xs:element maxOccurs="1" minOccurs="0" ref="releasenotes"/>
+
+ <xs:element maxOccurs="1" minOccurs="0" ref="releases"/>
+
+ <xs:element maxOccurs="1" minOccurs="0" ref="tests"/>
+
+ <xs:element maxOccurs="1" minOccurs="0" ref="dependencies"/>
+ <xs:element maxOccurs="1" minOccurs="0" ref="coordinated"/>
+ </xs:sequence>
+ <xs:attribute name="version" type="buildVersion" use="required"/>
+ <xs:attribute name="type" type="enumBuildType" use="required"/>
+ <xs:attribute name="datetime" type="buildDatetime" use="required"/>
+ <xs:attribute name="href" type="xs:anyURI" use="required"/>
+ <xs:attribute name="branch" type="xs:token" use="optional"/>
+ <xs:attribute name="jars" type="enumJarSigningStatus" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="detail">
+ <xs:complexType>
+ <xs:attribute name="href" type="xs:anyURI" use="required"/>
+ <xs:attribute name="config" type="xs:token" use="optional"/>
+ <xs:attribute name="log" type="xs:token" use="optional"/>
+ <xs:attribute name="map" type="xs:token" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="update" type="xs:anyURI"/>
+ <xs:element name="downloads" type="xs:anyURI"/>
+ <xs:element name="releasenotes" type="xs:anyURI"/>
+
+ <xs:element name="releases">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="1" ref="release"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="release">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:anyURI">
+ <xs:attribute name="os" type="enumOS" use="required"/>
+ <xs:attribute name="ws" type="enumWS" use="required"/>
+ <xs:attribute name="arch" type="enumArch" use="optional"/>
+ <xs:attribute name="type" type="enumReleaseType" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tests">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="1" ref="test"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="test">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="1" ref="result"/>
+ </xs:sequence>
+ <xs:attribute name="href" type="xs:anyURI" use="optional"/>
+ <xs:attribute name="type" type="enumTestType" use="required"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="result">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="enumTestStatus">
+ <xs:attribute name="id" type="xs:token" use="optional"/>
+ <xs:attribute name="os" type="enumOS" use="required"/>
+ <xs:attribute name="ws" type="enumWS" use="required"/>
+ <xs:attribute name="arch" type="enumArch" use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dependencies">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="1" ref="dependency"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dependency" type="xs:anyURI"/>
+
+ <xs:element name="coordinated">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="status" type="enumCoordinatedStatus" use="optional"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="enumBuildType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="N"/>
+ <xs:enumeration value="I"/>
+ <xs:enumeration value="M"/>
+ <xs:enumeration value="S"/>
+ <xs:enumeration value="R"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumTestType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="junit"/>
+ <xs:enumeration value="performance"/>
+ <xs:enumeration value="api"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumJarSigningStatus">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value=""/>
+ <xs:enumeration value="NONE"/>
+ <xs:enumeration value="UNSIGNED"/>
+ <xs:enumeration value="SIGNREADY"/>
+ <xs:enumeration value="BUILDREADY"/>
+ <xs:enumeration value="SIGNED"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumCoordinatedStatus">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value=""/>
+ <xs:enumeration value="NONE"/>
+ <xs:enumeration value="BUILDCOMPLETE"/>
+ <xs:enumeration value="UMSITEREADY"/>
+ <xs:enumeration value="CALLISTOSITEREADY"/>
+ <xs:enumeration value="COMPLETE"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumTestStatus">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value=""/>
+ <xs:enumeration value="PASS"/>
+ <xs:enumeration value="PENDING"/>
+ <xs:enumeration value="FAIL"/>
+ <xs:enumeration value="AVAILABLE"/>
+ <xs:enumeration value="SKIPPED"/>
+ <xs:enumeration value="UNKNOWN"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumOS">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="aix"/>
+ <xs:enumeration value="hp-ux"/>
+ <xs:enumeration value="linux"/>
+ <xs:enumeration value="macosx"/>
+ <xs:enumeration value="qnx"/>
+ <xs:enumeration value="solaris8"/>
+ <xs:enumeration value="wce"/>
+ <xs:enumeration value="win32"/>
+ <xs:enumeration value="ALL"/>
+ <xs:enumeration value="OTHER"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumWS">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="carbon"/>
+ <xs:enumeration value="gtk"/>
+ <xs:enumeration value="motif"/>
+ <xs:enumeration value="photon"/>
+ <xs:enumeration value="win"/>
+ <xs:enumeration value="ALL"/>
+ <xs:enumeration value="OTHER"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumArch">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="arm"/>
+ <xs:enumeration value="hp9000"/>
+ <xs:enumeration value="ppc"/>
+ <xs:enumeration value="sparc"/>
+ <xs:enumeration value="x86"/>
+ <xs:enumeration value="x86_64"/>
+ <xs:enumeration value="ALL"/>
+ <xs:enumeration value="OTHER"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="enumReleaseType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="SDK"/>
+ <xs:enumeration value="runtime"/>
+ <xs:enumeration value="tests"/>
+ <xs:enumeration value="examples"/>
+ <xs:enumeration value="OTHER"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="buildDatetime">
+ <xs:restriction base="xs:token">
+ <xs:pattern value="\d{8}-{0,1}\d{0,4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="buildVersion">
+ <xs:restriction base="xs:token">
+ <xs:pattern value="\d{1,2}.\d{1,2}.\d{1,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+</xs:schema>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/customTest.xml.template b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/customTest.xml.template
new file mode 100644
index 0000000..bda5df2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/customTest.xml.template
@@ -0,0 +1,16 @@
+<project name="Customized testing instructions" default="customSetup">
+
+<!--All properties here are set in test.properties, with the exception of ${tester}-->
+ <target name="customSetup">
+ <!--copy the script which sets up environment and invokes the tests on test machine-->
+ <exec dir="." executable="${copyClient}">
+ <arg line="${tester}/testAll.bat ${testMachine}:${executionDir}" />
+ </exec>
+
+ <!--copy in the properties file for testing with alternate vm args-->
+ <exec dir="." executable="${copyClient}">
+ <arg line="${tester}/vm.properties ${testMachine}:${executionDir}" />
+ </exec>
+ </target>
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/publish.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/publish.xml
new file mode 100644
index 0000000..11e9751
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/publish.xml
@@ -0,0 +1,179 @@
+<project name="Publish Build" default="default">
+
+<!-- Properties that must be passed to this script:
+ buildDirectory: Path to perform the build in. (A working directory)
+ buildType: Type of build (nightly, integration etc.)
+ buildId: Build name
+ buildLabel: <buildType>-<buildName>-<timestamp>
+-->
+<property name="result" value="${buildDirectory}/${buildLabel}" />
+
+<!--name of generated index page-->
+<property name="indexFileName" value="index.html" />
+
+<target name="default">
+ <antcall target="countFiles" />
+ <antcall target="generateIndex" />
+ <antcall target="getStaticFiles" />
+</target>
+
+<target name="generateIndex">
+
+ <property name="class" value="org.eclipse.releng.generators.TestResultsGenerator" />
+ <taskdef name="indexResults" classname="${class}" />
+
+<!--
+ isBuildTested: true|false should JUnit plugin test results be used to generate index page
+ dropTokenList: comma separated list of strings which should be replaced by the fileName attribute settings in the testManifest.xml.
+ xmlDirectoryName: path to directory containing JUnit plugin test results in xml format (see doc is org.eclipse.test).
+ dropDirectoryName: path to directory containing the result of the build.
+ testResultsTemplateFileName: path to template file used to generate page with links to JUnit test results
+ testResultsHtmlFileName: name of file which will be generated with links to JUnit test results
+ dropHtmlFileName: name of generated index page
+ hrefTestResultsTargetPath: relative path from index page to directory containing JUnit html test results
+ hrefCompileLogsTargetPath: relative path from index page directory containing compilelogs
+ testManifestFileName: name of xml file containing descriptions of zip types and log files
+
+
+
+-->
+
+ <property name="xmlDirectoryName" value="${result}/testresults/xml" />
+ <property name="dropDirectoryName" value="${result}" />
+ <property name="testResultsTemplateFileName" value="${basedir}/templateFiles/testResults.php.template" />
+ <property name="dropTemplateFileName" value="${basedir}/templateFiles/index.html.template" />
+ <property name="testResultsHtmlFileName" value="testResults.php" />
+ <property name="hrefTestResultsTargetPath" value="testresults/html" />
+ <property name="hrefCompileLogsTargetPath" value="compilelogs" />
+ <property name="compileLogsDirectoryName" value="${result}/compilelogs" />
+ <property name="testManifestFileName" value="${basedir}/testManifest.xml" />
+
+
+ <indexResults
+ isBuildTested="${isBuildTested}"
+ buildType="${buildType}"
+ dropTokenList="${dropTokenList}"
+ platformIdentifierToken="${platformIdentifierToken}"
+ platformSpecificTemplateList="${platformSpecificTemplateList}"
+ dropHtmlFileName="${indexFileName}"
+ xmlDirectoryName="${xmlDirectoryName}"
+ dropDirectoryName="${dropDirectoryName}"
+ testResultsTemplateFileName="${testResultsTemplateFileName}"
+ dropTemplateFileName="${dropTemplateFileName}"
+ testResultsHtmlFileName="${testResultsHtmlFileName}"
+ hrefTestResultsTargetPath="${hrefTestResultsTargetPath}"
+ hrefCompileLogsTargetPath="${hrefCompileLogsTargetPath}"
+ compileLogsDirectoryName="${compileLogsDirectoryName}"
+ testManifestFileName="${testManifestFileName}"
+ />
+
+ <tstamp>
+ <format property="TODAY" pattern="MMMM d, yyyy"/>
+ </tstamp>
+
+ <!-- Insert Build Type descriptor -->
+ <antcall target="${buildType}" />
+
+ <!-- Insert Build Date -->
+ <replace file="${result}/${indexFileName}" token="@date@" value="${TODAY}"/>
+ <replace dir="${result}" value="${TODAY}">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@date@]]></replacetoken>
+ </replace>
+
+ <!-- Insert Build Name -->
+ <replace file="${result}/${indexFileName}" token="@build@" value="${buildId}"/>
+ <replace dir="${result}" value="${buildId}">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@build@]]></replacetoken>
+ </replace>
+
+
+ <!-- Update timestamp on file to permit overwrite through Ant copy task -->
+ <touch file="${result}/${indexFileName}" />
+ <touch>
+ <fileset dir="${result}">
+ <include name="**/*.php"/>
+ </fileset>
+ </touch>
+
+</target>
+
+
+<target name="getStaticFiles">
+ <!--get static files required in the buildLabel directory-->
+ <copy todir="${result}">
+ <fileset dir="staticDropFiles" />
+ </copy>
+
+ <!--copy buildnotes from plugin directories-->
+ <mkdir dir="${result}/buildnotes" />
+ <copy todir="${result}/buildnotes" flatten="true">
+ <fileset dir="${buildDirectory}/plugins" includes="**/buildnotes_*.html" />
+ </copy>
+</target>
+
+<target name="countFiles">
+<!-- files.count is a file that should exist in the drop directory with a count of the zip files in the same directory.
+ It is required to generate a link to the build on the downloads page.
+ -->
+ <taskdef name="countFiles" classname="org.eclipse.releng.generators.FileCounter" />
+
+ <countFiles
+ sourceDirectory="${result}"
+ filterString=".zip,.tar.gz"
+ outputFile="${result}/files.count"
+ />
+
+</target>
+
+<!--Build type descriptors-->
+<target name="I">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Integration"/>
+ <replace dir="${result}" value="Integration">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+<target name="N">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Nightly"/>
+ <replace dir="${result}" value="Nightly">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+<target name="M">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Maintenance"/>
+ <replace dir="${result}" value="Maintenance">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+<target name="R">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Release"/>
+ <replace dir="${result}" value="Release">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+<target name="S">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Stable"/>
+ <replace dir="${result}" value="Stable">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+<target name="T">
+ <replace file="${result}/${indexFileName}" token="@type@" value="Test"/>
+ <replace dir="${result}" value="Test">
+ <include name="**/*.php"/>
+ <replacetoken><![CDATA[@type@]]></replacetoken>
+ </replace>
+</target>
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/test.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/test.xml
new file mode 100644
index 0000000..81762df
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/test.xml
@@ -0,0 +1,145 @@
+<project name="Targets to run Automated Tests Locally and Remotely" default="main" basedir=".">
+
+<!--
+This script must be called with the ${tester} property set.
+
+The testing.properties file must contain definitions for all other properties in this script if they are not
+set in a calling script or command line. See test.properties.template for property descriptions.
+-->
+
+<property name="customTest" value="${tester}/customTest.xml" />
+<property name="testing.properties" value="${tester}/testing.properties" />
+<property file="${testing.properties}" />
+<property name="dropLocation" value="${buildDirectory}" />
+
+<target name="main">
+ <antcall target="${testTarget}" />
+</target>
+
+<!--
+Targets for setting up and running tests remotely
+It is assumed that keys are set up on test machines to permit connections without user name and password prompts.
+-->
+<target name="runtests-remote" depends="setRemoteLoginClient,setRemoteCopyClient">
+ <property name="testResults" value="${dropLocation}/${buildLabel}/testresults" />
+
+ <exec dir="." executable="${loginClient}">
+ <arg line="${testMachine} mkdir ${testDir}" />
+ </exec>
+
+ <!--install the vm used for testing-->
+ <antcall target="installVmForRemote" />
+
+ <!--set up the automated testing framework-->
+ <exec dir="." executable="${copyClient}">
+ <arg line="${dropLocation}/${buildLabel}/${testFramework} ${testMachine}:${testDir}" />
+ </exec>
+ <exec dir="." executable="${loginClient}">
+ <arg line="${testMachine} unzip -o -qq ${testDir}/${testFramework} -d ${testDir}" />
+ </exec>
+ <exec dir="." executable="${copyClient}">
+ <arg line="${dropLocation}/${buildLabel}/${runtime} ${testMachine}:${executionDir}" />
+ </exec>
+
+ <!--callback to custom script for post setup-->
+ <ant antfile="${customTest}" target="customSetup" dir="${basedir}"/>
+
+ <exec dir="." executable="${loginClient}">
+ <arg line="${testMachine} ${testScript} ${args}" />
+ </exec>
+
+ <!--${testResults} and ${testResults}/consolelogs must exist before rcp and scp copy operations.
+ Directories contents are copied flattened if the destination directories don't exist.-->
+ <mkdir dir="${testResults}/consolelogs" />
+
+ <exec dir="." executable="${copyClient}">
+ <arg line="-r ${testMachine}:${executionDir}/results/* ${testResults}"/>
+ </exec>
+ <!-- copy the console log from testing -->
+ <exec dir="." executable="${copyClient}">
+ <arg line="-r ${testMachine}:${executionDir}/${consolelog} ${testResults}/consolelogs"/>
+ </exec>
+</target>
+
+<target name="setRemoteLoginClient">
+ <!--use rsh if rsh is set, otherwise use default, ssh-->
+ <condition property="loginClient" value="rsh">
+ <isset property="rsh" />
+ </condition>
+ <!--default remote login client-->
+ <property name="loginClient" value="ssh" />
+</target>
+
+<target name="setRemoteCopyClient">
+ <!--use rcp if rsh is set, otherwise use default, scp-->
+ <condition property="copyClient" value="rcp">
+ <isset property="rsh" />
+ </condition>
+ <!--default remote copy client-->
+ <property name="copyClient" value="scp" />
+</target>
+
+<target name="installVmForRemote" unless="skipVmInstall">
+ <available file="${vmDest}" property="vmExists" />
+ <antcall target="getVM" />
+
+ <exec dir="." executable="${copyClient}">
+ <arg line="${vmDest} ${testMachine}:${testDir}" />
+ </exec>
+
+ <exec dir="." executable="${loginClient}">
+ <arg line="${testMachine} ${vmInstallCommand}" />
+ </exec>
+</target>
+
+
+<!--
+
+Targets for setting up and running tests locally
+
+-->
+<target name="runtests-local">
+ <delete dir="${testDir}" quiet="true"/>
+ <mkdir dir="${testDir}" />
+ <property name="testResults" value="${dropLocation}/${buildLabel}/testresults" />
+
+ <!--set up testing directory-->
+ <unzip src="${dropLocation}/${buildLabel}/${testFramework}" dest="${testDir}" />
+
+ <!--install the vm used for testing-->
+ <antcall target="installVmForLocal" />
+
+ <!--copy in the runtime to test-->
+ <copy todir="${executionDir}" file="${dropLocation}/${buildLabel}/${runtime}" />
+
+ <!--callback to custom script for additional setup-->
+ <ant antfile="${customTest}" target="customSetup" dir="${basedir}" />
+
+ <!--run the tests-->
+ <exec dir="${executionDir}" executable="${testExecutable}">
+ <arg line="${args}" />
+ </exec>
+
+ <mkdir dir="${testResults}" />
+ <mkdir dir="${testResults}/consolelogs" />
+
+ <copy todir="${testResults}">
+ <fileset dir="${executionDir}/results" />
+ </copy>
+
+ <copy todir="${testResults}/consolelogs" file="${executionDir}/${consolelog}" />
+</target>
+
+<target name="installVmForLocal" unless="skipVmInstall">
+ <available file="${vmDest}" property="vmExists" />
+ <antcall target="getVM" />
+ <exec dir="${testDir}" executable="${vmInstallExecutable}">
+ <arg line="${vmInstallCommand}" />
+ </exec>
+</target>
+
+<target name="getVM" unless="vmExists">
+ <get src="${vmUrl}" dest="${vmDest}" usetimestamp="true"/>
+</target>
+
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/testing.properties.template b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/testing.properties.template
new file mode 100644
index 0000000..be43605
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts/testing.properties.template
@@ -0,0 +1,52 @@
+###############################################################################
+# Copyright (c) 2004, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+#target to call in test.xml: runtests-local | runtests-remote
+testTarget=runtests-remote
+
+#use rsh as protocol for login and copying files.
+rsh=true
+
+#directory on test machine where automated testing framework will be installed. ${buildLabel}
+#set by calling script
+testDir=c:\\buildtest\\${buildLabel}
+
+#name of zip file containing automated testing framework and JUnit test plug-ins
+testFramework=eclipse-Automated-Tests-${buildId}.zip
+
+#name of runtime to install and test
+runtime=eclipse-SDK-${buildId}-win32.zip
+
+#directory where test scripts are launched
+executionDir=${testDir}\\eclipse-testing
+
+#name of file that captures console output from running JUnit plug-in tests
+consolelog=win32_consolelog.txt
+
+#name of script to execute on remote machine
+testScript=start /min ${executionDir}\\testAll.bat
+
+#arguments to $(testScript)
+args=${executionDir} win32_consolelog.txt
+
+#name and path to downloaded vm.
+vmDest=jdk-1_4_2_14-fcs-bin-b03-windows-i586-22_jan_2007.zip
+
+#cvsroot
+cvsRoot=:pserver:anonymous@ottcvs1:/home/cvs/releng
+
+#path to tar.gz or zip of vm used to run tests
+vmDest=jdks/${vmDest}
+
+#command to execute to install the vm
+vmInstallCommand="unzip -o -qq ${testDir}\\${vmDest} -d ${testDir}"
+
+#skip default vm installation
+#skipVmInstall=true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/_README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/_README.txt
new file mode 100644
index 0000000..760c397
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/_README.txt
@@ -0,0 +1,15 @@
+UpdateBugStateTask is an ant task used for updating the status of 1 or
+more bugs that have been resolved with a particular build of any Eclipse
+project. It can also be used for updating a specified list of bugs which
+are all in a specific state.
+
+Before you can use this tool, you must run the UpdateBugStateTask.sh script
+to generate a Bugzilla login session. This should take less than a minute,
+and is a one time thing (although it is possible that the Bugzilla server
+will clear the stored sessions, in this case simply run the
+UpdateBugStateTask.sh script again).
+
+UpdateBugStateTask requires JDK 1.4 or greater.
+
+See the sample UpdateBugStateTask.xml build script for a full list and
+description of the task options.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/bugzillaLogin.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/bugzillaLogin.sh
new file mode 100644
index 0000000..9edd9f5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/bugzillaLogin.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+echo -n "Bugzilla login or email address: "
+read LOGIN
+echo -n "Bugzilla password: "
+stty -echo
+read PW
+stty echo
+echo
+echo "Logging in and fetching cookie values..."
+echo
+
+#older versions of curl (like the one on emf) don't have -k
+OUT=$(curl -k 2>&1| grep unknown)
+if [[ $OUT ]];
+then
+ CURLARG=""
+else
+ CURLARG="-k"
+fi
+HEADERS=$(mktemp)
+curl -s -S $CURLARG 'https://bugs.eclipse.org/bugs/index.cgi' -d "GoAheadAndLogIn=1&Bugzilla_login=$LOGIN&Bugzilla_password=$PW" -D $HEADERS >/dev/null
+PW="$RANDOM $RANDOM $RANDOM $RANDOM"
+VALUES=$(grep Set-Cookie $HEADERS | sed -e 's/.\{1,\}Bugzilla_\(login\(cookie\)\?=[0-9]\{1,\}\).\{1,\}/\1/')
+rm -fr $HEADERS
+
+if [[ $VALUES ]];
+then
+ #alternatively, you can do ./UpdateBugStateTask.sh 2>../properties/UpdateBugStateTask.properties
+ echo "Paste the following into UpdateBugStateTask.properties:"
+ echo "---- 8< ---- cut here ---- 8< ----"
+ echo ""
+ if [[ -e /proc/self/fd/2 ]];
+ then
+ echo "$VALUES" >/proc/self/fd/2
+ else
+ echo "$VALUES"
+ fi
+ echo ""
+ echo "---- 8< ---- cut here ---- 8< ----"
+else
+ echo "Bugzilla didn't send us any cookie values, this means that either:"
+ echo " - you mistyped your login/password"
+ echo " - you can't reach Bugzilla for some reason"
+ echo
+ echo "Make sure that you can reach <https://bugs.eclipse.org/bugs/index.cgi> and try again."
+fi
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.sh
new file mode 100644
index 0000000..0e395b8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+$ANT_HOME/bin/ant -f buildBugToolsJar.xml;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.xml
new file mode 100644
index 0000000..1d1f63e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsJar.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+
+<project name="Build bugTools.jar" default="buildBugToolsJar" basedir="../">
+ <target name="buildBugToolsJar">
+ <echo message="Compiling bugTools ..."/>
+ <delete file="bugTools.jar"/>
+ <delete dir="bin/"/>
+ <mkdir dir="bin"/>
+ <javac
+ source="1.4"
+ target="1.4"
+ srcdir="."
+ destdir="bin/"
+ classpath="../org.eclipse.releng.basebuilder/plugins/org.apache.ant_1.6.5/lib/ant.jar"
+ includes="src_bugzilla/**/*.java, src_bugzilla/**/messages.properties"/>
+ <echo message="Jarring bugTools.jar ..."/>
+ <jar
+ destfile="bugTools.jar"
+ includes="**/*.class"
+ basedir="bin"
+ update="true"/>
+ <jar
+ destfile="bugTools.jar"
+ includes="**/messages.properties"
+ basedir="src_bugzilla"
+ update="true"/>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.sh
new file mode 100644
index 0000000..45fe1f9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+$ANT_HOME/bin/ant -f buildBugToolsZip.xml;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.xml
new file mode 100644
index 0000000..918e2e6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/buildBugToolsZip.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+
+<project name="Build bugTools.zip" default="buildBugToolsZip" basedir="../">
+ <target name="buildBugToolsZip">
+ <property name="zipfile" value="org.eclipse.build.tools_bugTools.zip"/>
+ <ant antfile="scripts_bugzilla/buildBugToolsJar.xml" target="buildBugToolsJar" inheritall="true"/>
+ <echo message="Bundling ${zipfile} ..."/>
+ <delete file="${zipfile}"/>
+ <zip
+ destfile="${zipfile}"
+ includes=".classpath, .project,
+ bugTools.jar,
+ src_bugzilla/**/*,
+ scripts_bugzilla/*,
+ properties/UpdateBugStateTask.properties"
+ basedir="."
+ update="true"/>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.sh
new file mode 100644
index 0000000..e0411f4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-1.4;
+export ANT_HOME=/opt/apache-ant-1.6;
+
+#aasemble the command and its classpath
+CLASSPATH="$JAVA_HOME/lib/rt.jar";
+# note that com.sun.org.apache.xerces (Sun JDK 1.5, rt.jar) != org.apache.xerces (Ant 1.6.5, xercesImpl.jar) so must remove from classpath
+#for f in `find $ANT_HOME/lib -maxdepth 1 -name "*.jar" -type f -not -name "xercesImpl.jar"`; do CLASSPATH=$CLASSPATH":"$f; done
+CLASSPATH=$CLASSPATH":"$ANT_HOME/lib/ant.jar":"$ANT_HOME/lib/ant-launcher.jar;
+cmd="$JAVA_HOME/bin/java \
+ -Dant.home=$ANT_HOME \
+ -Dant.library.dir=$JAVA_HOME/lib \
+ -classpath $CLASSPATH:../bugTools.jar \
+ org.apache.tools.ant.launch.Launcher \
+ -buildfile updateBugState.xml";
+
+if [[ $debug -gt 0 ]]; then
+ echo "Running ..."; echo ""; echo $cmd | sed -e "s/ \-/# \-/g" -e "s/:/# :/g" | tr "#" "\n"; echo "";
+fi
+
+# run the command
+$cmd;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.xml
new file mode 100644
index 0000000..b26b905
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_bugzilla/updateBugState.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0"?>
+
+<project name="Update Bug State" default="updateBugState">
+
+ <taskdef name="UpdateBugState"
+ classname="org.eclipse.releng.services.bugzilla.UpdateBugStateTask"
+ classpath="../bugTools.jar"/>
+
+ <!-- 1. Define property file -->
+ <target name="init">
+ <property file="../properties/UpdateBugStateTask.properties"/>
+ </target>
+
+ <!-- 2. Update Bugzilla state for specific criteria -->
+ <target name="updateBugState" depends="init" description="Update Bugzilla state for specific criteria">
+ <!--
+ UpdateBugStateTask takes a few parameters, some are required and some are optional, see below.
+ milestone, product and resolution correspond to the Bugzilla items of the same name
+
+ login - required, your userid for Bugzilla (can be generated by UpdateBugStateTask.sh)
+
+ logincookie - required, your logincookie for Bugzilla (can be generated by UpdateBugStateTask.sh)
+
+ status - required, only query for bugs in this state
+ one of UNCONFIRMED, NEW, ASSIGNED, or REOPENED
+
+ bugList - optional, specify the list of bugs to update
+ a non-digit (space, comma, semicolon, etc) delimited list of integers corresponding to Bugzilla bugIDs
+ if you specify this, you cannot specify milestone or product
+
+ product - required (if no bugList), only query for bugs on this product
+ this cargument annot be combined with bugList
+
+ buildAlias - optional label, the task adds a comment to Bugzilla of the form
+ "Fixed in $buildAlias ($buildID).", otherwise uses buildID or just "Fixed in latest build."
+
+ buildID - optional label, the task adds a comment to Bugzilla of the form
+ "Fixed in $buildAlias ($buildID).", otherwise uses buildAlias or just "Fixed in latest build."
+ of the format YYYYMMDDHHMM, [IMNRS]YYYYMMDDHHMM, [IMNRS]-YYYYMMDDHHMM
+ YYYYMMDD-HHMM, [IMNRS]YYYYMMDD-HHMM, or [IMNRS]-YYYYMMDD-HHMM
+
+ endDate - optional, only query for bugs last updated before this timestamp
+ (that is, bugs after this timestamp will be ignored). Must be in the form yyyymmddHHMM or yyyymmdd0000.
+ this argument cannot be combined with bugList
+
+ milestone - optional, only query for bugs that have this milestone
+ this argument cannot be combined with bugList
+
+ resolution - optional, this is what the bug's new state will be
+ one of FIXED, INVALID, WONTFIX, LATER, REMIND, or WORKSFORME (default: FIXED)
+
+ debug - optional, use this to control task verbosity
+ 0 - only print a message if the task needs to abort
+ 1 - show progress (and errors, if any) (default)
+ 2 - maximum verbosity, probably only useful if something goes wrong
+ values < 0 are equivalent to 0
+ values > 2 are equivalent to 2
+
+ Examples: -->
+
+ <!--
+ 1. find all bugs last updated before 2006/06/01 17:38 from product EMF in the ASSIGNED state;
+ move to FIXED using buildID S200606051102 and buildAlias 2.2.0RC7. Comment will be:
+ "Fixed in 2.2.0RC7 (S200606051102)."
+ -->
+ <UpdateBugState login="${login}" logincookie="${logincookie}"
+ status="ASSIGNED" product="EMF" endDate="200606011738"
+ resolution="FIXED" buildID="S200606051102" buildAlias="2.2.0RC7"
+ />
+
+ <!--
+ 2. find all bugs from product EMF targetted for milestone "2.2" which are in the ASSIGNED state;
+ move to FIXED. Comment will be:
+ "Fixed in latest build."
+ -->
+ <UpdateBugState debug="2" login="${login}" logincookie="${logincookie}"
+ status="ASSIGNED" product="EMF"
+ resolution="FIXED" milestone="2.2"
+ />
+
+ <!--
+ 3. find all bugs in given list (131811 144877 144890 144989) which are still in the ASSIGNED state
+ (to avoid duplicate updates); move to FIXED using buildID I200606051102. Comment will be:
+ "Fixed in I200606051102."
+ -->
+ <UpdateBugState login="${login}" logincookie="${logincookie}"
+ status="ASSIGNED" bugList="131811 144877 144890 144989"
+ resolution="FIXED" buildID="S200606051102"
+ />
+
+ </target>
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.mysql.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.mysql.txt
new file mode 100644
index 0000000..865ed36
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.mysql.txt
@@ -0,0 +1,25 @@
+Search CVS is a tool for converting cvs commits into a mysql database, which
+can be updated without worry of data duplication. The database is then searchable
+via a web page run on www.eclipse.org.
+
+MySQL Server Quick Setup:
+
+1. Extract the searchcvs/ folder from cvs and place it in your $HOME folder
+on some server running MySQL 5 and PHP 4 or 5 with the MySQL module for MySQL 5 compiled in.
+
+2. Customize setup.sh for your needs and run it to extract your code from cvs.
+
+3. Load database tables using .dump files provided.
+
+4. Edit includes/parsecvs-dbaccess.php. Run parsecvs.sh.
+
+5. To make nightly updates to the data (reflecting the day's cvs commits), run parsecvs.sh as a cron like this:
+
+#Min Hr Mday Month Wday Cmd
+00 22 * * * $HOME/searchcvs/parsecvs.sh 2>&1 1> $HOME/searchcvs/parsecvs.log.txt
+
+----
+
+Additional details on setup and on using this tool can be found here:
+
+http://wiki.eclipse.org/index.php/Search_CVS
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.web.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.web.txt
new file mode 100644
index 0000000..2021731
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/README.searchcvs.setup.web.txt
@@ -0,0 +1,13 @@
+Search CVS is a tool for converting cvs commits into a mysql database, which
+can be updated without worry of data duplication. The database is then searchable
+via a web page run on www.eclipse.org.
+
+Web Server Quick Setup:
+
+1. See searchcvs/www/README.
+
+----
+
+Additional details on setup and on using this tool can be found here:
+
+http://wiki.eclipse.org/index.php/Search_CVS
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/cvssrc/.cvsignore b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/cvssrc/.cvsignore
new file mode 100644
index 0000000..a767caf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/cvssrc/.cvsignore
@@ -0,0 +1 @@
+*
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/includes/parsecvs-dbaccess.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/includes/parsecvs-dbaccess.php
new file mode 100644
index 0000000..ca5187f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/includes/parsecvs-dbaccess.php
@@ -0,0 +1,5 @@
+<?php
+ $dbhost = "mysqlserver";
+ $dbuser = "dbaccessrw";
+ $dbpass = "dbaccessrwpassword";
+?> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.dump b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.dump
new file mode 100644
index 0000000..a33d400
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.dump
@@ -0,0 +1,161 @@
+-- MySQL dump 10.10
+--
+-- You can load this file into mysql using:
+-- $ mysql -u root -p < mysql-modelingschema.dump
+--
+-- Note that the database name for the stored CVS data is `modeling`, as in the Eclipse Modeling Project.
+-- You'll probably want to change that for your project's needs.
+--
+-- Host: localhost Database: modeling
+-- ------------------------------------------------------
+-- Server version 5.0.22-log
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+DROP DATABASE IF EXISTS `modeling`;
+CREATE DATABASE `modeling`;
+
+USE `modeling`;
+
+--
+-- Table structure for table `bugs`
+--
+
+DROP TABLE IF EXISTS `bugs`;
+CREATE TABLE `bugs` (
+ `fid` smallint(5) unsigned NOT NULL,
+ `revision` varchar(15) NOT NULL,
+ `bugid` mediumint(8) unsigned NOT NULL,
+ PRIMARY KEY (`fid`,`revision`,`bugid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `bugs`
+--
+
+
+/*!40000 ALTER TABLE `bugs` DISABLE KEYS */;
+LOCK TABLES `bugs` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `bugs` ENABLE KEYS */;
+
+--
+-- Table structure for table `commits`
+--
+
+DROP TABLE IF EXISTS `commits`;
+CREATE TABLE `commits` (
+ `fid` smallint(5) unsigned NOT NULL,
+ `revision` varchar(15) NOT NULL,
+ `date` datetime NOT NULL,
+ `author` varchar(20) NOT NULL,
+ `state` enum('Exp','dead') NOT NULL,
+ `linesplus` smallint(5) unsigned default NULL,
+ `linesminus` smallint(5) unsigned default NULL,
+ `message` text NOT NULL,
+ PRIMARY KEY (`fid`,`revision`),
+ KEY `author` (`author`),
+ FULLTEXT KEY `message` (`message`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `commits`
+--
+
+
+/*!40000 ALTER TABLE `commits` DISABLE KEYS */;
+LOCK TABLES `commits` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `commits` ENABLE KEYS */;
+
+--
+-- Table structure for table `cvsfiles`
+--
+
+DROP TABLE IF EXISTS `cvsfiles`;
+CREATE TABLE `cvsfiles` (
+ `fid` int(11) NOT NULL auto_increment,
+ `cvsname` text NOT NULL,
+ `head` varchar(15) NOT NULL,
+ `keyword_subs` enum('b','k','kv','kvl','v') NOT NULL,
+ `project` varchar(50) NOT NULL,
+ PRIMARY KEY (`fid`),
+ KEY `project` (`project`),
+ UNIQUE KEY `cvsname` (`cvsname`(333))
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `cvsfiles`
+--
+
+
+/*!40000 ALTER TABLE `cvsfiles` DISABLE KEYS */;
+LOCK TABLES `cvsfiles` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `cvsfiles` ENABLE KEYS */;
+
+--
+-- Table structure for table `filetags`
+--
+
+DROP TABLE IF EXISTS `filetags`;
+CREATE TABLE `filetags` (
+ `fid` mediumint(8) unsigned NOT NULL,
+ `tid` smallint(5) unsigned NOT NULL,
+ `revision` varchar(15) NOT NULL,
+ PRIMARY KEY (`fid`,`tid`),
+ KEY `tid` (`tid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `filetags`
+--
+
+
+/*!40000 ALTER TABLE `filetags` DISABLE KEYS */;
+LOCK TABLES `filetags` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `filetags` ENABLE KEYS */;
+
+--
+-- Table structure for table `tags`
+--
+
+DROP TABLE IF EXISTS `tags`;
+CREATE TABLE `tags` (
+ `tid` int(11) NOT NULL auto_increment,
+ `tagname` varbinary(50) NOT NULL,
+ `tagdate` datetime default NULL,
+ PRIMARY KEY (`tid`),
+ UNIQUE KEY `tagname` (`tagname`),
+ KEY `tagdate` (`tagdate`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `tags`
+--
+
+
+/*!40000 ALTER TABLE `tags` DISABLE KEYS */;
+LOCK TABLES `tags` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `tags` ENABLE KEYS */;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.truncate b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.truncate
new file mode 100644
index 0000000..9d8349c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-modelingschema.truncate
@@ -0,0 +1,9 @@
+-- You can load this file into mysql using:
+-- $ mysql -u root -p < mysql-modelingschema.truncate
+
+USE `modeling`;
+TRUNCATE TABLE `bugs`;
+TRUNCATE TABLE `commits`;
+TRUNCATE TABLE `cvsfiles`;
+TRUNCATE TABLE `filetags`;
+TRUNCATE TABLE `tags`;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-users.dump b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-users.dump
new file mode 100644
index 0000000..5d83e25
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/mysql-users.dump
@@ -0,0 +1,19 @@
+-- Note: use the same username/password values here as set in
+-- includes/parsecvs-dbaccess.php and in
+-- www/projectName/includes/searchcvs-dbaccess.php
+--
+-- You can load this file into mysql using:
+-- $ mysql -u root -p < mysql-users.dump
+
+-- Note that the database name for the stored CVS data is `modeling`, as in the Eclipse Modeling Project.
+-- You'll probably want to change that for your project's needs.
+
+-- Local access (cvs parser) granted to read/write for user 'dbaccessrw' with password 'dbaccessrwpassword'
+CREATE USER 'dbaccessrw'@'localhost' IDENTIFIED BY 'dbaccessrwpassword';
+GRANT USAGE ON *.* TO 'dbaccessrw'@'localhost' IDENTIFIED BY 'dbaccessrwpassword' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
+GRANT ALL PRIVILEGES ON `dbaccessrw`.* TO 'dbaccessrw'@'localhost';
+
+-- Remote access (website) granted to read only for user 'dbaccessro' with password 'dbaccessropassword'
+CREATE USER 'dbaccessro'@'%eclipse.org' IDENTIFIED BY 'dbaccessropassword';
+GRANT USAGE ON *.* TO 'dbaccessro'@'%eclipse.org' IDENTIFIED BY 'dbaccessropassword' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
+GRANT SELECT ON `modeling`.* TO 'dbaccessro'@'%eclipse.org';
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.php
new file mode 100644
index 0000000..9b9c4fd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.php
@@ -0,0 +1,163 @@
+#!/usr/bin/php
+
+<?php
+/*
+RCS file: /cvsroot/tools/org.eclipse.emf/.cvsignore,v //store
+Working file: .cvsignore //don't need to store, basename(rcs file), minus ,v?
+head: 1.1 //maybe store, could be calculated based on tags table?
+branch: //probably store, what does this actually mean?, never used (always empty)?
+locks: strict //store, though not used (always strict)?
+access list: //store, though not used (always empty)?
+symbolic names: //do we actually need to store these? we'll see
+ build_200608030000: 1.1
+ ...
+keyword substitution: kv //store, 'b', 'k', 'kv', 'kvl', 'v' are (currently) used
+total revisions: 2; selected revisions: 2 //don't store, is count of commits to the file
+description: //is this a title for the revisions? probably
+----------------------------
+revision 1.1
+date: 2004/03/06 18:22:28; author: marcelop; state: Exp;
+branches: 1.1.2;
+Move the EMF, XSD and SDO source code to the Eclipse.org repository
+----------------------------
+revision 1.1.2.1
+date: 2005/06/02 16:09:17; author: nickb; state: Exp; lines: +0 -0
+*** empty log message ***
+=============================================================================
+*/
+
+$db = "modeling"; /* database name. change this to match your project or can leave as is */
+
+$perfile_regex = "/^RCS\ file:\ (.+?$)\\n
+ ^Working\ file:\ (.+?$)\\n
+ ^head:\ (.+?$)\\n
+ ^branch:\ ?(.*?$)\\n
+ ^locks:\ (.+?$)\\n
+ ^access\ list:\ ?(.*?$)\\n
+ (?:^symbolic\ names:\ ?(.*?$)\\n
+ ((?:^\\t\S+:\ [0-9\.]+$\\n)+))?
+ ^keyword\ substitution:\ (.+?$)\\n
+ ^total\ revisions:\ (\d+);\\tselected\ revisions:\ (\d+)$\\n
+ ^description:\ ?(.*?$)\\n
+ ^((?:\-{28}.+$\\n)?
+ ^={77})$/smx";
+
+$percommit_regex = "#^\-{28}$\\n
+ ^revision\ ([0-9\.]+)$\\n
+ ^date:\ (\d{4}/\d\d/\d\d\ \d\d:\d\d:\d\d);\ \ author:\ (\S+);\ \ state:\ (\S+);(?:\ \ lines:\ \+(\d+)\ \-(\d+))?$\\n
+ (?:^branches:(?:\ \ ([0-9\.]+);)+$\\n)?
+ ^(.+?)$\\n
+ ^(?:\-{28}|={77})#smx";
+
+$bugs_regex = "@(?:
+ \[\#?(\d+)\]
+ |
+ (?:Bugzilla)?\#(\d+)
+ |
+ https?\Q://bugs.eclipse.org/bugs/show_bug.cgi?id=\E(\d+)
+ )@x";
+
+include_once "includes/parsecvs-dbaccess.php";
+$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die("Couldn't connect to database!\n");
+mysql_select_db($db, $connect) or die(mysql_error());
+$file = file_get_contents(($argv[1] ? $argv[1] : "php://stdin"));
+
+wmysql_query("CREATE TEMPORARY TABLE `tmptags` (`tagname` VARBINARY(255), `revision` VARCHAR(20), PRIMARY KEY (`tagname`)) ENGINE = memory");
+
+preg_match_all("/^(RCS file:.+?^={77}$)/sm", $file, $regs) or die("Couldn't find any cvs logs!\n");
+foreach ($regs[0] as $z)
+{
+ /* parse each file's info */
+ if (preg_match($perfile_regex, $z, $props))
+ {
+ $esc = array(1, 3, 9);
+ foreach ($esc as $y)
+ {
+ $props[$y] = mysql_real_escape_string($props[$y], $connect);
+ }
+ preg_match("/^\/cvsroot\/[^\/]+\/([^\/]+)\//", $props[1], $proj);
+ $q = "`project` = '$proj[1]', `head` = '$props[3]', `keyword_subs` = '$props[9]'";
+ wmysql_query("INSERT INTO `cvsfiles` SET `cvsname` = '$props[1]', $q ON DUPLICATE KEY UPDATE $q");
+ /* mysql_insert_id() won't work if we updated rather than inserted */
+ $result = wmysql_query("SELECT `fid` FROM `cvsfiles` WHERE `cvsname` = '$props[1]'");
+ $row = mysql_fetch_row($result);
+
+ /* parse symbolic names */
+ $tags = array();
+ $filetags = array();
+ $count = preg_match_all("/^\t(\S+): ([0-9\.]+)$\n/m", $props[8], $syms);
+ for ($i=0;$i<$count;$i++)
+ {
+ array_push($filetags, "('{$syms[1][$i]}', '{$syms[2][$i]}')");
+ }
+ if ($count > 0)
+ {
+ $syms[1] = preg_replace("/^(.+)$/e", "fixup('$1')", $syms[1]);
+ wmysql_query("INSERT INTO `tags` (`tagname`, `tagdate`) VALUES " . join($syms[1], ",") . " ON DUPLICATE KEY UPDATE `tid` = `tid`");
+ wmysql_query("INSERT INTO `tmptags` (`tagname`, `revision`) VALUES " . join($filetags, ","));
+ wmysql_query("INSERT INTO `filetags` SELECT $row[0], `tid`, `revision` FROM `tmptags` NATURAL JOIN `tags` ON DUPLICATE KEY UPDATE `filetags`.`revision` = `tmptags`.`revision`");
+ wmysql_query("TRUNCATE TABLE `tmptags`");
+ }
+
+ $commits = $props[13];
+ /* parse commits */
+ while (preg_match($percommit_regex, $commits, $revs))
+ {
+ $commits = substr($commits, strlen($revs[0]) - 28); //leave the \-{28} in tact
+ $revs[8] = mysql_real_escape_string($revs[8], $connect);
+ $q = "`date` = STR_TO_DATE('$revs[2]', '%Y/%m/%d %T'), `author` = '$revs[3]', `state` = '$revs[4]', `linesplus` = '$revs[5]', `linesminus` = '$revs[6]', `message` = '$revs[8]'";
+ wmysql_query("INSERT INTO `commits` SET `fid` = '$row[0]', `revision` = '$revs[1]', $q ON DUPLICATE KEY UPDATE $q");
+
+ /* parse bug numbers */
+ if (preg_match_all($bugs_regex, $revs[8], $ubugs))
+ {
+ unset($ubugs[0]);
+ $bugs = extract_bugs($ubugs);
+ $bugs = preg_replace("/^(.+)$/", "('$row[0]', '$revs[1]', '$1')", $bugs);
+ wmysql_query("INSERT INTO `bugs` (`fid`, `revision`, `bugid`) VALUES " . join($bugs, ",") . " ON DUPLICATE KEY UPDATE `bugid` = `bugid`");
+ }
+ }
+ }
+}
+wmysql_query("DROP TEMPORARY TABLE `tmptags`");
+
+$tables = array();
+mysql_select_db("INFORMATION_SCHEMA") or die(mysql_error());
+$result = wmysql_query("SELECT TABLE_NAME FROM TABLES WHERE `TABLE_SCHEMA` = '$db' AND `TABLE_TYPE` = 'BASE TABLE'");
+while ($row = mysql_fetch_row($result))
+{
+ array_push($tables, $row[0]);
+}
+
+mysql_select_db($db) or die(mysql_error());
+wmysql_query("OPTIMIZE TABLE " . join($tables, ","));
+wmysql_query("ANALYZE TABLE " . join($tables, ","));
+mysql_close($connect);
+
+function fixup($str)
+{
+ return "('$str', " . (preg_match("/^build_(\d{12})$/", $str, $regs) ? "STR_TO_DATE('$regs[1]', '%Y%m%d%k%i')" : "NULL") . ")";
+}
+
+function wmysql_query($sql)
+{
+ $res = mysql_query($sql) or die("$sql\n" . mysql_error() . "\n");
+ return $res;
+}
+
+function extract_bugs($regs)
+{
+ foreach ($regs as $z)
+ {
+ foreach ($z as $y)
+ {
+ if (preg_match("/^\d+$/", $y))
+ {
+ $bugs[] = $y;
+ }
+ }
+ }
+
+ return $bugs;
+}
+?>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.sh
new file mode 100755
index 0000000..a261e22
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/parsecvs.sh
@@ -0,0 +1,27 @@
+#/bin/bash
+
+CVSOPTS="-Q";
+
+cd ${0%/*}; # cd to directory where this script is located; cvssrc/ must be beneath it
+
+# pass in specific target folder(s) or do all in cvssrc/ folder
+dir="";
+if [ $# -gt 0 ]; then
+ while [ $# -gt 0 ]; do
+ dir=$dir" $1"; shift 1;
+ done
+else
+ dir="$(ls -d cvssrc/*)";
+fi
+
+for i in $dir; do
+ echo "[`date +%H:%M:%S`] Processing $i";
+ cd $i;
+ cvs $CVSOPTS up -Pd .;
+ f=$(mktemp)
+ cvs $CVSOPTS log > $f
+ echo $f | /usr/local/bin/php ../../parsecvs.php;
+ rm -f $f
+ cd ../..;
+ echo "[`date +%H:%M:%S`] done.";
+done
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/setup.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/setup.sh
new file mode 100755
index 0000000..0fa1a4b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/setup.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# setup script for use with Neil Skrypuch's Search CVS tool
+
+# used to check out cvs content so that it can be logged by parsecvs.sh
+
+checkoutdir="$HOME/searchcvs/cvssrc";
+quietcvs="-Q";
+
+mkdir -p $checkoutdir;
+
+checkoutProjects ()
+{
+ CVSROOT=$1;
+ project=$2;
+ cd $checkoutdir;
+ echo "[`date +%H:%M:%S`] Check out $checkoutdir/$project from $CVSROOT ...";
+ cvs -d :pserver:anonymous@dev.eclipse.org:$CVSROOT $quietcvs co $project;
+}
+
+# list projects to extract; add other cvs roots (eg. /cvsroot/modeling) as necessary below
+webprojects="emf emft uml2 mdt modeling";
+toolsprojects="org.eclipse.emf org.eclipse.xsd org.eclipse.emf.ecore.sdo org.eclipse.emf.releng.build org.eclipse.uml2 org.eclipse.uml2.releng";
+techprojects="org.eclipse.emft org.eclipse.gmf org.eclipse.corona";
+eclipseprojects="org.eclipse.releng org.eclipse.releng.basebuilder org.eclipse.releng.eclipsebuilder org.eclipse.releng.tools org.eclipse.releng.tests org.eclipse.pde org.eclipse.pde.core org.eclipse.pde.ui.tests org.eclipse.pde.runtime org.eclipse.pde.junit.runtime org.eclipse.pde.source org.eclipse.pde.build org.eclipse.pde.junit org.eclipse.pde.doc.user org.eclipse.pde.ui"
+modelingprojects="gmf emf org.eclipse.mdt org.eclipse.mdt.releng releng-common"
+
+# do checkouts for each cvs root's projects
+for f in $webprojects; do checkoutProjects /cvsroot/org.eclipse www/$f; done
+for f in $toolsprojects; do checkoutProjects /cvsroot/tools $f ; done
+for f in $techprojects; do checkoutProjects /cvsroot/technology $f ; done
+for f in $eclipseprojects; do checkoutProjects /cvsroot/eclipse $f ; done
+for f in $modelingprojects; do checkoutProjects /cvsroot/modeling $f ; done
+
+echo "[`date +%H:%M:%S`] Done.";
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/README.folder.contents.may.not.be.up.to.date.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/README.folder.contents.may.not.be.up.to.date.txt
new file mode 100644
index 0000000..4ab1741
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/README.folder.contents.may.not.be.up.to.date.txt
@@ -0,0 +1,36 @@
+Search CVS is a tool for converting cvs commits into a mysql database, which
+can be updated without worry of data duplication. The database is then searchable
+via a web page run on www.eclipse.org.
+
+This folder is a copy of the contents of another cvs repository for example purposes only,
+and should not be considered up to date. It is provided here simply to make this code base
+more complete and to provide a self-contained runnable example.
+
+For the latest version of this folder's contents, see:
+
+:pserver:anonymous@dev.eclipse.org:/cvsroot/org.eclipse/www/emf/
+ searchcvs.php
+ includes/searchcvs.css
+ includes/db.php
+
+Additionally, there is a non-public file called includes/searchcvs-dbaccess.php (referenced by
+includes/db.php) which reads something like this:
+
+<?php
+ $dbhost = "mysqlserver";
+ $dbuser = "dbaccessro";
+ $dbpass = "dbaccessropassword";
+?>
+
+** WARNING: DO NOT COMMIT THIS FILE INTO YOUR PUBLIC CVS REPOSITORY! **
+
+To put this file on the www.eclipse.org server without it being available in CVS for public view,
+place a copy of the file in your home directory on dev.eclipse.org, then open a bug
+(https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community) or send a note to webmaster@eclipse.org
+and ask to have the file placed for you. Example: https://bugs.eclipse.org/bugs/show_bug.cgi?id=156451#c8
+
+----
+
+Additional details on setup and on using this tool can be found here:
+
+http://wiki.eclipse.org/index.php/Search_CVS
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/db.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/db.php
new file mode 100644
index 0000000..7fafa85
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/db.php
@@ -0,0 +1,12 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . "/emf/includes/searchcvs-dbaccess.php";
+$connect = mysql_connect($dbhost, $dbuser, $dbpass);
+mysql_select_db($db ? $db : "modeling", $connect) or die(mysql_error());
+
+function wmysql_query($sql)
+{
+ #print $sql . "\n";
+ $res = mysql_query($sql) or die("$sql\n" . mysql_error());
+ return $res;
+}
+?>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs-dbaccess.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs-dbaccess.php
new file mode 100644
index 0000000..c1de49a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs-dbaccess.php
@@ -0,0 +1,5 @@
+<?php
+ $dbhost = "mysqlserver";
+ $dbuser = "dbaccessro";
+ $dbpass = "dbaccessropassword";
+?> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs.css b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs.css
new file mode 100644
index 0000000..08ee8b3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/includes/searchcvs.css
@@ -0,0 +1,101 @@
+abbr
+{
+ border-bottom: 1px dotted gray;
+ /* removes konqueror's custom abbr style */
+ font: inherit;
+ letter-spacing: inherit;
+}
+
+#midcolumn .homeitem3col h3 span
+{
+ float: right;
+}
+
+#midcolumn .homeitem3col ul li div
+{
+ float: right;
+ padding-left: 2em;
+}
+
+#midcolumn .homeitem3col ul li
+{
+ clear: both;
+}
+
+#midcolumn .homeitem3col ul li ul li
+{
+ border-style: none;
+ padding: 0;
+}
+
+#midcolumn .homeitem3col .pager
+{
+ text-align: center;
+ padding: 1em 0 1em 0;
+}
+
+#midcolumn .homeitem3col .pager span
+{
+ margin: 0.5em;
+ padding: 0.3em;
+}
+
+#midcolumn .homeitem3col .pager span.selected
+{
+ border-bottom: 1px dotted black;
+ border-top: 1px dotted black;
+ font-weight: bold;
+}
+
+#midcolumn .homeitem3col #searchdiv
+{
+ text-align: center;
+ padding-top: 1em;
+}
+
+#midcolumn .homeitem3col ul li ul li span.empty
+{
+ color: gray;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl0,
+#midcolumn .homeitem3col ul li ul li span.hl7
+{
+ background-color: #FFFF66;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl1,
+#midcolumn .homeitem3col ul li ul li span.hl8
+{
+ background-color: #FF66FF;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl2,
+#midcolumn .homeitem3col ul li ul li span.hl9
+{
+ background-color: #66FFFF;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl3,
+#midcolumn .homeitem3col ul li ul li span.hl10
+{
+ background-color: #AAAAFF;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl4,
+#midcolumn .homeitem3col ul li ul li span.hl11
+{
+ background-color: #AAFFAA;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl5,
+#midcolumn .homeitem3col ul li ul li span.hl12
+{
+ background-color: #FFAAAA;
+}
+
+#midcolumn .homeitem3col ul li ul li span.hl6,
+#midcolumn .homeitem3col ul li ul li span.hl13
+{
+ background-color: #CCCCCC;
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/searchcvs.php b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/searchcvs.php
new file mode 100644
index 0000000..a379b81
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_cvs/searchcvs/www/projectName/searchcvs.php
@@ -0,0 +1,267 @@
+<?php
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon());
+ob_start();
+
+include("includes/db.php");
+
+$pagesize = 25; //results per page
+$scroll = 5; //+- pages to show in nav
+$days = 7;
+$page = (preg_match("/^\d+$/", $_GET["p"]) ? $_GET["p"] : 1);
+$offset = ($page - 1) * $pagesize;
+
+$where = "WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL $days DAY)";
+$order = "ORDER BY `date` DESC";
+
+$extraf = array(
+ array("regex" => "/author: ?(\S+)/", "sql" => "`author` LIKE '%%%s%%'", "sqlpart" => "where"),
+ array("regex" => "/file: ?(\S+)/", "sql" => "`cvsname` LIKE '%%%s%%'", "sqlpart" => "where"),
+ array("regex" => "/days: ?(\d+)/", "sql" => "`date` >= DATE_SUB(CURDATE(), INTERVAL %d DAY)", "sqlpart" => "where"),
+ array("regex" => "/(?:project|module): ?(\S+)/", "sql" => "`project` LIKE '%s'", "sqlpart" => "where"),
+ array("regex" => "/branch: ?(\S+)/", "sql" => "`branch` LIKE '%%%s%%'", "sqlpart" => "having") //is a calculated value, won't work in WHERE
+);
+
+$q = (get_magic_quotes_gpc() ? $_GET["q"] : addslashes($_GET["q"]));
+$extra = array("where" => array(), "having" => array());
+foreach ($extraf as $z)
+{
+ while (preg_match($z["regex"], $q, $regs))
+ {
+ array_push($extra[$z["sqlpart"]], sprintf($z["sql"], $regs[1]));
+ $q = preg_replace($z["regex"], "", $q);
+ }
+}
+
+$regs = array();
+/* this *could* be put into $extraf, but it would change the semantics slightly, in that any number searched for would be treated as a bug #, which i think is undesirable */
+if (preg_match("/^\s*\[?(\d+)\]?\s*$/", $_GET["q"], $regs))
+{
+ $_GET["q"] = $regs[1];
+ $where = "WHERE `bugid` = $regs[1]";
+ $et = "Bug #";
+}
+else if (preg_match("/(\S)/", $q, $regs) || sizeof($extra["where"]) + sizeof($extra["having"]) > 0)
+{
+ $match = "'1'";
+ if (sizeof($regs) > 0)
+ {
+ $match = "MATCH(`message`) AGAINST('$q'" . (preg_match("/\".+\"/", $q) ? " IN BOOLEAN MODE" : "") . ")";
+ }
+ $where = "WHERE " . ($match ? $match : "1");
+ $where .= (sizeof($extra["where"]) > 0 ? " AND " . join($extra["where"], " AND ") : "");
+ $having = (sizeof($extra["having"]) > 0 ? " HAVING " . join($extra["having"], " AND ") : "");
+ $ec = ", $match AS `relevance`";
+ $order = "ORDER BY `relevance` DESC, `date` DESC";
+}
+?>
+<div id="midcolumn">
+<div class="homeitem3col">
+ <h3>Search</h3>
+ <div id="searchdiv">
+ <form action="" method="get">
+ <input type="text" size="60" id="q" name="q"<?php print ($_GET["q"] ? " value=\"" . sanitize($_GET["q"], "text") . "\"" : ""); ?>/>
+ <input type="submit" value="Go!"/>
+ </form>
+ </div>
+</div>
+<?php
+
+/* 1.1.2.x <- 1.1.0.2 = branch tag, likewise, 1.1.4.x <- 1.1.0.4 = branch tag, so dynamically rewrite a.b.c.d to a.b.0.c to find the branch tag */
+$branch = "IF(`revision` LIKE '%.%.%.%', (SELECT `tagname` FROM `tags` NATURAL JOIN `filetags` WHERE `fid` = `ofid` AND `revision` = CONCAT(SUBSTRING_INDEX(`orev`, '.', 2), '.0.', SUBSTRING_INDEX(SUBSTRING_INDEX(`orev`, '.', -2), '.', 1))), 'HEAD')";
+$sql = "SELECT SQL_CALC_FOUND_ROWS `cvsname`, `revision`, `date`, `author`, `message`, `keyword_subs`, `bugid`, `revision` AS `orev`, `fid` AS `ofid`, $branch AS `branch`$ec FROM `cvsfiles` NATURAL JOIN `commits` NATURAL LEFT JOIN `bugs` $where GROUP BY `fid`, `revision`, `bugid` $having $order LIMIT $offset, $pagesize";
+$result = wmysql_query($sql);
+
+$count = wmysql_query("SELECT FOUND_ROWS()"); //mysql_num_rows() doesn't do what we want here
+$row = mysql_fetch_row($count);
+$rows = $row[0];
+
+$title = "<span>$rows results total</span>Showing results " . ($offset + 1) . "-" . ($offset + $pagesize > $rows ? $rows : $offset + $pagesize) . " for " . ($_GET["q"] == "" ? "last $days days of commits" : "$et" . sanitize($_GET["q"], "text"));
+$title = ($rows == 0 ? "No results found for " . sanitize($_GET["q"], "text") . "" : $title);
+
+print "<div class=\"homeitem3col\">\n";
+print "<h3>$title</h3>\n";
+
+dopager($rows, $page, $pagesize);
+
+print "<ul>\n";
+
+while ($row = mysql_fetch_assoc($result))
+{
+ $file = basename($row["cvsname"], ",v");
+ $row["cvsname"] = preg_replace("#^/cvsroot/[^\/]+/(.+),v$#", "$1", $row["cvsname"]);
+ print "<li>\n";
+ print "<div>{$row['date']}</div>";
+ print ($row["bugid"] ? "[<a href=\"https://bugs.eclipse.org/bugs/show_bug.cgi?id={$row['bugid']}\">{$row['bugid']}</a>] " : "");
+ print "<a href=\"" . cvsfile($row["cvsname"]) . "\"><abbr title=\"{$row['cvsname']}\">$file</abbr></a> ({$row['branch']} " . showrev($row['revision'], $row["cvsname"]) . ")";
+ print "<ul>\n";
+ print "<li><div>{$row['author']}</div>" . pretty_comment($row["message"], $q) . "</li>";
+ print "</ul>\n";
+ print "</li>\n";
+}
+print "</ul>\n";
+
+dopager($rows, $page, $pagesize);
+
+print "</div>\n";
+print "</div>\n";
+mysql_close($connect);
+?>
+<div id="rightcolumn">
+ <div class="sideitem">
+ <h6>Help</h6>
+ <p><a href="http://wiki.eclipse.org/index.php/Search_CVS">Consult the wiki</a>, or try these examples:</p>
+ <ul>
+ <li><a href="?q=%5B155286%5D">[155286]</a></li>
+ <li><a href="?q=98877+file%3A+ChangeAdapter">98877 file: ChangeAdapter</a></li>
+ <li><a href="?q=file%3A+org.eclipse.emf%2F+days%3A+7">file: org.eclipse.emf/ days: 7</a></li>
+ <li><a href="?q=days%3A200+author%3Amerks">days:200 author:merks</a></li>
+ <li><a href="?q=branch%3A+R2_1_+file%3A+.xml">branch: R2_1_ file: .xml</a></li>
+ <li><a href="?q=static+dynamic+project%3A+org.eclipse.emf">static dynamic project: org.eclipse.emf</a></li>
+ <li><a href="?q=%22package+protected%22">"package protected"</a></li>
+ <li><a href="?q=Neil+Skrypuch">Neil Skrypuch</a></li>
+ </ul>
+ <p>See also the complete <a href="http://wiki.eclipse.org/index.php/Search_CVS#Parameter_List">Parameter List</a>.</p>
+ </div>
+</div>
+<?php
+$html = ob_get_contents();
+ob_end_clean();
+
+$pageTitle = "Eclipse Tools - Search CVS";
+$pageKeywords = "";
+$pageAuthor = "Neil Skrypuch";
+
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf/includes/searchcvs.css"/>' . "\n");
+if (!isset($_GET["totalonly"]))
+{
+ ob_start();
+ $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+ $html = ob_get_contents();
+ ob_end_clean();
+ print preg_replace("/<body>/", "<body onload=\"document.getElementById('q').focus()\">", $html);
+}
+else
+{
+ header("Content-Type: text/plain");
+ print $rows;
+}
+
+function pretty_comment($str, $hl)
+{
+ $str = preg_replace("/\n/", "<br/>", $str);
+ $hl = words($hl);
+
+ for ($i = 0; $i < sizeof($hl); $i++)
+ {
+ $str = preg_replace("/\b(\Q$hl[$i]\E)\b([^=]|\Z)/i", "<span class=\"hl$i\">$1</span>$2", $str);
+ }
+
+ $str = preg_replace("/^(\Q*** empty log message ***\E)$/", "<span class=\"empty\">$1</span>", $str);
+
+ return $str;
+}
+
+function cvsminus($rev)
+{
+ if (preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough
+ {
+ return $rev;
+ }
+ else
+ {
+ if (preg_match("/\.1$/", $rev))
+ {
+ return preg_replace("/^(\d+\.\d+)\..+$/", "$1", $rev);
+ }
+ else
+ {
+ return preg_replace("/^(.+\.)(\d+)$/e", "\"$1\" . ($2 - 1);", $rev);
+ }
+ }
+}
+
+function showrev($rev, $file)
+{
+ $link = "<a href=\"" . cvsfile($file) . "\">$rev</a>";
+ if (!preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough
+ {
+ $oldrev = cvsminus($rev);
+ $link = "<a href=\"" . cvsfile($file, $rev, $oldrev) . "\">$rev &gt; $oldrev</a>";
+ }
+
+ return $link;
+}
+
+function cvsfile($file, $rev = "", $oldrev = "")
+{
+ if ($rev && $oldrev)
+ {
+ $ext = ".diff";
+ $params = "r1=$oldrev&amp;r2=$rev&amp;";
+ }
+ $params .= (preg_match("/\.php$/", $file) && $ext != ".diff" ? "content-type=text/plain&amp;" : "");
+
+ if (preg_match("/^www/", $file))
+ {
+ return "http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/$file$ext?${params}cvsroot=Eclipse_Website";
+ }
+ else
+ {
+ return "http://dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/$file$ext?$params";
+ }
+}
+
+function sanitize($str, $type = "url")
+{
+ $tmp = urlencode(urldecode((get_magic_quotes_gpc() ? stripslashes($str) : $str)));
+ return ($type == "url" ? $tmp : htmlspecialchars(urldecode($tmp)));
+}
+
+function pagelink($page, $selected, $linktext = "")
+{
+ $innertext = ($linktext ? $linktext : $page);
+ $text = (!$selected ? "<a href=\"?q=" . sanitize($_GET["q"]) . "&amp;p=$page\">$innertext</a>" : $innertext);
+ return "<span" . ($selected ? " class=\"selected\"" : "") . ">$text</span>";
+}
+
+function dopager($rows, $page, $pagesize)
+{
+ $startpage = ($page - 5 < 1 ? 1 : $page - 5);
+ $endpage = ($page + 5 > $rows/$pagesize ? ceil($rows/$pagesize) : $page + 5);
+
+ if ($rows > 0)
+ {
+ print "<div class=\"pager\">\n";
+ print ($page > 1 ? pagelink($page - 1, false, "Previous") : "");
+ for ($i = $startpage; $i <= $endpage; $i++)
+ {
+ print pagelink($i, $i == $page);
+ }
+ print ($page < ceil($rows/$pagesize) ? pagelink($page + 1, false, "Next") : "");
+ print "</div>\n";
+ }
+}
+
+function words($str)
+{
+ $str = stripslashes($str);
+ $list = array();
+
+ preg_match_all("/\"([^\"]+)\"/", $str, $regs);
+ foreach ($regs[1] as $word)
+ {
+ $word = addslashes($word);
+ $list[] = $word;
+ $str = preg_replace("/\Q$word\E/", "", $str);
+ }
+
+ $regs = null;
+ preg_match_all("/(\w+)/", $str, $regs);
+ foreach ($regs[1] as $word)
+ {
+ $list[] = addslashes($word);
+ }
+
+ return $list;
+}
+?>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/_README.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/_README.txt
new file mode 100644
index 0000000..10095c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/_README.txt
@@ -0,0 +1,39 @@
+These scripts are examples to get you started.
+
+== Assembly ==
+
+To build the feedTools.jar, use buildFeedToolsJar.sh (or .xml).
+To create a zip of all the RSS-related code, use buildFeedToolsZip.sh (or .xml).
+
+== Feed Manipulation ==
+
+To do feed manipulation, like creating a feed, adding a entry to a feed, querying
+for attribute values in a feed, or changing attribute values in a feed, look at
+feedManipulation.sh (and .xml) and create a copy similar to suit your needs.
+
+== Feed Publishing ==
+
+To publish a feed, use a script similar to feedPublish.sh (and .xml).
+
+== Feed Validation ==
+
+To validate a feed against the latest schema, you can use one of two EMF-based ant tasks.
+Examples of both are shown in feedValidate.xml, including the classpath required to run the task.
+In the Dynamic case, the schema is used to validate the feed xml; in the Generated case, the
+schema is used to create an .ecore model, which is used to generate model implementation and
+validation code, which is then used to validate the feed xml. Because the two techniques yield
+slightly different error messages when validating invalid feed data, they are both provided for
+comparison.
+
+To build the feedValidator.jar, use buildFeedValidatorJar.xml.
+
+== Feed Watching (And Response) ==
+
+To watch a feed for changes or the appearance of specific attribute values (like
+test results), use a script similar to feedWatch.sh (and .xml), along with properties
+like those in properties/feedWatch.*.properties
+
+The script sendEmailAlert.sh is provided as an example of what to in response to
+a feed change. You can customize the response to suit your needs.
+
+Additional documentation can be found in the *.xml Ant scripts and *.properties files. \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.sh
new file mode 100644
index 0000000..9ac7c99
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.sh
@@ -0,0 +1,15 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+$ANT_HOME/bin/ant -f buildFeedToolsJar.xml;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.xml
new file mode 100644
index 0000000..f077101
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsJar.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+
+<project name="Build feedTools.jar" default="buildFeedToolsJar" basedir="../">
+ <target name="buildFeedToolsJar">
+ <echo message="Compiling feedTools ..."/>
+ <delete file="feedTools.jar"/>
+ <delete dir="bin/"/>
+ <mkdir dir="bin"/>
+ <javac
+ source="1.5"
+ target="1.5"
+ srcdir="."
+ destdir="bin/"
+ classpath="/lib/ant.jar"
+ includes="src_rss/**/*"
+ excludes="src_rss/**/emf/*, src_rss/**/emf/**, src_rss/**/emf/**/*"/>
+ <echo message="Jarring feedTools.jar ..."/>
+ <jar
+ destfile="feedTools.jar"
+ includes="**/*.class"
+ basedir="bin"
+ update="true"/>
+ <jar
+ destfile="feedTools.jar"
+ includes="**/messages.properties"
+ excludes="**/emf/messages.properties"
+ basedir="src_rss"
+ update="true"/>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.sh
new file mode 100644
index 0000000..66df7aa
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.sh
@@ -0,0 +1,15 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+$ANT_HOME/bin/ant -f buildFeedToolsZip.xml;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.xml
new file mode 100644
index 0000000..78db396
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedToolsZip.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+
+<project name="Build feedTools.zip" default="buildFeedToolsZip" basedir="../">
+ <target name="buildFeedToolsZip">
+ <property name="zipfile" value="org.eclipse.build.tools_feedTools.zip"/>
+ <ant antfile="scripts_rss/buildFeedToolsJar.xml" target="buildFeedToolsJar" inheritall="true"/>
+ <echo message="Bundling ${zipfile} ..."/>
+ <delete file="${zipfile}"/>
+ <zip
+ destfile="${zipfile}"
+ includes=".classpath, .project,
+ feedTools.jar,
+ src_rss/**/*,
+ scripts_rss/**/*,
+ schema/**/*,
+ data/**/*,
+ properties/feedPublish.*.properties,
+ properties/feedWatch.*.properties,
+ properties/_README.txt"
+ basedir="."
+ update="true"/>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedValidatorJar.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedValidatorJar.xml
new file mode 100644
index 0000000..b3a1c03
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/buildFeedValidatorJar.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<project name="Build feedValidator.jar" default="buildFeedValidatorJar" basedir="../">
+ <target name="buildFeedValidatorJar">
+ <!-- TODO: set correct path to EMF plugins -->
+ <property name="EMF_HOME" value="../../eclipse-plugins-emf22/eclipse/plugins"/>
+ <echo message="Using EMF_HOME = ${EMF_HOME}"/>
+
+ <echo message="Compiling feedValidator (requires EMF) ..."/>
+ <delete file="feedValidator.jar"/>
+ <delete dir="bin_emf/"/>
+ <mkdir dir="bin_emf"/>
+ <javac
+ srcdir="."
+ destdir="bin_emf/"
+ includes="src_rss/**/emf/*, src_rss/**/emf/**, src_rss/**/emf/**/*">
+ <classpath>
+ <path path="/lib/ant.jar"></path>
+ <fileset dir="${EMF_HOME}">
+ <include name="org.eclipse.emf.common_*.jar"/>
+ <include name="org.eclipse.emf.ecore_*.jar"/>
+ <include name="org.eclipse.emf.ecore.xmi_*.jar"/>
+ <include name="org.eclipse.xsd_*.jar"/>
+ </fileset>
+ </classpath>
+ </javac>
+ <echo message="Jarring feedValidator.jar ..."/>
+ <jar
+ destfile="feedValidator.jar"
+ basedir="bin_emf"
+ update="true"/>
+ <jar
+ destfile="feedValidator.jar"
+ includes="**/emf/messages.properties"
+ basedir="src_rss"
+ update="true"/>
+ <delete dir="bin_emf/"/>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.sh
new file mode 100644
index 0000000..3dd3409
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.sh
@@ -0,0 +1,36 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+
+#ant standalone
+
+CLASSPATH="$JAVA_HOME/lib/rt.jar";
+# note that com.sun.org.apache.xerces (Sun JDK 1.5, rt.jar) != org.apache.xerces (Ant 1.6.5, xercesImpl.jar) so must remove from classpath
+#for f in `find $ANT_HOME/lib -maxdepth 1 -name "*.jar" -type f -not -name "xercesImpl.jar"`; do CLASSPATH=$CLASSPATH":"$f; done
+CLASSPATH=$CLASSPATH":"$ANT_HOME/lib/ant.jar":"$ANT_HOME/lib/ant-launcher.jar;
+
+cmd="$JAVA_HOME/bin/java \
+ -Dant.home=$ANT_HOME \
+ -Dant.library.dir=$JAVA_HOME/lib \
+ -classpath $CLASSPATH \
+ org.apache.tools.ant.launch.Launcher \
+ -buildfile feedManipulation.xml";
+
+echo "Running ..."; echo "";
+
+#prettyprint the command
+echo $cmd | sed -e 's/ \-/\n \-/g' -e 's/:/\n :/g'; echo "";
+
+# run the command
+$cmd;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.xml
new file mode 100644
index 0000000..cf0862d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulation.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>
+
+<project name="Create Feed, Add Entry, Update Entry, Read Entry" default="doAll">
+
+ <taskdef name="CreateFeed" classname="org.eclipse.releng.generators.rss.RSSFeedCreateFeedTask" classpath="../feedTools.jar"/>
+ <taskdef name="AddEntry" classname="org.eclipse.releng.generators.rss.RSSFeedAddEntryTask" classpath="../feedTools.jar"/>
+ <taskdef name="GetProperty" classname="org.eclipse.releng.generators.rss.RSSFeedGetPropertyTask" classpath="../feedTools.jar"/>
+ <taskdef name="UpdateEntry" classname="org.eclipse.releng.generators.rss.RSSFeedUpdateEntryTask" classpath="../feedTools.jar"/>
+
+ <target name="doAll">
+ <antcall target="addEntry"/>
+ <antcall target="getProperties"/>
+ <antcall target="updateFeed"/>
+ </target>
+
+ <target name="init">
+ <!-- 1. Define property file -->
+
+ <property file="../properties/feedPublish.eclipse.properties"/>
+ <!--
+ <property file="../properties/feedPublish.emf.properties"/>
+ <property file="../properties/feedPublish.uml2.properties"/>
+ -->
+ </target>
+
+ <target name="create" depends="init">
+ <!-- 2. Create feed (overwrite existing) -->
+
+ <CreateFeed
+ debug="${debug}"
+ project="${project}"
+ file="${file}"
+ feedURL="${feedURL}"/>
+
+ </target>
+
+ <target name="addEntry" depends="init">
+ <!-- 3. Add an entry (and create the feed if it doesn't already exist) -->
+
+ <!-- note: if not providing a buildType, must specify buildID to generate value -->
+ <AddEntry
+ debug="${debug}"
+ file="${file}"
+
+ project="${project}"
+ version="${version}"
+ branch="${branch}"
+ buildID="${buildID}"
+ buildType="${buildType}"
+ feedURL="${feedURL}"
+ buildURL="${buildURL}"
+
+ buildAlias="${buildAlias}"
+
+ buildDetailURL="${buildDetailURL}"
+ buildConfigURL="${buildConfigURL}"
+ buildLogURL="${buildLogURL}"
+ buildMapURL="${buildMapURL}"
+
+ dependencyURLs="${dependencyURLs}"
+ releases="${Releases}"
+
+ releaseNotesURL="${releaseNotesURL}"
+ updateManagerURL="${updateManagerURL}"
+ downloadsURL="${downloadsURL}"
+ jarSigningStatus="${jarSigningStatus}"
+ coordinatedstatus="${coordinatedStatus}"
+
+ JUnitTestURL="${JUnitTestURL}"
+ performanceTestURL="${performanceTestURL}"
+ APITestURL="${APITestURL}"
+ JUnitTestResults="${JUnitTestResults}"
+ performanceTestResults="${performanceTestResults}"
+ APITestResults="${APITestResults}"
+ />
+
+ </target>
+
+ <target name="getProperties" depends="init">
+ <!-- 4. Display a text or attribute value (ie., get a property) -->
+
+ <!-- on the feed itself, display modified date -->
+ <GetProperty
+ debug="${debug}"
+ file="${file}"
+ xpath="/*[name() = 'feed']/*[name() = 'updated']/text()"
+ />
+
+ <!-- on the first entry, display the modified date -->
+ <GetProperty
+ debug="${debug}"
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*[name() = 'updated']/text()"
+ />
+
+ <!-- on the first entry, display the build's folder, filename, and type -->
+ <GetProperty
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*/*[name() = 'build']/@href"
+ />
+ <GetProperty
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*/*[name() = 'build']/*[name() = 'releases']/*[@os = 'linux'][@ws = 'gtk'][@type = 'SDK']/text()"
+ />
+ <GetProperty
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*/*[name() = 'build']/@type"
+ />
+
+ </target>
+
+ <target name="updateFeed" depends="init">
+ <!-- 5. Update an existing entry by changing a property value to something else -->
+
+ <!-- on the first entry, change the coordinated status to COMPLETE -->
+ <UpdateEntry
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*/*/*[name() = 'coordinated']/@status"
+ replacement="COMPLETE"
+ />
+ <!-- on the first entry, change the performance results (os-ws = RHEL4-3GHz-2.5GB-gtk) to PENDING -->
+ <UpdateEntry
+ file="${file}"
+ xpath="/*/*[name() = 'entry'][1]/*/*/*/*[@type = 'performance']/*[name() = 'result'][@id = 'RHEL4-3GHz-2.5GB']/text()"
+ replacement="PENDING"
+ />
+
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulationEclipse.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulationEclipse.sh
new file mode 100644
index 0000000..7846332
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedManipulationEclipse.sh
@@ -0,0 +1,42 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+export ECLIPSE_HOME=/home/eclipse/eclipse;
+
+#ant with Eclipse - requires org.eclipse.ant.ui*.jar
+tmpfolder="/tmp/antrunner-"`date +%Y%m%d_%H%M%S`;
+for f in `find $ECLIPSE_HOME/plugins -maxdepth 1 -name "org.eclipse.ant.ui*.jar" -type f`; do unzip $f lib/*.jar -d $tmpfolder; done
+
+CLASSPATH="$JAVA_HOME/lib/rt.jar";
+for d in "$ANT_HOME/lib" "$tmpfolder/lib"; do
+ # note that com.sun.org.apache.xerces (Sun JDK 1.5, rt.jar) != org.apache.xerces (Ant 1.6.5, xercesImpl.jar) so must remove from classpath
+ for f in `find $d -maxdepth 1 -name "*.jar" -type f -not -name "xercesImpl.jar"`; do CLASSPATH=$CLASSPATH":"$f; done
+done
+
+cmd="$JAVA_HOME/bin/java \
+ -Dant.home=$ANT_HOME \
+ -Dant.library.dir=$ANT_HOME/lib \
+ -classpath $CLASSPATH \
+ org.eclipse.ant.internal.ui.antsupport.InternalAntRunner \
+ -buildfile feedManipulation.xml";
+
+echo "Running ...";
+
+#prettyprint the command
+echo $cmd | sed -e 's/ \-/\n \-/g' -e 's/:/\n :/g'; echo "";
+
+# run the command
+$cmd;
+
+rm -fr $tmpfolder;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.sh
new file mode 100644
index 0000000..e0d74d2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.sh
@@ -0,0 +1,40 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+###
+### NOTE: this script is ONLY an example, and needs to be customized for your personal use. ###
+###
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+CLASSPATH="$JAVA_HOME/lib/rt.jar";
+CLASSPATH=$CLASSPATH":"$ANT_HOME/lib/ant.jar":"$ANT_HOME/lib/ant-launcher.jar;
+CLASSPATH=$CLASSPATH":"../feedTools.jar;
+
+projectName="emf";
+
+# define/override variables not set in properties file (can also be passed in querystring, etc.)
+# this allows a static set of properties + some dynamic ones to be mixed in together
+debug=2;
+branch="HEAD"; # optional
+version="2.2.1";
+buildID="S200609210005";
+buildAlias="2.2.1RC2";
+dependencyURLs="http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/M20060919-1045/eclipse-SDK-M20060919-1045-linux-gtk.tar.gz"; # comma-separated if more than one
+# ...
+
+cmd="$JAVA_HOME/bin/java -debug -Dant.home=$ANT_HOME -Dant.library.dir=$JAVA_HOME/lib -classpath $CLASSPATH org.apache.tools.ant.launch.Launcher"
+cmd=$cmd" -buildfile feedPublish.xml -propertyfile ../properties/feedPublish.$projectName.properties"
+cmd=$cmd" -Dbranch=$branch -Dversion=$version -DbuildID=$buildID -DbuildAlias=$buildAlias -DbuildType="${buildID:0:1};
+cmd=$cmd" -DdependencyURLs=$dependencyURLs -Ddebug=$debug";
+echo ""; echo $cmd | sed -e "s/ \-/# \-/g" -e "s/.jar:/.jar# :/g" | tr "#" "\n"; echo "";
+$cmd;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.xml
new file mode 100644
index 0000000..5204db3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedPublish.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+
+<project name="Create/Update + Publish Feed" default="publishFeed" basedir="..">
+ <taskdef name="PublishFeed" classname="org.eclipse.releng.services.rss.RSSFeedPublisherTask" classpath="./feedTools.jar"/>
+ <taskdef name="AddEntry" classname="org.eclipse.releng.generators.rss.RSSFeedAddEntryTask" classpath="./feedTools.jar"/>
+ <!-- to run from a shell, modify feedPublish.sh to suit your needs -->
+
+ <target name="publishFeed">
+ <!-- TODO: include properties file here if not running from a shell script -->
+ <property file="properties/feedPublish.emf.properties"/>
+ <antcall target="addEntry"/>
+ <antcall target="publishFeedToCVS"/>
+ <antcall target="publishFeedWithSCP"/>
+ </target>
+
+ <target name="addEntry">
+ <!-- 1. Add an entry (and create the feed if it doesn't already exist) -->
+ <AddEntry
+ debug="${debug}"
+ file="${file}"
+
+ project="${project}"
+ version="${version}"
+ branch="${branch}"
+ buildID="${buildID}"
+ buildtype="${buildType}"
+ feedURL="${feedURL}"
+ buildURL="${buildURL}"
+
+ buildAlias="${buildAlias}"
+
+ buildDetailURL="${buildDetailURL}"
+ buildConfigURL="${buildConfigURL}"
+ buildLogURL="${buildLogURL}"
+ buildMapURL="${buildMapURL}"
+
+ dependencyURLs="${dependencyURLs}"
+ releases="${Releases}"
+
+ releaseNotesURL="${releaseNotesURL}"
+ updateManagerURL="${updateManagerURL}"
+ downloadsURL="${downloadsURL}"
+ jarSigningStatus="${jarSigningStatus}"
+ coordinatedStatus="${coordinatedStatus}"
+ coordinatedDetails="${coordinatedDetails}"
+
+ JUnitTestURL="${JUnitTestURL}"
+ performanceTestURL="${performanceTestURL}"
+ APITestURL="${APITestURL}"
+ JUnitTestResults="${JUnitTestResults}"
+ performanceTestResults="${performanceTestResults}"
+ APITestResults="${APITestResults}"
+ />
+ </target>
+
+ <!-- 2. Publish feed: commit file into CVS - overwrite existing and add if necessary -->
+ <target name="publishFeedToCVS">
+ <PublishFeed
+ debug="${debug}"
+ file="${file}"
+
+ cvsExec="${cvsExec}"
+ cvsRoot="${cvsRoot}"
+ cvsPath="${cvsPath}"
+ cvsTemp="${cvsTemp}"
+ />
+ <delete dir="${cvsTemp}"/>
+ </target>
+
+ <!-- 3. Publish feed: SCP file to remote server, overwriting existing if exists -->
+ <target name="publishFeedWithSCP">
+ <PublishFeed
+ debug="${debug}"
+ file="${file}"
+
+ scpExec="${scpExec}"
+ scpTarget="${scpTarget}"
+ sshExec="${sshExec}"
+ />
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedValidate.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedValidate.xml
new file mode 100644
index 0000000..351889d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedValidate.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<project name="Validate a Feed" default="validateFeed" basedir="../">
+ <!-- TODO: set correct path to EMF plugins -->
+ <property name="EMF_HOME" value="../../eclipse-plugins-emf22/eclipse/plugins"/>
+ <echo message="Using EMF_HOME = ${EMF_HOME}"/>
+
+ <taskdef name="validateFeed"
+ classname="org.eclipse.releng.util.rss.emf.RSSFeedValidatorDynamicTask">
+ <classpath>
+ <pathelement path="feedValidator.jar"/>
+ <fileset dir="${EMF_HOME}">
+ <include name="**/org.eclipse.emf.ecore_*.jar"/>
+ <include name="**/org.eclipse.emf.common_*.jar"/>
+ <include name="**/org.eclipse.emf.ecore.xmi_*.jar"/>
+ <include name="**/org.eclipse.xsd_*.jar"/>
+ </fileset>
+ </classpath>
+ </taskdef>
+
+ <!-- debug: 0|1|2 -->
+ <target name="validateFeed" description="verify if the feed is valid with respect to the schema">
+ <validateFeed
+ debug="2"
+ XSDFile="../schema/atom10_build.xsd"
+ XMLFile="../data/builds-emf.xml" >
+ </validateFeed>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.sh
new file mode 100644
index 0000000..631539c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.sh
@@ -0,0 +1,15 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+export JAVA_HOME=/opt/sun-java2-5.0;
+export ANT_HOME=/opt/apache-ant-1.6;
+$ANT_HOME/bin/ant -f feedWatch.xml;
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.xml
new file mode 100644
index 0000000..9494d05
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/feedWatch.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+
+<project name="Watch Feed" default="watchFeed">
+
+ <taskdef name="WatchFeed"
+ classname="org.eclipse.releng.services.rss.RSSFeedWatcherTask"
+ classpath="../feedTools.jar"/>
+
+ <!-- 1. Define property file -->
+ <target name="init">
+ <!-- <property file="../properties/feedWatch.emf.properties"/> -->
+ <property file="../properties/feedWatch.uml2.properties"/>
+ </target>
+
+ <!-- 2. Watch feed for certain change conditions and respond if necessary -->
+ <target name="watchFeed" depends="init" description="Watch feed for certain change conditions and respond if necessary">
+ <WatchFeed
+ debug="${debug}"
+ file="${file}"
+ feedURL="${feedURL}"
+ feedWatchActions="${feedWatchActions}"
+ />
+
+ <!--
+ Different ways to get at the results of the task include:
+
+ feedWatchAction.Result.0 - The result returned from the <exec> task; if set, something bad happened
+ feedWatchAction.Error.0 - Details about the error that occurred, if set, something bad happened
+ feedWatchAction.Output.0 - Console output from your <exec>, if any;
+ this will depend on what you run in response to a feed change, and if that process produces console output
+ feedWatchAction.OldValue.0 - The original value of the node you asked for, from the previous cached version of the feed
+ feedWatchAction.NewValue.0 - The changed value of the node you asked for, from the latest version of the feed;
+ if you asked for changes to the test status for performance tests, this could be "PASS";
+ if you asked for any changes to the feed, this will be the XML datestamp of the last update, eg: 2006-05-04T12:14:33Z
+ feedWatchAction.TheValue.0 - Even if the original value is unchanged, this will contain the NewValue.
+ This is useful to determine if the value changed (check if NewValue.0 is defined), but also to have the value,
+ in case you need to pass it to a downstream script. For example, you can check //*[name()='entry'][1]/*/*[name()='build']/@type - which
+ if the feed only contains S builds, will never change, and NewValue.0 will be undefined; however, you need the "S" value,
+ so use this property instead of NewValue.0 in order to pass it to the next script.
+
+ If you are watching for more than one condition, you can check for feedWatchAction.NewValue.0, feedWatchAction.NewValue.1, feedWatchAction.NewValue.2, etc.
+ -->
+
+ <!--
+ <echoproperties format="text">
+ <propertyset><propertyref regex="feedWatchAction\.(Result|Error|Output|NewValue|OldValue|TheValue)\.0"/></propertyset>
+ </echoproperties>
+ -->
+
+ <echo message="feedWatchAction.OldValue.0 = ${feedWatchAction.OldValue.0}"/>
+ <echo message="feedWatchAction.NewValue.0 = ${feedWatchAction.NewValue.0}"/>
+ <echo message="feedWatchAction.TheValue.0 = ${feedWatchAction.TheValue.0}"/>
+ <echo message="feedWatchAction.OldValue.1 = ${feedWatchAction.OldValue.1}"/>
+ <echo message="feedWatchAction.NewValue.1 = ${feedWatchAction.NewValue.1}"/>
+ <echo message="feedWatchAction.TheValue.1 = ${feedWatchAction.TheValue.1}"/>
+ <echo message="feedWatchAction.OldValue.2 = ${feedWatchAction.OldValue.2}"/>
+ <echo message="feedWatchAction.NewValue.2 = ${feedWatchAction.NewValue.2}"/>
+ <echo message="feedWatchAction.TheValue.2 = ${feedWatchAction.TheValue.2}"/>
+
+ <!-- 3. now we can respond to a changed/unchanged condition if desired -->
+ <antcall target="respondToFeedUnchanged"/>
+ <antcall target="respondToFeedChanged"/>
+
+ </target>
+
+ <!-- 3a. If not responding via shell <exec>, respond now by checking property(ies) for results -->
+ <target name="respondToFeedUnchanged" description="Respond to feed unchanged" unless="feedWatchAction.NewValue.0">
+ <echo message="Feed unchanged! Should we do something, like waiting for some period of time and trying again?"/>
+ <!-- add steps to do here, like sleeping & re-firing, sending a nag note to someone, etc. -->
+ </target>
+ <!-- 3b. If not responding via shell <exec>, respond now by checking property(ies) for results -->
+ <target name="respondToFeedChanged" description="Respond to feed changed" if="feedWatchAction.NewValue.0">
+ <echo message="Feed changed! Time to do something... but what?"/>
+ <!-- add steps to do here, like firing an email, starting a build, etc. -->
+
+ <!-- eg., wait 30 seconds and try again -->
+ <!-- <echo message="Sleeping..."/>
+ <exec executable="sleep" resolveexecutable="true"><arg line="10"/></exec>
+ <echo message="Spawning..."/>
+ <exec executable="feedWatch.sh" resolveexecutable="true" spawn="true"/> -->
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/sendEmailAlert.sh b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/sendEmailAlert.sh
new file mode 100644
index 0000000..3906f9d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/scripts_rss/sendEmailAlert.sh
@@ -0,0 +1,103 @@
+#*******************************************************************************
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+#*******************************************************************************
+#!/bin/sh
+
+# simple sample script to fire an email from the local machine to some user to
+# notify them of a change to the watched feed
+
+# Requirements:
+# tested on Debian (Kubuntu), using
+# exim 3.36-16
+# mailx 1:8.1.2-0.20040524cvs-4
+
+debug=0;
+feedURL="";
+xpath="";
+newvalue="";
+oldvalue="";
+
+while [ "$#" -gt 0 ]; do
+ case $1 in
+ '-debug')
+ debug=$2;
+ shift 1
+ ;;
+ '-feedURL')
+ feedURL=$2;
+ shift 1
+ ;;
+ '-xpath')
+ xpath=$2;
+ shift 1
+ ;;
+ '-oldvalue')
+ oldvalue=$2;
+ shift 1
+ ;;
+ '-newvalue')
+ newvalue=$2;
+ shift 1
+ ;;
+ esac
+ shift 1
+done
+
+if [ $debug -gt 0 ]; then
+ echo "[sendEmailAlert] Started `date +%H:%M:%S`. Executing with the following options:"
+ echo "-debug $debug";
+ echo "-feedURL $feedURL";
+ echo "-xpath $xpath";
+ echo "-oldvalue $oldvalue";
+ echo "-newvalue $newvalue";
+fi
+
+tmpfile="/tmp/sendEmailAlert.sh.tmp";
+echo "" > $tmpfile;
+
+# compose message
+echo "Eclipse RSS Feed has been updated." >> $tmpfile;
+echo "" >> $tmpfile;
+echo "Here's what happened:" >> $tmpfile;
+echo "" >> $tmpfile;
+
+if [ "x$xpath" != "x" ]; then echo "Changed Node: "$xpath >> $tmpfile; fi
+if [ "x$oldvalue" != "x" ]; then echo "Old Value: "$oldvalue >> $tmpfile; fi
+if [ "x$newvalue" != "x" ]; then echo "New Value: "$newvalue >> $tmpfile; fi
+if [ "x$feedURL" != "x" ]; then echo "Feed URL: "$feedURL >> $tmpfile; fi
+
+echo "" >> $tmpfile;
+
+#assemble mail info
+toAddress="codeslave@ca.ibm.com";
+fromAddress="Eclipse Build Team <NOSUCHADDRESS@eclipse.org>";
+subject="Eclipse RSS Feed Updated!";
+MAIL="/usr/bin/mail";
+
+if [ $debug -gt 0 ]; then
+ echo "Sending the following email using "$MAIL":";
+ echo "--";
+ echo "Subject: "$subject;
+ echo "To: "$toAddress
+ echo "From: "$fromAddress
+ echo "--";
+ cat $tmpfile;
+ echo "--";
+fi
+
+# send message
+cat $tmpfile | $MAIL -s "$subject" -a "From: $fromAddress" $toAddress;
+
+# cleanup
+rm -fr $tmpfile;
+
+if [ $debug -gt 0 ]; then
+ echo "Done.";
+fi
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildMachineManager.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildMachineManager.java
new file mode 100644
index 0000000..8cb6400
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildMachineManager.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on 8-Jan-2004
+ *
+ * To change this generated comment go to
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package org.eclipse.releng;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.StringTokenizer;
+import java.util.Properties;
+import java.io.PrintWriter;
+
+/**
+ * @author SDimitrov
+ *
+ * This class finds an available build machine by reading a registry of build
+ * machines and their status.
+ *
+ */
+public class BuildMachineManager extends Thread {
+ // registry mapping of machines being used by a given build
+ //list is the path to the configuration of build machines available for a
+ // given build type
+ // waitInterval is the number of seconds to wait if no machines are
+ // available for a given build purpose
+ // findKey represents the key in cfg from which which to obtain the list of
+ // machines
+ // createKey is written to the registry with the machine name that is
+ // available
+
+ private String markerContainer;
+ private int waitInterval;
+ private String markerName;
+ private String markerKey="0";
+ private String cfgKey;
+ private String cfg;
+
+ public BuildMachineManager() {
+ super();
+ }
+ public BuildMachineManager(
+ String cfg,
+ String markerContainer,
+ int waitInterval,
+ String markerName,
+ String markerKey,
+ String cfgKey) {
+ this.waitInterval = waitInterval;
+ this.cfg = cfg;
+ this.markerContainer = markerContainer;
+ this.markerName = markerName;
+ this.markerKey = markerKey;
+ this.cfgKey = cfgKey;
+ this.run();
+ }
+
+ public void run() {
+ String[] machines = getNames();
+
+ if (new File(markerContainer+"/"+markerName+".marker").exists()){
+ System.out.println("Marker already exists: "+markerName+".marker");
+ return;
+ }
+
+ boolean machineFound = false;
+ try {
+ while (!machineFound) {
+ for (int i = 0; i < machines.length; i++) {
+ if (!inUse(machines[i])) {
+ if (createNewMarker(machines[i])) {
+ machineFound = true;
+ return;
+ }
+ }
+ }
+
+ //wait a given interval before re-checking for an available
+ // build machine.
+ sleep(1000 * waitInterval);
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private boolean createNewMarker(String machineName) {
+ //create a temporary lock on marker container
+
+ File lock = new File(markerContainer + "/" + "lock");
+ if (lock.exists())
+ return false;
+
+ try {
+ File markerFile = new File(markerContainer+"/"+markerName+".marker");
+ lock.createNewFile();
+ markerFile.createNewFile();
+ PrintWriter out = new PrintWriter(new FileWriter(markerFile));
+ out.println(markerKey+"=" + machineName);
+ out.flush();
+ out.close();
+ lock.delete();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ private boolean inUse(String machineName) {
+
+ File container = new File(markerContainer);
+
+ if (container.exists() && container.isDirectory()) {
+ Properties properties = null;
+ File[] markerFiles = container.listFiles();
+ for (int i = 0; i < markerFiles.length; i++) {
+ File markerFile = markerFiles[i];
+ if (markerFile.getName().endsWith(".marker")) {
+ properties = new Properties();
+ try {
+ FileInputStream in = new FileInputStream(markerFiles[i]);
+ properties.load(in);
+ in.close();
+ if (properties.containsValue(machineName)){
+ return true;
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private String[] getNames() {
+ StringTokenizer tokenizer = new StringTokenizer(getList(), ",");
+ String[] names = new String[tokenizer.countTokens()];
+ int i = 0;
+
+ while (tokenizer.hasMoreTokens()) {
+ names[i++] = tokenizer.nextToken();
+ }
+ return names;
+ }
+
+ private String getList() {
+ Properties cfgProperties = new Properties();
+ try {
+ FileInputStream in = new FileInputStream(new File(cfg));
+ cfgProperties.load(in);
+ in.close();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return cfgProperties.getProperty(cfgKey);
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildProperties.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildProperties.java
new file mode 100644
index 0000000..927e461
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/BuildProperties.java
@@ -0,0 +1,334 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import java.io.*;
+import java.util.Properties;
+
+/**
+ * Class that stores build identification information taken from monitor.
+ * properties as String objects
+ */
+public class BuildProperties {
+ // recipients key value setting. Comma separated list of email addresses of those who should
+ // receive build information
+ private String toRecipientList = "";
+
+ // text message notification list
+ private String textRecipientList = "";
+
+ // email address of the sender
+ private String sender = "";
+ // mail server name
+ private String host = "";
+
+ // default name of the build log file used with listener
+ private String logFile = "index.php";
+
+ // the prefix prepended to the subject of build related emails
+ private String buildSubjectPrefix="[build]";
+
+ // the build id, typically <buildType><build date>
+ private String buildid;
+ // the date and time of the build
+ private String timestamp;
+ // the name of the directory containing the builds, typically <buildType>-<buildType><build date>-<timestamp>
+ private String buildLabel;
+
+ // the http download URL
+ private String httpUrl;
+
+ // the ftp download URL
+// private String ftpUrl;
+
+ // the Object that holds the key value pairs in monitor.properties
+ private Properties buildProperties;
+
+ public BuildProperties (){
+ this("monitor.properties");
+ }
+
+
+ public BuildProperties(String monitorProperties) {
+ buildProperties = new Properties();
+ // retrieve information from monitor.properties file.
+ // This file should reside in the same directory as the startup.jar at build time.
+ try {
+ buildProperties.load(
+ new FileInputStream(new File(monitorProperties)));
+
+ try {
+ buildSubjectPrefix = buildProperties.get("buildSubjectPrefix").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for buildSubjectPrefix not found in monitor.properties");
+ System.out.println(
+ "Default value, buildSubjectPrefix=[build] will be used.");
+
+ }
+
+ try {
+ httpUrl = buildProperties.get("httpUrl").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for httpUrl not found in monitor.properties");
+ }
+
+ /*try {
+ ftpUrl = buildProperties.get("ftpUrl").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for ftpUrl not found in monitor.properties");
+ }*/
+
+ try {
+ buildid = buildProperties.get("buildId").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for buildId not found in monitor.properties");
+ }
+
+ try {
+ buildLabel = buildProperties.get("buildLabel").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for buildLabel not found in monitor.properties");
+ }
+ try {
+ timestamp = buildProperties.get("timestamp").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for timestamp not found in monitor.properties");
+ }
+
+ try {
+ toRecipientList = buildProperties.get("recipients").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for recipients not found in monitor.properties");
+
+ }
+
+ try {
+ textRecipientList = buildProperties.get("textRecipients").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for textRecipients not found in monitor.properties");
+
+ }
+
+ try {
+ sender = buildProperties.get("sender").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for sender not found in monitor.properties");
+ }
+
+ try {
+ host = buildProperties.get("host").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for host not found in monitor.properties");
+ }
+
+ try {
+ logFile = buildProperties.get("log").toString();
+ } catch (NullPointerException e) {
+ System.out.println(
+ "Value for log not found in monitor.properties");
+ System.out.println(
+ "Default value, log=index.php will be used.");
+
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+ public static void main(String args[]) {
+ new BuildProperties();
+ }
+
+
+ /**
+ * Returns the buildLabel.
+ * @return String
+ */
+ public String getBuildLabel() {
+ return buildLabel;
+ }
+
+ /**
+ * Sets the buildLabel.
+ * @param buildLabel The buildLabel to set
+ */
+ public void setBuildLabel(String buildLabel) {
+ this.buildLabel = buildLabel;
+ }
+
+ /**
+ * Returns the logFile.
+ * @return String
+ */
+ public String getLogFile() {
+ return logFile;
+ }
+
+ /**
+ * Sets the logFile.
+ * @param logFile The logFile to set
+ */
+ public void setLogFile(String logFile) {
+ this.logFile = logFile;
+ }
+
+ /**
+ * Returns the buildid.
+ * @return String
+ */
+ public String getBuildid() {
+ return buildid;
+ }
+
+ /**
+ * Returns the timestamp.
+ * @return String
+ */
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ /**
+ * Sets the buildid.
+ * @param buildid The buildid to set
+ */
+ public void setBuildid(String buildid) {
+ this.buildid = buildid;
+ }
+
+ /**
+ * Sets the timestamp.
+ * @param timestamp The timestamp to set
+ */
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ /**
+ * Returns the host.
+ * @return String
+ */
+ public String getHost() {
+ return host;
+ }
+
+ /**
+ * Returns the recipientList.
+ * @return String
+ */
+ public String getToRecipientList() {
+ return toRecipientList;
+ }
+
+ /**
+ * Returns the sender.
+ * @return String
+ */
+ public String getSender() {
+ return sender;
+ }
+
+ /**
+ * Sets the host.
+ * @param host The host to set
+ */
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ /**
+ * Sets the recipientList.
+ * @param recipientList The recipientList to set
+ */
+ public void setRecipientList(String recipientList) {
+ this.toRecipientList = recipientList;
+ }
+
+ /**
+ * Sets the sender.
+ * @param sender The sender to set
+ */
+ public void setSender(String sender) {
+ this.sender = sender;
+ }
+
+ /**
+ * Returns the buildSubjectPrefix.
+ * @return String
+ */
+ public String getBuildSubjectPrefix() {
+ return buildSubjectPrefix;
+ }
+
+ /**
+ * Sets the buildSubjectPrefix.
+ * @param buildSubjectPrefix The buildSubjectPrefix to set
+ */
+ public void setBuildSubjectPrefix(String buildSubjectPrefix) {
+ this.buildSubjectPrefix = buildSubjectPrefix;
+ }
+
+ /**
+ * Returns the httpUrl.
+ * @return String
+ */
+ public String getHttpUrl() {
+ return httpUrl;
+ }
+
+ /**
+ * Sets the httpUrl.
+ * @param httpUrl The httpUrl to set
+ */
+ public void setHttpUrl(String downloadUrl) {
+ this.httpUrl = downloadUrl;
+ }
+
+ /**
+ * Returns the ftpUrl.
+ * @return String
+ *//*
+ public String getftpUrl() {
+ return ftpUrl;
+ }*/
+
+ /**
+ * Sets the ftpUrl.
+ * @param ftpUrl The httpUrl to set
+ *//*
+ public void setftpUrl(String downloadUrl) {
+ this.ftpUrl = downloadUrl;
+ }*/
+
+
+ public String getTextRecipientList() {
+ return textRecipientList;
+ }
+
+
+ public void setTextRecipientList(String textRecipientList) {
+ this.textRecipientList = textRecipientList;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CompileErrorCheck.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CompileErrorCheck.java
new file mode 100644
index 0000000..187f3c5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CompileErrorCheck.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+/**
+ * A custom Ant task that finds compile logs containing compile
+ * errors. The compile logs with errors are sent as email attachments using
+ * information in monitor.properties.
+ */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class CompileErrorCheck extends Task {
+
+ private static final class CompilerErrorCheckerHandler extends DefaultHandler {
+ boolean hasErrors = false;
+
+ public void startElement(String uri, String localName,
+ String name, Attributes attributes) throws SAXException {
+ if (this.hasErrors) return;
+ if ("problem_summary".equals(name)) {
+ // problem_summary name
+ String value = attributes.getValue("errors");
+ this.hasErrors = value != null && !value.equals("0");
+ }
+ }
+ public boolean hasErrors() {
+ return this.hasErrors;
+ }
+ }
+
+ //directory containing of build source, parent of features and plugins
+ private String install = "";
+
+ //keep track of compile logs containing errors
+ private Vector logsWithErrors;
+
+ // keep track of the factory to use
+ private SAXParser parser;
+
+ public CompileErrorCheck() {
+ this.logsWithErrors = new Vector();
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ this.parser = null;
+
+ try {
+ this.parser = factory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void execute() throws BuildException {
+ if (parser == null) return;
+ findLogs(new File(install));
+ sendNotice();
+ }
+
+ // test
+ public static void main(String[] args) {
+ CompileErrorCheck checker = new CompileErrorCheck();
+ checker.install="d:/compilelogs";
+ checker.execute();
+ }
+
+ private void findLogs(File aFile) {
+ if (!aFile.exists()) return;
+ // basis case
+ if (aFile.isFile()) {
+ String absolutePath = aFile.getAbsolutePath();
+ if (absolutePath.endsWith(".xml")) {
+ parse(aFile);
+ } else if (absolutePath.endsWith(".jar.bin.log")||absolutePath.endsWith("dot.bin.log")){
+ read(aFile);
+ }
+ } else {
+ //recurse into directories looking for and reading compile logs
+ File files[] = aFile.listFiles();
+
+ if (files != null) {
+ for (int i = 0, max = files.length; i < max; i++) {
+ findLogs(files[i]);
+ }
+ }
+ }
+ }
+
+ private void read(File file) {
+ //read the contents of the log file, and return contents as a String
+ if (file.length()==0)
+ return;
+
+ BufferedReader in = null;
+ String aLine;
+
+ try {
+ in = new BufferedReader(new FileReader(file));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ while ((aLine = in.readLine()) != null) {
+ int statusSummaryIndex=aLine.indexOf("problem (");
+ if (statusSummaryIndex==-1)
+ statusSummaryIndex=aLine.indexOf("problems (");
+
+ if (statusSummaryIndex!=-1&&(aLine.indexOf("error", statusSummaryIndex) != -1)){
+ logsWithErrors.add(file);
+ System.out.println(file.getName()+" has compile errors.");
+ return;
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ // make sure we don't leave any file handle open
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+
+ private void parse(File file) {
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(file));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ InputSource inputSource = new InputSource(reader);
+
+ CompilerErrorCheckerHandler compilerErrorCheckerHandler = new CompilerErrorCheckerHandler();
+ try {
+ parser.parse(inputSource, compilerErrorCheckerHandler);
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ // make sure we don't leave any file handle open
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+
+ if (compilerErrorCheckerHandler.hasErrors()) {
+ logsWithErrors.add(new File(file.getParentFile(),file.getName().replaceAll(".xml", ".html")));
+ System.out.println(file.getName()+" has compile errors.");
+ }
+ }
+
+ private void sendNotice() {
+ //send email notification that there are compile errors in the build
+ //send the logs as attachments
+ Enumeration enumeration = logsWithErrors.elements();
+
+ if (logsWithErrors.size() > 0) {
+ try{
+
+ Mailer mailer = new Mailer();
+ String [] logFiles = new String [logsWithErrors.size()];
+
+ int i=0;
+
+ while (enumeration.hasMoreElements()) {
+ logFiles[i++]=((File) enumeration.nextElement()).getAbsolutePath();
+ }
+
+ mailer.sendMultiPartMessage("Compile errors in build", "Compile errors in build. See attached compile logs.", logFiles);
+ } catch (NoClassDefFoundError e){
+ while (enumeration.hasMoreElements()) {
+ String path=((File) enumeration.nextElement()).getAbsolutePath();
+ String nameWithPlugin=path.substring(path.indexOf("plugins"),path.length());
+ System.out.println("Compile errors detected in "+nameWithPlugin);
+ }
+
+ System.out.println("Unable to send email notice of compile errors.");
+ System.out.println("The j2ee.jar may not be on the Ant classpath.");
+
+ }
+
+ }
+
+ }
+
+ /**
+ * Gets the install.
+ * @return Returns a String
+ */
+ public String getInstall() {
+ return install;
+ }
+
+ /**
+ * Sets the install.
+ * @param install The install to set
+ */
+ public void setInstall(String install) {
+ this.install = install;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CvsDiffParser.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CvsDiffParser.java
new file mode 100644
index 0000000..9fdc204
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/CvsDiffParser.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Dec 9, 2003
+ *
+ */
+package org.eclipse.releng;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+
+import java.util.Vector;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * @author kmoir
+ *
+ * To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Generation - Code and Comments
+ */
+public class CvsDiffParser extends Task {
+
+ private String mapDiffFile;
+ private Vector updatedMaps;
+
+ /**
+ *
+ */
+ public CvsDiffParser() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ public static void main(String[] args) {
+
+ CvsDiffParser parser = new CvsDiffParser();
+ parser.setMapDiffFile("d:/junk/cvsDiff.txt");
+ parser.execute();
+ }
+
+ public void execute() throws BuildException {
+ parseMapDiffFile();
+ sendNotice();
+ }
+
+ /**
+ * @return Returns the mapDiffFile.
+ */
+ public String getMapDiffFile() {
+ return mapDiffFile;
+ }
+
+ /**
+ * @param mapDiffFile
+ * The mapDiffFile to set.
+ */
+ public void setMapDiffFile(String mapDiffFile) {
+ this.mapDiffFile = mapDiffFile;
+ }
+
+ private void parseMapDiffFile() {
+ updatedMaps = new Vector();
+
+ //read the contents of the Diff file, and return contents as a String
+ if (mapDiffFile.length() == 0)
+ updatedMaps=null;
+
+ BufferedReader in = null;
+ String aLine;
+
+ try {
+ in = new BufferedReader(new FileReader(mapDiffFile));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ while ((aLine = in.readLine()) != null) {
+ if (aLine.startsWith("RCS file")) {
+ String mapPath =
+ (aLine
+ .substring(aLine.indexOf(":"), aLine.indexOf(",")))
+ .trim();
+
+ //verification for actual changes in tags base.plugin
+ while ((aLine = in.readLine()) != null && !aLine.startsWith("===")){
+ if (aLine.startsWith("< plugin")||aLine.startsWith("< fragment")||aLine.startsWith("< feature")||aLine.startsWith("< base.plugin")){
+ updatedMaps.add(new File(mapPath).getName());
+ break;
+ }
+ }
+
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void sendNotice(){
+
+ if (updatedMaps==null || updatedMaps.size()==0){
+ throw new BuildException("Build cancelled - map files unchanged.");
+ }
+
+ Mailer mailer = new Mailer();
+
+ String subject="updated map file listing";
+ String message ="these map files have been updated for the build:\n\n";
+
+ for (int i=0; i<updatedMaps.size();i++){
+ message=message.concat(updatedMaps.elementAt(i).toString()+"\n");
+ }
+
+ try {
+ mailer.sendMessage(subject,message);
+ } catch (NoClassDefFoundError e){
+ System.out.println(message);
+ }
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/ElementParser.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/ElementParser.java
new file mode 100644
index 0000000..01430e9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/ElementParser.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/**
+ * Parses feature.xml, plugin.xml, and fragment.xml files
+ *
+ */
+
+package org.eclipse.releng;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.SAXException;
+import java.io.IOException;
+import java.util.Vector;
+import java.io.File;
+import org.apache.tools.ant.BuildException;
+
+
+public class ElementParser extends DefaultHandler {
+
+ private SAXParser parser;
+ private Vector plugins;
+ private Vector features;
+
+ public Vector getPlugins(){return plugins;}
+ public Vector getFeatures(){return features;}
+
+ public ElementParser() {
+ // Create a Xerces SAX Parser
+ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+
+ try {
+ parser = saxParserFactory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ }
+
+
+
+ // instantiate vectors that will hold lists of plugins and features read from feature.xml
+ plugins = new Vector();
+ features = new Vector();
+ }
+
+ public void parse(String xmlFile){
+
+ // Parse the Document
+ try {
+ parser.parse(xmlFile,this);
+ } catch (SAXException e) {
+ System.err.println (e);
+ } catch (IOException e) {
+ System.err.println (e);
+
+ }
+ }
+
+ public void parse(String install, String type, String id){
+
+ String xmlFile=null;
+
+ if (type.equals("feature"))
+ xmlFile=install+"/features/"+id+"/"+"feature.xml";
+ if (type.equals("plugin"))
+ xmlFile=install+"/plugins/"+id+"/"+"plugin.xml";
+ if (type.equals("fragment"))
+ xmlFile=install+"/plugins/"+"/"+id+"/"+"fragment.xml";
+
+ if (new File(xmlFile).exists())
+ parse(xmlFile);
+
+ else{
+ throw new BuildException("The following "+type+" "+id+" did not get fetched.");
+ }
+
+ }
+
+ // Start Element Event Handler
+ public void startElement (String uri, String local,
+ String qName, Attributes atts) {
+ if (local.equals("plugin")||local.equals("fragment"))
+ add(atts.getValue("id"), plugins);
+ if (local.equals("feature"))
+ add(atts.getValue("id")+"-feature", features);
+ }
+
+ public void add(String element, Vector v){
+ if (!v.contains(element))
+ v.add(element);
+ }
+
+ // Test
+ public static void main (String[] args) {
+ ElementParser xmlParser = new ElementParser();
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.win32-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.linux.motif-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.linux.gtk-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.solaris.motif-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.aix.motif-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.qnx.photon-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.jdt-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.pde-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.sdk.examples-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.sdk.tests-feature");
+
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.win32.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.linux.motif.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.linux.gtk.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.solaris.motif.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.aix.motif.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.platform.qnx.photon.source-feature");
+ xmlParser.parse("l:/vabase/team/sonia", "feature", "org.eclipse.jdt.source-feature");
+
+ System.out.println(xmlParser.plugins);
+ System.out.println(xmlParser.features);
+
+ System.out.println(xmlParser.plugins.size()+" plugins expected");
+ System.out.println(xmlParser.features.size()+" features expected");
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FetchValidator.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FetchValidator.java
new file mode 100644
index 0000000..e9a8383
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FetchValidator.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.Enumeration;
+import java.io.*;
+
+/**
+ * Uses an ElementParser to read a list of feature.xml files and to determine
+ * if all plugins defined in the features are present.
+ */
+
+public class FetchValidator extends Task {
+
+ //directory containing of build source, parent of features and plugins
+ private String install = "";
+
+ //Comma separated list of features to parse
+ private String list;
+
+ //Elements to check for post fetch (use name of project in dev.eclipse.org)
+ private Vector features;
+ private Vector plugins;
+
+ //keeps track of missing elements
+ private Vector missingPlugins;
+ private Vector missingFeatures;
+
+
+ //parser
+ ElementParser parser;
+
+ //test
+ public static void main(String args[]) {
+ FetchValidator validator = new FetchValidator();
+ validator.install = "l:/vabase/team/sonia";
+ validator.list =
+ "org.eclipse.platform-feature,org.eclipse.platform.win32-feature,org.eclipse.platform.linux.motif-feature";
+ validator.getListOfFeatures(validator.list);
+
+ validator.execute();
+ }
+
+ // entry point
+ public void execute() throws BuildException {
+ getListOfFeatures(list);
+
+ if (!allPresent()) {
+ String missingFeaturesDesc="";
+ String missingPluginsDesc="";
+
+ if (missingFeatures.size() > 0) {
+ for (int i = 0; i < missingFeatures.size(); i++) {
+ missingFeaturesDesc+="\n\r"+missingFeatures.get(i).toString();
+ }
+ }
+
+ if (missingPlugins.size() > 0) {
+ for (int i = 0; i < missingPlugins.size(); i++) {
+ missingPluginsDesc+="\n\t"+missingPlugins.get(i).toString();
+ }
+ }
+ throw new BuildException("The following projects did not get fetched: \n"+missingFeaturesDesc+missingPluginsDesc+"\n"
+ +"\n\nPossible causes of missing source files include an incorrect Tag entry in a .map file or problems with CVS repositories.");
+ }
+
+ System.out.println("Fetch Complete.");
+ }
+
+ public FetchValidator() {
+ parser = new ElementParser();
+ missingPlugins = new Vector();
+ missingFeatures = new Vector();
+ }
+
+ private void getListOfFeatures(String list) {
+
+ StringTokenizer tokenizer = new StringTokenizer(list, ",");
+
+ while (tokenizer.hasMoreTokens()) {
+ parser.parse(
+ install,
+ "feature",
+ (String) tokenizer.nextToken().trim());
+ }
+
+ features = parser.getFeatures();
+ plugins = parser.getPlugins();
+ }
+
+ private boolean allPresent() {
+ // verify presence of all source projects for the build.
+ // collect a list of missing plugins (or fragments), and features
+
+ boolean allPresent = true;
+ Enumeration enumeration = plugins.elements();
+
+ while (enumeration.hasMoreElements()) {
+ String plugin = (String) enumeration.nextElement();
+ if (new File(install + "/plugins/" + plugin).exists())
+ continue;
+ else {
+ missingPlugins.add(plugin);
+ allPresent = false;
+ }
+ }
+
+ enumeration = features.elements();
+
+ while (enumeration.hasMoreElements()) {
+ String feature = (String) enumeration.nextElement();
+ if (new File(install + "/features/" + feature).exists())
+ continue;
+ else {
+ missingFeatures.add(feature);
+ allPresent = false;
+ }
+ }
+
+ return allPresent;
+ }
+
+ /**
+ * Gets the install.
+ * @return Returns a String
+ */
+ public String getInstall() {
+ return install;
+ }
+
+ /**
+ * Gets the list.
+ * @return Returns a String
+ */
+ public String getList() {
+ return list;
+ }
+
+ /**
+ * Sets the install.
+ * @param install The install to set
+ */
+ public void setInstall(String install) {
+ this.install = install;
+ }
+
+ /**
+ * Sets the list.
+ * @param list The list to set
+ */
+ public void setList(String list) {
+ this.list = list;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FindMachineTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FindMachineTask.java
new file mode 100644
index 0000000..aff7723
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/FindMachineTask.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on 8-Jan-2004
+ *
+ * To change this generated comment go to
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package org.eclipse.releng;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+/**
+ * @author SDimitrov
+ *
+ * To change this generated comment go to
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+public class FindMachineTask extends Task {
+
+ // findKey represents the key in cfg from which which to obtain the list of machines
+ // createKey is written to the registry with the machine name that is available
+ //registry mapping of machines being used by a given build
+ private String markerContainer;
+
+//time in seconds to wait before re-checking for an available machine
+ private int waitInterval;
+ private String markerName;
+ private String markerKey="0";
+//list is the path to the configuration of build machines available for a given build type
+ private String cfgKey;
+ private String cfg;
+
+ /**
+ *
+ */
+ public static void main(String args[]){
+ FindMachineTask test = new FindMachineTask();
+ test.markerContainer = "D:\\junk\\markers";
+ test.cfg="D:\\workspaces\\current\\eclipseInternalBuildTools\\testConfig.properties";
+ test.cfgKey="windowstesting";
+ test.markerName = "200412091500";
+ test.waitInterval = 10;
+ test.execute();
+ }
+ public FindMachineTask() {
+ super();
+ }
+ public void execute() throws BuildException {
+ new BuildMachineManager(cfg,markerContainer,waitInterval,markerName,markerKey,cfgKey);
+ }
+ /**
+ * @return Returns the cfg.
+ */
+ public String getCfg() {
+ return cfg;
+ }
+
+ /**
+ * @param cfg The cfg to set.
+ */
+ public void setCfg(String cfg) {
+ this.cfg = cfg;
+ }
+
+ /**
+ * @return Returns the createKey.
+ */
+ public String getMarkerName() {
+ return markerName;
+ }
+
+ /**
+ * @param createKey The createKey to set.
+ */
+ public void setMarkerName(String markerName) {
+ this.markerName = markerName;
+ }
+
+/**
+ * @return Returns the findKey.
+ */
+public String getCfgKey() {
+ return cfgKey;
+}
+
+/**
+ * @param findKey The findKey to set.
+ */
+public void setCfgKey(String cfgKey) {
+ this.cfgKey = cfgKey;
+}
+
+ /**
+ * @return Returns the registry.
+ */
+ public String getMarkerContainer() {
+ return markerContainer;
+ }
+
+ /**
+ * @param registry The registry to set.
+ */
+ public void setMarkerContainer(String markerContainer) {
+ this.markerContainer = markerContainer;
+ }
+
+/**
+ * @return Returns the waitInterval.
+ */
+public int getWaitInterval() {
+ return waitInterval;
+}
+
+/**
+ * @param waitInterval The waitInterval to set.
+ */
+public void setWaitInterval(int waitInterval) {
+ this.waitInterval = waitInterval;
+}
+
+ /**
+ * @return Returns the markerKey.
+ */
+ public String getMarkerKey() {
+ return markerKey;
+ }
+
+ /**
+ * @param markerKey The markerKey to set.
+ */
+ public void setMarkerKey(String markerKey) {
+ this.markerKey = markerKey;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/GenerateExcludeListTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/GenerateExcludeListTask.java
new file mode 100644
index 0000000..fcc5f0f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/GenerateExcludeListTask.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+public class GenerateExcludeListTask extends Task {
+
+ private ArrayList a = new ArrayList();
+ private String mapFile;
+ private String outputFile;
+
+ public GenerateExcludeListTask() {
+ super();
+ }
+
+ public static void main(String[] args) {
+ GenerateExcludeListTask parser = new GenerateExcludeListTask();
+ parser.setMapFile("c:\\temp\\orbit.map");
+ parser.setOutputFile("c:\\temp\\orbit.map.new");
+ parser.execute();
+ }
+
+ public String getOutputFile() {
+ return outputFile;
+ }
+
+ public void setOutputFile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+ public String getMapFile() {
+ return mapFile;
+ }
+
+ public void setMapFile(String mapFile) {
+ this.mapFile = mapFile;
+ }
+
+ public void execute() throws BuildException {
+ readMap();
+ writeProp();
+ }
+
+ // for old map file format //
+
+ /* private void readMap() {
+ try {
+ BufferedReader r = new BufferedReader(new FileReader(mapFile));
+ String line;
+ while ((line = r.readLine()) != null) {
+ int start = line.lastIndexOf('/');
+ int lastcomma = line.lastIndexOf(',');
+ int end = line.length();
+ if (lastcomma > start) {
+ end = lastcomma;
+ }
+ int lastzip = line.lastIndexOf(".zip");
+ if (lastzip > start) {
+ String rstring = line.substring(0, lastzip);
+ line = rstring + ".jar";
+ }
+ if ((start < end) && (start > 0)) {
+ String substr = line.substring(start + 1, end);
+ a.add(substr);
+ }
+ }
+ r.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } */
+
+ private void readMap() {
+ try {
+ BufferedReader r = new BufferedReader(new FileReader(mapFile));
+ String line;
+ while ((line = r.readLine()) != null) {
+ int start = line.indexOf("plugin@") + 7;
+ int end = line.indexOf(",");
+ String plugin = "";
+ if ((start > 0) && (end > 0)) {
+ plugin = line.substring(start, end);
+ }
+ String version = "";
+ int startv = line.indexOf("version=") + 8;
+ int endv = line.indexOf(",", startv);
+ if ((startv > 0) && (endv > 0)) {
+ version = line.substring(startv, endv);
+ }
+ if ((version != "") && (plugin != "")) {
+ String l = plugin + "_" + version + ".jar";
+ a.add(l);
+ }
+ }
+ r.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void writeProp() {
+
+ try {
+ BufferedWriter out = new BufferedWriter(new FileWriter(outputFile));
+ for (Iterator iterator = a.iterator(); iterator.hasNext();) {
+ String s = iterator.next().toString();
+ if (iterator.hasNext()) {
+ out.write("plugins/" + s + ",");
+ } else {
+ out.write("plugins/" + s);
+ }
+ }
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/Mailer.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/Mailer.java
new file mode 100644
index 0000000..ab83b38
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/Mailer.java
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+/**
+ * A Class that sends build related email messages. host, sender, recipient and
+ * build related information set in monitor.properties
+ */
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.*;
+import javax.mail.internet.*;
+
+import java.io.File;
+import java.util.StringTokenizer;
+import java.util.Properties;
+
+public class Mailer {
+
+ // flag that determines whether or not to send mail
+ boolean sendMail = true;
+
+ // the Object that holds the key value pairs in monitor.properties
+ private BuildProperties buildProperties;
+
+ //convert the comma separated list of email addressed into an array of Address objects
+ private Address[] getAddresses(String recipientList) {
+ int i = 0;
+ StringTokenizer recipients = new StringTokenizer(recipientList, ",");
+ Address[] addresses = new Address[recipients.countTokens()];
+
+ while (recipients.hasMoreTokens()) {
+ try {
+ addresses[i++] = new InternetAddress(recipients.nextToken());
+ } catch (AddressException e) {
+ System.out.println("Unable to create address");
+ }
+ }
+ return addresses;
+ }
+
+ public Mailer(){
+ this("monitor.properties");
+ }
+ public Mailer(String buildPropertiesPath){
+ buildProperties = new BuildProperties(buildPropertiesPath);
+ if (buildProperties.getHost().equals("")||buildProperties.getSender().equals("")||buildProperties.getToRecipientList().equals("")){
+ sendMail=false;
+ }
+ }
+
+
+ public static void main(String args[]) {
+ Mailer mailer=new Mailer(args[0]);
+ mailer.sendTextMessage(args[1],args[2]);
+ }
+
+ public void sendMessage(String aSubject, String aMessage) {
+ if (aSubject == null || aMessage == null || sendMail == false){
+ printEmailFailureNotice(aSubject,aMessage);
+ }
+
+ // Get system properties
+ Properties props = System.getProperties();
+
+ // Setup mail server
+ props.put("mail.smtp.host", buildProperties.getHost());
+
+ // Get session
+ Session session = Session.getDefaultInstance(props, null);
+
+ // Define message
+ MimeMessage message = new MimeMessage(session);
+
+ try {
+
+ // Set the from address
+ message.setFrom(new InternetAddress(buildProperties.getSender()));
+
+ // Set the to address
+ message.addRecipients(Message.RecipientType.TO, getAddresses(buildProperties.getToRecipientList()));
+
+ // Set the subject
+ message.setSubject(buildProperties.getBuildSubjectPrefix()+
+ "Build "
+ + buildProperties.getBuildid()
+ + " (Timestamp: "
+ + buildProperties.getTimestamp()
+ + "):"
+ + aSubject);
+
+ // Set the content
+ message.setText(
+ "Build "
+ + buildProperties.getBuildid()
+ + " (Timestamp: "
+ + buildProperties.getTimestamp()
+ + "): "
+ + aMessage);
+
+ // Send message
+ Transport.send(message);
+
+ } catch (AddressException e) {
+ e.printStackTrace();
+ } catch (MessagingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void sendTextMessage(String aSubject, String aMessage) {
+ if (aSubject == null || aMessage == null || sendMail == false){
+ printEmailFailureNotice(aSubject,aMessage);
+ }
+
+ // Get system properties
+ Properties props = System.getProperties();
+
+ // Setup mail server
+ props.put("mail.smtp.host", buildProperties.getHost());
+
+ // Get session
+ Session session = Session.getDefaultInstance(props, null);
+
+ // Define message
+ MimeMessage message = new MimeMessage(session);
+
+ try {
+
+ // Set the from address
+ message.setFrom(new InternetAddress(buildProperties.getSender()));
+
+ // Set the to address
+ message.addRecipients(Message.RecipientType.BCC, getAddresses(buildProperties.getTextRecipientList()));
+
+ // Set the subject
+ message.setSubject(buildProperties.getBuildSubjectPrefix()+
+ "Build "
+ + buildProperties.getBuildid()
+ + ":"
+ + aSubject);
+
+ // Set the content
+ message.setText(aMessage);
+
+ // Send message
+ Transport.send(message);
+
+ } catch (AddressException e) {
+ e.printStackTrace();
+ } catch (MessagingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void sendMultiPartMessage(
+ // a method for sending mail with attachments
+ String aSubject, String aMessage, String[] attachments) {
+ if (aSubject == null || aMessage == null || sendMail == false){
+ printEmailFailureNotice(aSubject,aMessage);
+ }
+
+ // Get system properties
+ Properties props = System.getProperties();
+
+ // Setup mail server
+ props.put("mail.smtp.host", buildProperties.getHost());
+
+ // Get session
+ Session session = Session.getDefaultInstance(props, null);
+
+ // Define message
+ MimeMessage message = new MimeMessage(session);
+
+ Multipart mp = new MimeMultipart();
+
+ try {
+ // Set the from address
+ message.setFrom(new InternetAddress(buildProperties.getSender()));
+
+ // Set the to address
+ message.addRecipients(Message.RecipientType.TO, getAddresses(buildProperties.getToRecipientList()));
+
+ // Set the subject
+ message.setSubject(buildProperties.getBuildSubjectPrefix()+
+ "Build "
+ + buildProperties.getBuildid()
+ + " (Timestamp: "
+ + buildProperties.getTimestamp()
+ + "):"
+ + aSubject);
+
+ // create and fill the first message part
+ MimeBodyPart part = new MimeBodyPart();
+ part.setText(
+ "Build "
+ + buildProperties.getBuildid()
+ + " (Timestamp: "
+ + buildProperties.getTimestamp()
+ + "): "
+ + aMessage);
+ mp.addBodyPart(part);
+
+ //for each attachment create new message part
+ for (int i = 0; i < attachments.length; i++) {
+ MimeBodyPart attachmentPart = new MimeBodyPart();
+ // attach the file to the message
+ FileDataSource attachment = new FileDataSource(attachments[i]);
+ attachmentPart.setDataHandler(new DataHandler(attachment));
+ File attachmentFile=new File(attachments[i]);
+ attachmentPart.setFileName(attachmentFile.getParent()+"-"+attachmentFile.getName());
+ mp.addBodyPart(attachmentPart);
+ }
+
+ // add the Multipart to the message
+ message.setContent(mp);
+
+ Transport.send(message);
+
+ } catch (AddressException e) {
+ } catch (MessagingException e) {
+ }
+ }
+
+ private void printEmailFailureNotice(String aSubject, String aMessage){
+ System.out.println("Email failed. Settings:");
+ System.out.println("\nhost="+buildProperties.getHost()+"\nsender="+buildProperties.getSender()+"\nrecipients="+buildProperties.getToRecipientList());
+ System.out.println("\nSubject="+aSubject+"\nMessage="+aMessage);
+ return;
+ }
+
+ /**
+ * Returns the buildProperties.
+ * @return BuildProperties
+ */
+ public BuildProperties getBuildProperties() {
+ return buildProperties;
+ }
+
+ /**
+ * Sets the buildProperties.
+ * @param buildProperties The buildProperties to set
+ */
+ public void setBuildProperties(BuildProperties buildProperties) {
+ this.buildProperties = buildProperties;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/SystemProperty.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/SystemProperty.java
new file mode 100644
index 0000000..c507ead
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/SystemProperty.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import org.apache.tools.ant.Task;
+
+public class SystemProperty extends Task{
+ //utility to allow modification of System properties from Ant script.
+ private String key;
+ private String value;
+
+ public SystemProperty(){
+ super();
+ }
+
+ public void execute(){
+ System.setProperty(key, value);
+ if (System.getProperty(key).equals(value))
+ System.out.println("System property "+key+" set to "+System.getProperty(key));
+ else{
+ System.out.println("System property "+key+" could not be set. Currently set to "+System.getProperty(key));
+ }
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java
new file mode 100644
index 0000000..ec9d50d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java
@@ -0,0 +1,220 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.tools.ant.Task;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+public class UnpackUpdateJars extends Task {
+
+ /**
+ * @param args
+ */
+ //parent to plugins and features directory which contains update jars
+ private String site;
+ private String output;
+ ArrayList unpackedPlugins=new ArrayList();
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ UnpackUpdateJars up=new UnpackUpdateJars();
+ up.site="C:\\updatejars\\eclipse";
+ up.output="C:\\updatejars\\newsite";
+ up.execute();
+ }
+
+ public UnpackUpdateJars(){
+ super();
+ }
+
+ //unpack features, then unpack plug-ins which are not set to unpack="false"
+ public void execute(){
+ new File(output).mkdirs();
+ new File(output+"/features").mkdirs();
+ new File(output+"/plugins").mkdirs();
+
+ //extract features
+ File featureDir=new File(site,"features");
+ if (!featureDir.exists()){
+ return;
+ }
+ File[] features = featureDir.listFiles();
+ for (int i = 0; i < features.length; i++) {
+ File feature = features[i];
+ if (feature.getName().endsWith(".jar")) {
+ String fileName = feature.getName();
+ String unpackedFeatureName = fileName.substring(0, fileName.length() - 4);
+ File unPackedFeature=new File(output+"/features/"+ unpackedFeatureName);
+ unzip(feature, unPackedFeature);
+ getUnpackedPluginList(new File(unPackedFeature,"feature.xml"));
+ }
+ }
+
+ //unpack plug-ins
+ for (int i=0;i<unpackedPlugins.size();i++){
+ File unpackedPluginDirName=new File(output+"/plugins/"+(String)unpackedPlugins.get(i));
+ File jardPlugin=new File(site,"plugins/"+(String)unpackedPlugins.get(i)+".jar");
+ if (jardPlugin.exists())
+ unzip (jardPlugin,unpackedPluginDirName);
+ }
+ }
+
+ public void unzip(File src, File dest) {
+ Runtime rt = Runtime.getRuntime();
+ String command = "unzip -qo " + src.getPath() + " -d " + dest.getPath();
+ System.out.println("[exec] "+command);
+ Process proc = null;
+ try {
+ proc = rt.exec(command);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ // pick up error messages
+ StreamHandler errorHandler = new StreamHandler(proc.getErrorStream(), "ERROR");
+
+ // pick up output
+ StreamHandler outputHandler = new StreamHandler(proc.getInputStream(), "OUTPUT");
+
+ // kick them off
+ errorHandler.start();
+ outputHandler.start();
+
+ // capture return code
+ int returnCode = 0;
+ try {
+ returnCode = proc.waitFor();
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ if (returnCode!=0)
+ System.out.println("returnCode: " + returnCode);
+
+ }
+
+ class StreamHandler extends Thread {
+ InputStream is;
+
+ String type;
+
+ StreamHandler(InputStream is, String type) {
+ this.is = is;
+ this.type = type;
+ }
+
+ public void run() {
+ try {
+ InputStreamReader isr = new InputStreamReader(is);
+ BufferedReader br = new BufferedReader(isr);
+ String line = null;
+ while ((line = br.readLine()) != null)
+ System.out.println(type + ">" + line);
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+ }
+
+ public String getSite() {
+ return site;
+ }
+
+ public void setSite(String site) {
+ this.site = site;
+ }
+
+ private void getUnpackedPluginList(File featureXml) {
+ Document aDocument=null;
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(featureXml));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ InputSource inputSource = new InputSource(reader);
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ aDocument = builder.parse(inputSource);
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ // Get feature attributes
+ NodeList nodeList=aDocument.getElementsByTagName("plugin");
+ if (nodeList==null)
+ return;
+
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node pluginNode = nodeList.item(i);
+ NamedNodeMap aNamedNodeMap = pluginNode.getAttributes();
+ Node idNode = aNamedNodeMap.getNamedItem("id");
+ Node versionNode = aNamedNodeMap.getNamedItem("version");
+ String pluginDirName = idNode.getNodeValue() + "_" + versionNode.getNodeValue();
+ Node unpackNode = aNamedNodeMap.getNamedItem("unpack");
+ if (unpackNode == null) {
+ if (!unpackedPlugins.contains(pluginDirName)) {
+ unpackedPlugins.add(pluginDirName);
+ }
+ continue;
+ }
+
+ if (unpackNode.getNodeValue().toString().trim().toLowerCase().equals("true")) {
+ if (!unpackedPlugins.contains(pluginDirName)){
+ System.out.println(pluginDirName);
+ unpackedPlugins.add(pluginDirName);
+ }
+ continue;
+ }
+ //copy file to new location
+ File jardPlugin=new File(site,"plugins/"+pluginDirName+".jar");
+ if (jardPlugin.exists())
+ if (!jardPlugin.renameTo(new File(output,"plugins/"+pluginDirName+".jar")))
+ System.out.println("Failed to move "+jardPlugin.getAbsolutePath()+" to "+output+"plugins/"+pluginDirName+".jar");
+ }
+ }
+
+ public String getOutput() {
+ return output;
+ }
+
+ public void setOutput(String output) {
+ this.output = output;
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java
new file mode 100644
index 0000000..bea7263
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import java.io.File;
+
+/*
+ * A class that strips version numbers off built plugin directory names. This
+ * is helpful when prebuilt plugins are used in generating javadoc (on the
+ * classpath).
+ */
+
+public class VersionNumberStripper extends Task {
+
+ //the directory containing the directories and files from which to remove version information
+ private String directory;
+
+ public VersionNumberStripper() {
+ super();
+ }
+
+ public void setDirectory(String dir){directory=dir;}
+
+ public String getDirectory(){return directory;}
+
+ public void execute() throws BuildException {
+ setDirectory(directory);
+ stripVersions();
+ }
+
+ public static void main(String[] args) {
+ new VersionNumberStripper().execute();
+ }
+
+ private void stripVersions(){
+ /* rename directories by removing anything from an underscore onward,
+ * assuming that anything following the first
+ * occurence of an underscore is a version number
+ */
+
+ File file=new File(directory);
+
+ File [] files = file.listFiles();
+
+ for (int i=0; i<files.length; i++){
+ String absolutePath = files[i].getAbsolutePath();
+ String path = absolutePath.substring(0, absolutePath.length()
+ - files[i].getName().length());
+
+ int underScorePos = files[i].getName().indexOf("_");
+ int jarExtPos = files[i].getName().indexOf(".jar");
+ if (underScorePos != -1) {
+ String targetPath;
+ if (jarExtPos != -1) {
+ targetPath =path
+ + files[i].getName().substring(0, underScorePos)
+ + ".jar";
+ } else {
+ targetPath = path
+ + files[i].getName().substring(0, underScorePos);
+ }
+ files[i].renameTo(new File(targetPath));
+ }
+
+ }
+ }
+}
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/AbstractApplication.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/AbstractApplication.java
new file mode 100644
index 0000000..230ad24
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/AbstractApplication.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Defines common behaviour for PDE Core applications.
+ */
+public abstract class AbstractApplication {
+
+/**
+ * Starting point for application logic.
+ */
+protected abstract void run() throws Exception;
+
+/*
+ * @see IPlatformRunnable#run(Object)
+ */
+public Object run(Object args) throws Exception {
+ processCommandLine(getArrayList((String[]) args));
+ try {
+ run();
+ } catch (Exception e) {
+ e.printStackTrace(System.out);
+ }
+ return null;
+}
+
+/**
+ * Helper method to ensure an array is converted into an ArrayList.
+ */
+public static ArrayList getArrayList(Object[] args) {
+ // We could be using Arrays.asList() here, but it does not specify
+ // what kind of list it will return. We do need a list that
+ // implements the method List.remove(int) and ArrayList does.
+ ArrayList result = new ArrayList(args.length);
+ for (int i = 0; i < args.length; i++)
+ result.add(args[i]);
+ return result;
+}
+
+
+
+
+/**
+ * Looks for interesting command line arguments.
+ */
+protected void processCommandLine(List commands) {
+}
+
+/**
+ * From a command line list, get the array of arguments of a given parameter.
+ * The parameter and its arguments are removed from the list.
+ * @return null if the parameter is not found or has no arguments
+ */
+protected String[] getArguments(List commands, String param) {
+ int index = commands.indexOf(param);
+ if (index == -1)
+ return null;
+ commands.remove(index);
+ if (index == commands.size()) // if this is the last command
+ return null;
+ List args = new ArrayList(commands.size());
+ while (index < commands.size()) { // while not the last command
+ String command = (String) commands.get(index);
+ if (command.startsWith("-")) // is it a new parameter?
+ break;
+ args.add(command);
+ commands.remove(index);
+ }
+ if (args.isEmpty())
+ return null;
+ return (String[]) args.toArray(new String[args.size()]);
+}
+
+
+
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java
new file mode 100644
index 0000000..98be942
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java
@@ -0,0 +1,173 @@
+/*
+ * Created on Apr 8, 2003
+ *
+ * To change the template for this generated file go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+package org.eclipse.releng.generators;
+import java.io.File;
+
+
+
+/**
+ * @author SDimitrov
+ *
+ * To change the template for this generated type comment go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+public class EclipseTestResultsGeneratorNoMail extends TestResultsGenerator {
+
+
+ // buildType used to determine if mail should be sent on
+ // successful build completion
+ private String buildType;
+ private boolean sendMail=true;
+ /**
+ * @return
+ */
+ public String getBuildType() {
+ return buildType;
+ }
+
+ /**
+ * @param buildType
+ */
+ public void setBuildType(String buildType) {
+ this.buildType = buildType;
+ }
+
+ public static void main(String[] args) {
+ String publishingContent="C:\\Documents and Settings\\IBMEmployee\\workspace\\org.eclipse.releng.eclipsebuilder\\eclipse\\publishingFiles";
+
+ EclipseTestResultsGeneratorNoMail test = new EclipseTestResultsGeneratorNoMail();
+ test.buildType="N";
+ test.setIsBuildTested(true);
+ test.setDropTokenList(
+ "%sdk%,%tests%,%example%,%rcpruntime%,%rcpsdk%,%deltapack%,%icubase%,%runtime%,%platformsdk%,%jdt%,%jdtsdk%,%jdtc%,%jarprocessor%,%pde%,%pdesdk%,%cvs%,%cvssdk%,%teamextras%,%swt%,%relengtools%");
+ test.getDropTokensFromList(test.getDropTokenList());
+ test.setXmlDirectoryName("C:\\junk\\testresults\\xml");
+ test.setHtmlDirectoryName("C:\\junk\\testresults\\html");
+ test.setDropDirectoryName("C:\\junk");
+ test.setTestResultsTemplateFileName(
+ publishingContent+"\\templateFiles\\testResults.php.template");
+ test.setDropTemplateFileName(
+ publishingContent+"\\templateFiles\\index.php.template");
+ test.setTestResultsHtmlFileName("testResults.php");
+ test.setDropHtmlFileName("index.php");
+ //test.setDropHtmlFileName("index.html");
+ test.setPlatformIdentifierToken("%platform%");
+
+ test.setPlatformSpecificTemplateList("Windows,"+publishingContent+"/templateFiles/platform.php.template,winPlatform.php;Linux,"+publishingContent+"/templateFiles/platform.php.template,linPlatform.php;Solaris,"+publishingContent+"/templateFiles/platform.php.template,solPlatform.php;AIX,"+publishingContent+"/templateFiles/platform.php.template,aixPlatform.php;Macintosh,"+publishingContent+"/templateFiles/platform.php.template,macPlatform.php;Source Build,"+publishingContent+"/templateFiles/sourceBuilds.php.template,sourceBuilds.php");
+ /*<property name="platformIdentifierToken" value="%platform%" />
+ <property name="platformSpecificTemplateList" value="Windows,${publishingContent}/templateFiles/platform.php.template,winPlatform.php;Linux,${publishingContent}/templateFiles/platform.php.template,linPlatform.php;Solaris,${publishingContent}/templateFiles/platform.php.template,solPlatform.php;AIX,${publishingContent}/templateFiles/platform.php.template,aixPlatform.php;Macintosh,${publishingContent}/templateFiles/platform.php.template,macPlatform.php;Source Build,${publishingContent}/templateFiles/sourceBuilds.php.template,sourceBuilds.php" />
+ */
+
+ test.setHrefTestResultsTargetPath("testresults");
+ test.setCompileLogsDirectoryName(
+ "C:\\junk\\compilelogs");
+ test.setHrefCompileLogsTargetPath("compilelogs");
+ test.setTestManifestFileName("C:\\junk\\testManifest.xml");
+ test.execute();
+ }
+
+ public void execute() {
+ super.execute();
+// if (sendMail)
+// mailResults();
+ }
+
+ protected String processDropRow(PlatformStatus aPlatform) {
+ String imageName = "";
+
+ if (aPlatform.hasErrors()) {
+ imageName =
+ "<a href=\"" + getTestResultsHtmlFileName() + "\"><img src = \"FAIL.gif\" width=19 height=23></a>";
+ testResultsStatus = "failed";
+
+ } else {
+ if (testsRan()) {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ } else {
+ if (isBuildTested()) {
+ imageName =
+ "<font size=\"-1\" color=\"#FF0000\">pending</font>";
+ testResultsStatus = "pending";
+ } else {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ }
+ }
+ }
+
+ String result = "<tr>";
+
+ result = result + "<td><div align=left>" + imageName + "</div></td>\n";
+ result = result + "<td>" + aPlatform.getName() + "</td>";
+
+ //generate http, md5 and sha1 links by calling php functions in the template
+ result = result + "<td><?php genLinks($_SERVER[\"SERVER_NAME\"],\"@buildlabel@\",\"" + aPlatform.getFileName() +"\"); ?></td>\n";
+ result = result + "</tr>\n";
+
+ return result;
+ }
+
+// private void mailResults() {
+// //send a different message for the following cases:
+// //build is not tested at all
+// //build is tested, tests have not run
+// //build is tested, tests have run with error and or failures
+// //build is tested, tests have run with no errors or failures
+// try {
+// mailer = new Mailer();
+// } catch (NoClassDefFoundError e) {
+// return;
+// }
+// String buildLabel = mailer.getBuildProperties().getBuildLabel();
+// String httpUrl = mailer.getBuildProperties().getHttpUrl()+"/"+buildLabel;
+//// String ftpUrl = mailer.getBuildProperties().getftpUrl()+"/"+buildLabel;
+//
+// String subject = "Build is complete. ";
+//
+// String downloadLinks="\n\nHTTP Download:\n\n\t"+httpUrl+" \n\n";
+// /* downloadLinks=downloadLinks.concat("FTP Download:\n\n");
+// downloadLinks=downloadLinks.concat("\tuser: anonymous\n\tpassword: (e-mail address or leave blank)\n\tserver: download.eclipse.org\n\tcd to directory: "+buildLabel);
+// downloadLinks=downloadLinks.concat("\n\n\tor");
+// downloadLinks=downloadLinks.concat("\n\n\t"+ftpUrl);*/
+//
+// //provide http links
+// String message = "The build is complete."+downloadLinks;
+//
+// if (testsRan()) {
+// subject = "Automated JUnit testing complete. ";
+// message = "Automated JUnit testing is complete. ";
+// subject =
+// subject.concat(
+// (getTestResultsWithProblems().endsWith("\n"))
+// ? "All tests pass."
+// : "Test failures/errors occurred.");
+// message =
+// message.concat(
+// (getTestResultsWithProblems().endsWith("\n"))
+// ? "All tests pass."
+// : "Test failures/errors occurred in the following: "
+// + getTestResultsWithProblems())+downloadLinks;
+// } else if (isBuildTested() && (!buildType.equals("N"))) {
+// subject = subject.concat("Automated JUnit testing is starting.");
+// message = "The " + subject+downloadLinks;
+// }
+//
+// if (subject.endsWith("Test failures/errors occurred."))
+// mailer.sendMessage(subject, message);
+// else if (!buildType.equals("N"))
+// mailer.sendMessage(subject, message);
+//
+// }
+
+ public boolean isSendMail() {
+ return sendMail;
+ }
+
+ public void setSendMail(boolean sendMail) {
+ this.sendMail = sendMail;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/ErrorTracker.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/ErrorTracker.java
new file mode 100644
index 0000000..e9c6ad0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/ErrorTracker.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.io.File;
+
+import java.util.Vector;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * @version 1.0
+ * @author
+ */
+public class ErrorTracker {
+
+ // List of test logs expected at end of build
+ private Vector testLogs = new Vector();
+
+
+ // Platforms keyed on
+ private Hashtable platforms = new Hashtable();
+ private Hashtable logFiles = new Hashtable();
+ private Hashtable typesMap = new Hashtable();
+ private Vector typesList = new Vector();
+
+ public static void main(String[] args) {
+
+ // For testing only. Should not be invoked
+
+ ErrorTracker anInstance = new ErrorTracker();
+ anInstance.loadFile("C:\\junk\\testManifest.xml");
+ String[] theTypes = anInstance.getTypes();
+ for (int i=0; i < theTypes.length; i++) {
+ // System.out.println("Type: " + theTypes[i]);
+ PlatformStatus[] thePlatforms = anInstance.getPlatforms(theTypes[i]);
+ for (int j=0; j < thePlatforms.length; j++) {
+ // System.out.println("Out ID: " + thePlatforms[j].getId());
+ }
+ }
+ }
+
+ public void loadFile(String fileName) {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder parser=null;
+ try {
+ parser = docBuilderFactory.newDocumentBuilder();
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ }
+ try {
+
+ Document document = parser.parse(fileName);
+ NodeList elements = document.getElementsByTagName("platform");
+ int elementCount = elements.getLength();
+ for (int i = 0; i < elementCount; i++) {
+ PlatformStatus aPlatform = new PlatformStatus((Element) elements.item(i));
+ //System.out.println("ID: " + aPlatform.getId());
+ platforms.put(aPlatform.getId(), aPlatform);
+
+ Node zipType = elements.item(i).getParentNode();
+ String zipTypeName = (String) zipType.getAttributes().getNamedItem("name").getNodeValue();
+
+ Vector aVector = (Vector) typesMap.get(zipTypeName);
+ if (aVector == null) {
+ typesList.add(zipTypeName);
+ aVector = new Vector();
+ typesMap.put(zipTypeName, aVector);
+ }
+ aVector.add(aPlatform.getId());
+
+ }
+
+ NodeList effectedFiles = document.getElementsByTagName("effectedFile");
+ int effectedFilesCount = effectedFiles.getLength();
+ for (int i = 0; i < effectedFilesCount; i++) {
+ Node anEffectedFile = effectedFiles.item(i);
+ Node logFile = anEffectedFile.getParentNode();
+ String logFileName = (String) logFile.getAttributes().getNamedItem("name").getNodeValue();
+ logFileName=convertPathDelimiters(logFileName);
+ String effectedFileID = (String) anEffectedFile.getAttributes().getNamedItem("id").getNodeValue();
+ //System.out.println(logFileName);
+ Vector aVector = (Vector) logFiles.get(logFileName);
+ if (aVector == null) {
+ aVector = new Vector();
+ logFiles.put(logFileName, aVector);
+
+ }
+ PlatformStatus ps=(PlatformStatus) platforms.get(effectedFileID);
+ if (ps!=null)
+ aVector.addElement(ps);
+ }
+
+ // store a list of the test logs expected after testing
+ NodeList testLogList = document.getElementsByTagName("logFile");
+ int testLogCount = testLogList.getLength();
+ for (int i = 0; i < testLogCount; i++) {
+
+ Node testLog = testLogList.item(i);
+ String testLogName = (String) testLog.getAttributes().getNamedItem("name").getNodeValue();
+ Node typeNode=testLog.getAttributes().getNamedItem("type");
+ String type="test";
+ if (typeNode!=null){
+ type = typeNode.getNodeValue();
+ }
+ if (testLogName.endsWith(".xml")&&type.equals("test")){
+ testLogs.add(testLogName);
+ //System.out.println(testLogName);
+ }
+
+ }
+
+
+// // Test this mess.
+// Object[] results = platforms.values().toArray();
+// for (int i=0; i < results.length; i++) {
+// PlatformStatus ap = (PlatformStatus) results[i];
+// System.out.println("ID: " + ap.getId() + " passed: " + ap.getPassed());
+// }
+//
+// Enumeration anEnumeration = logFiles.keys();
+// while (anEnumeration.hasMoreElements()) {
+// String aKey = (String) anEnumeration.nextElement();
+// System.out.println("Whack a key: " + aKey);
+// ((PlatformStatus) logFiles.get(aKey)).setPassed(false);
+// }
+//
+// results = platforms.values().toArray();
+// for (int i=0; i < results.length; i++) {
+// PlatformStatus ap = (PlatformStatus) results[i];
+// System.out.println("ID: " + ap.getId() + " passed: " + ap.getPassed());
+// }
+
+
+
+
+
+ } catch (IOException e) {
+ System.out.println("IOException: " + fileName);
+ // e.printStackTrace();
+
+ } catch (SAXException e) {
+ System.out.println("SAXException: " + fileName);
+ e.printStackTrace();
+
+ }
+ }
+
+ public void registerError(String fileName) {
+ // System.out.println("Found an error in: " + fileName);
+ if (logFiles.containsKey(fileName)) {
+ Vector aVector = (Vector) logFiles.get(fileName);
+ for (int i = 0; i < aVector.size(); i++) {
+ ((PlatformStatus) aVector.elementAt(i)).registerError();
+ }
+ } else {
+
+ // If a log file is not specified explicitly it effects
+ // all "platforms" except JDT
+
+ Enumeration values = platforms.elements();
+ while (values.hasMoreElements()) {
+ PlatformStatus aValue = (PlatformStatus) values.nextElement();
+ if (!aValue.getId().equals("JA") &&
+ !aValue.getId().equals("EW") &&
+ !aValue.getId().equals("EA")) {
+ aValue.registerError();
+ }
+ }
+ }
+ }
+
+ public boolean hasErrors(String id) {
+ return ((PlatformStatus) platforms.get(id)).hasErrors();
+ }
+
+ // Answer a string array of the zip type names in the order they appear in
+ // the .xml file.
+ public String[] getTypes() {
+ return (String[]) typesList.toArray(new String[typesList.size()]);
+ }
+
+ // Answer an array of PlatformStatus objects for a given type.
+
+ public PlatformStatus[] getPlatforms(String type) {
+ Vector platformIDs = (Vector) typesMap.get(type);
+ PlatformStatus[] result = new PlatformStatus[platformIDs.size()];
+ for (int i = 0; i < platformIDs.size(); i++) {
+ result[i] = (PlatformStatus) platforms.get((String) platformIDs.elementAt(i));
+ }
+ return result;
+ }
+
+ /**
+ * Returns the testLogs.
+ * @return Vector
+ */
+ public Vector getTestLogs() {
+ return testLogs;
+ }
+
+ private String convertPathDelimiters(String path){
+ return new File(path).getPath();
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FetchBaseTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FetchBaseTask.java
new file mode 100644
index 0000000..6bcf213
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FetchBaseTask.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
+
+import org.apache.tools.ant.Task;
+
+public class FetchBaseTask extends Task {
+
+ private String mapFile;
+ private String outputFile;
+ private Hashtable entries;
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ FetchBaseTask task=new FetchBaseTask();
+ task.mapFile="d:/workspace/org.eclipse.releng/maps/base.map";
+ task.outputFile="d:/workspace/org.eclipse.releng/fetch.xml";
+ task.execute();
+ }
+
+ public FetchBaseTask(){
+ entries=new Hashtable();
+ }
+ public void execute(){
+ readMap();
+ printScript(fetchScript());
+ }
+
+ private void readMap (){
+ File file=new File(mapFile);
+ Properties properties=new Properties();
+ try {
+ properties.load(new FileInputStream(file));
+ Enumeration keys=properties.keys();
+ while (keys.hasMoreElements()){
+ String key=keys.nextElement().toString();
+ String script=getScript(key,properties.get(key).toString());
+ entries.put("fetch."+key,script);
+ }
+
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private String getScript(String key,String entry){
+ String[] keyParts=key.split("@");
+ if (keyParts.length==0)
+ return null;
+ String [] cvsinfo=entry.split(",");
+ if (cvsinfo.length<3)
+ return null;
+
+ String[] typeParts=keyParts[0].split("base.");
+ String type=typeParts[1];
+ String id=keyParts[1];
+
+ String fullName=entry.substring(entry.lastIndexOf("/")+1,entry.length());
+ if (fullName.endsWith(".jar"))
+ return fetchJarTarget(type, id, cvsinfo);
+ else
+ return fetchDirectoryTarget(type, id, fullName, cvsinfo);
+ }
+
+ public String getMapFile() {
+ return mapFile;
+ }
+
+ public void setMapFile(String mapFile) {
+ this.mapFile = mapFile;
+ }
+
+ public String getOutputFile() {
+ return outputFile;
+ }
+
+ public void setOutputFile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+ private String fetchJarTarget(String type, String id, String[] cvsinfo){
+ return "\t<target name=\"fetch.base."+type+"@"+id+"\">\n" +
+ "\t\t<mkdir dir=\"${baseLocation}/"+type+"s\" />\n" +
+ "\t\t<property name=\"cvsroot\" value=\""+cvsinfo[1]+"\" />\n" +
+ "\t\t<property name=\"fetchTag\" value=\""+cvsinfo[0]+"\" />\n" +
+ "\t\t<cvs command=\"export -d "+type+"s\"\n" +
+ "\t\t\tcvsRoot=\"${cvsroot}\"\n" +
+ "\t\t\tpackage=\""+cvsinfo[3]+"\"\n" +
+ "\t\t\ttag=\"${fetchTag}\"\n" +
+ "\t\t\tdest=\"${baseLocation}\"\n" +
+ "\t\t\tquiet=\"true\"/>\n" +
+ "\t\t<delete includeemptydirs=\"true\">\n"+
+ "\t\t\t<fileset dir=\"${baseLocation}/"+type+"s\" includes=\"**/CVS/**\" defaultexcludes=\"no\"/>\n"+
+ "\t\t</delete>\n"+
+ "\t</target>\n";
+
+ }
+
+ private String fetchDirectoryTarget(String type, String id, String fullName,String[] cvsinfo){
+ return "\t<target name=\"fetch.base."+type+"@"+id+"\">\n" +
+ "\t\t<mkdir dir=\"${baseLocation}/"+type+"s\" />\n" +
+ "\t\t<property name=\"cvsroot\" value=\""+cvsinfo[1]+"\" />\n" +
+ "\t\t<cvs command=\"export -d "+fullName+"\"\n" +
+ "\t\t\tcvsRoot=\"${cvsroot}\"\n" +
+ "\t\t\tpackage=\""+cvsinfo[3]+"\"\n" +
+ "\t\t\ttag=\""+cvsinfo[0]+"\"\n" +
+ "\t\t\tdest=\"${baseLocation}/"+type+"s\"\n" +
+ "\t\t\tquiet=\"true\"/>\n" +
+ "\t\t<delete includeemptydirs=\"true\">\n"+
+ "\t\t\t<fileset dir=\"${baseLocation}/"+type+"s\" includes=\"**/CVS/**\" defaultexcludes=\"no\"/>\n"+
+ "\t\t</delete>\n"+
+ "\t</target>\n";
+
+ }
+
+ private String fetchScript(){
+ String script="<project default=\"all.elements\">\n" +
+ "<!--Ant script which will fetch pre-built plug-ins and features to a location where they\n" +
+ "will be consumed by the build, i.e. ${baseLocation}. Stored in this project to capture revisions/urls of\n" +
+ "binaries.-->\n" +
+ "\t<property name=\"baseLocation\" value=\"${basedir}/baseLocation\" />\n" +
+ "\t<target name=\"all.elements\">\n";
+
+ Enumeration keys=entries.keys();
+ while (keys.hasMoreElements()){
+ script=script.concat("\t\t<antcall target=\""+keys.nextElement()+"\" />\n");
+ }
+ script=script.concat("\t</target>");
+ keys=entries.keys();
+ while (keys.hasMoreElements()){
+ script=script.concat("\n\n"+entries.get(keys.nextElement()));
+ }
+ script=script.concat("</project>");
+
+ return script;
+ }
+
+ private void printScript(String script){
+ try {
+ PrintWriter out = new PrintWriter(new FileWriter(new File(outputFile)));
+ out.print(script);
+ out.flush();
+ out.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FileCounter.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FileCounter.java
new file mode 100644
index 0000000..9490c66
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/FileCounter.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.releng.generators;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.StringTokenizer;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ * This task will count the number of fils in a given directory
+ * that match a given filter. The number of fils will be output
+ * to a given output file. The output file will be overwritten
+ * if it already exists.
+ *
+ * Note: Filter comparison is NOT case sensitive. Do not use wild cards.
+ * ie .zip counts all files with .zip anywere in the name.
+ */
+public class FileCounter extends Task {
+
+ private String sourceDirectory = "";
+ private String filterString = ".zip";
+ private String outputFile = "";
+
+ public static void main(String args[]) {
+ // For testing only.
+ FileCounter aFileCounter = new FileCounter();
+ aFileCounter.setSourceDirectory("c:\\RelEng\\dean");
+ aFileCounter.setOutputFile("c:\\RelEng\\dean\\files.count");
+ aFileCounter.setFilterString(".zip");
+ aFileCounter.execute();
+ }
+
+ public void execute() throws BuildException {
+ // Do the work.
+
+ int count = 0;
+
+ System.out.println("Source Directory: " + this.getSourceDirectory());
+ System.out.println("Output File: " + this.getOutputFile());
+ System.out.println("Filter String: " + this.getFilterString());
+
+ File aDirectory = new File(this.getSourceDirectory());
+ if (aDirectory == null) {
+ throw new BuildException("Directory " + this.getSourceDirectory() + " not found.");
+ }
+
+ String[] names = aDirectory.list();
+ if (names == null) {
+ throw new BuildException("Directory " + this.getSourceDirectory() + " not found.");
+ }
+
+ System.out.println("List size: " + names.length);
+
+ for (int i = 0; i < names.length; i++) {
+ System.out.println("Name: " + names[i]);
+
+ int index = -1;
+ StringTokenizer types = getFileTypes();
+
+ while (types.hasMoreTokens()){
+ index = names[i].toLowerCase().indexOf(types.nextToken().toLowerCase());
+ if (index != -1) {
+ count++;
+ }
+ }
+
+ }
+
+ try {
+ FileOutputStream anOutputStream = new FileOutputStream(this.getOutputFile());
+ anOutputStream.write(String.valueOf(count).getBytes());
+ anOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new BuildException("Can not create file.count file");
+ } catch (IOException e) {
+ throw new BuildException("Can not create file.count file");
+ }
+
+ }
+
+ private StringTokenizer getFileTypes(){
+ return new StringTokenizer(getFilterString(),",");
+ }
+
+ /**
+ * Gets the sourceDirectory.
+ * @return Returns a String
+ */
+ public String getSourceDirectory() {
+ return sourceDirectory;
+ }
+
+ /**
+ * Sets the sourceDirectory.
+ * @param sourceDirectory The sourceDirectory to set
+ */
+ public void setSourceDirectory(String sourceDirectory) {
+ this.sourceDirectory = sourceDirectory;
+ }
+
+ /**
+ * Gets the filterString.
+ * @return Returns a String
+ */
+ public String getFilterString() {
+ return filterString;
+ }
+
+ /**
+ * Sets the filterString.
+ * @param filterString The filterString to set
+ */
+ public void setFilterString(String filterString) {
+ this.filterString = filterString;
+ }
+
+ /**
+ * Gets the outputFile.
+ * @return Returns a String
+ */
+ public String getOutputFile() {
+ return outputFile;
+ }
+
+ /**
+ * Sets the outputFile.
+ * @param outputFile The outputFile to set
+ */
+ public void setOutputFile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/PlatformStatus.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/PlatformStatus.java
new file mode 100644
index 0000000..b23a66a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/PlatformStatus.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+
+/**
+ * @version 1.0
+ * @author
+ */
+public class PlatformStatus {
+
+ private String id;
+ private String name;
+ private String fileName;
+ private boolean hasErrors = false;
+
+ PlatformStatus(Element anElement) {
+ super();
+ NamedNodeMap attributes = anElement.getAttributes();
+ this.id = (String) attributes.getNamedItem("id").getNodeValue();
+ this.name = (String) attributes.getNamedItem("name").getNodeValue();
+ this.fileName = (String) attributes.getNamedItem("fileName").getNodeValue();
+
+ }
+
+ /**
+ * Gets the id.
+ * @return Returns a String
+ */
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void registerError() {
+ this.hasErrors = true;
+ }
+
+ public boolean hasErrors() {
+ return this.hasErrors;
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
new file mode 100644
index 0000000..a0b261d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
@@ -0,0 +1,1397 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.Enumeration;
+
+import org.apache.tools.ant.Task;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+
+/**
+ * @version 1.0
+ * @author Dean Roberts
+ */
+public class TestResultsGenerator extends Task {
+ private static final String WARNING_SEVERITY = "WARNING";
+ private static final String ERROR_SEVERITY = "ERROR";
+ private static final String ForbiddenReferenceID = "ForbiddenReference";
+ private static final String DiscouragedReferenceID = "DiscouragedReference";
+
+ private static final int DEFAULT_READING_SIZE = 8192;
+
+ static final String elementName = "testsuite";
+ static final String testResultsToken = "%testresults%";
+ static final String compileLogsToken = "%compilelogs%";
+ static final String accessesLogsToken = "%accesseslogs%";
+ public Vector dropTokens;
+ public Vector platformSpecs;
+ public Vector differentPlatforms;
+ public String testResultsWithProblems = "\n";
+ public String testResultsXmlUrls = "\n";
+
+ private DocumentBuilder parser =null;
+ public ErrorTracker anErrorTracker;
+ public String testResultsTemplateString = "";
+ public String dropTemplateString = "";
+
+ public Vector platformDescription;
+ public Vector platformTemplateString;
+ public Vector platformDropFileName;
+
+ //Status of tests results (pending, successful, failed), used to specify the color
+ //of the test Results link on the build pages (standard, green, red), once failures
+ //are encountered, this is set to failed
+ protected String testResultsStatus = "successful";
+ //assume tests ran. If no html files are found, this is set to false
+ private boolean testsRan = true;
+
+ // Parameters
+ // build runs JUnit automated tests
+ private boolean isBuildTested;
+
+ // buildType, I, N
+ public String buildType;
+
+ // Comma separated list of drop tokens
+ public String dropTokenList;
+
+ // Token in platform.php.template to be replaced by the desired platform ID
+ public String platformIdentifierToken;
+
+ // Location of the xml files
+ public String xmlDirectoryName;
+
+ // Location of the html files
+ public String htmlDirectoryName;
+
+ // Location of the resulting index.php file.
+ public String dropDirectoryName;
+
+ // Location and name of the template index.php file.
+ public String testResultsTemplateFileName;
+
+ // Platform specific template and output list (colon separated) in the following format:
+ // <descriptor, ie. OS name>,path to template file, path to output file
+ public String platformSpecificTemplateList="";
+
+ // Location and name of the template drop index.php file.
+ public String dropTemplateFileName;
+
+ // Name of the generated index php file.
+ public String testResultsHtmlFileName;
+
+ // Name of the generated drop index php file;
+ public String dropHtmlFileName;
+
+ // Arbitrary path used in the index.php page to href the
+ // generated .html files.
+ public String hrefTestResultsTargetPath;
+
+ // Aritrary path used in the index.php page to reference the compileLogs
+ public String hrefCompileLogsTargetPath;
+
+ // Location of compile logs base directory
+ public String compileLogsDirectoryName;
+
+ // Location and name of test manifest file
+ public String testManifestFileName;
+
+ //Initialize the prefix to a default string
+ private String prefix = "default";
+ private String testShortName = "";
+ private int counter = 0;
+ //The four configurations, add new configurations to test results here + update
+ //testResults.php.template for changes
+ private String[] testsConfig = {"linux.gtk.x86.xml",
+ "linux.gtk.x86_6.0.xml",
+ "macosx.cocoa.x86_5.0.xml",
+ "win32.win32.x86.xml",
+ "win32.win32.x86_6.0.xml"};
+
+
+ public static void main(String[] args) {
+ TestResultsGenerator test = new TestResultsGenerator();
+ test.setDropTokenList(
+ "%sdk%,%tests%,%example%,%rcpruntime%,%rcpsdk%,%deltapack%,%icubase%,%runtime%,%platformsdk%,%jdt%,%jdtsdk%,%pde%,%pdesdk%,%cvs%,%cvssdk%,%teamextras%,%swt%,%relengtools%");
+ test.setPlatformIdentifierToken("%platform%");
+ test.getDropTokensFromList(test.dropTokenList);
+ test.setIsBuildTested(true);
+ test.setXmlDirectoryName("C:\\junk\\testresults\\xml");
+ test.setHtmlDirectoryName("C:\\junk\\testresults");
+ test.setDropDirectoryName("C:\\junk");
+ test.setTestResultsTemplateFileName(
+ "C:\\junk\\templateFiles\\testResults.php.template");
+ test.setPlatformSpecificTemplateList(
+ "Windows,C:\\junk\\templateFiles\\platform.php.template,winPlatform.php;Linux,C:\\junk\\templateFiles\\platform.php.template,linPlatform.php;Solaris,C:\\junk\\templateFiles\\platform.php.template,solPlatform.php;AIX,C:\\junk\\templateFiles\\platform.php.template,aixPlatform.php;Macintosh,C:\\junk\\templateFiles\\platform.php.template,macPlatform.php;Source Build,C:\\junk\\templateFiles\\sourceBuilds.php.template,sourceBuilds.php");
+ test.setDropTemplateFileName(
+ "C:\\junk\\templateFiles\\index.php.template");
+ test.setTestResultsHtmlFileName("testResults.php");
+ //test.setDropHtmlFileName("index.php");
+ test.setDropHtmlFileName("index.html");
+
+ test.setHrefTestResultsTargetPath("testresults");
+ test.setCompileLogsDirectoryName(
+ "C:\\junk\\compilelogs\\plugins");
+ test.setHrefCompileLogsTargetPath("compilelogs");
+ test.setTestManifestFileName("C:\\junk\\testManifest.xml");
+ test.execute();
+ }
+
+ public void execute() {
+
+ anErrorTracker = new ErrorTracker();
+ platformDescription = new Vector();
+ platformTemplateString = new Vector();
+ platformDropFileName = new Vector();
+ anErrorTracker.loadFile(testManifestFileName);
+ getDropTokensFromList(dropTokenList);
+ testResultsTemplateString = readFile(testResultsTemplateFileName);
+ dropTemplateString = readFile(dropTemplateFileName);
+
+ //Specific to the platform build-page
+ if(platformSpecificTemplateList!="") {
+ String description, platformTemplateFile, platformDropFile;
+ //Retrieve the different platforms and their info
+ getDifferentPlatformsFromList(platformSpecificTemplateList);
+ //Parses the platform info and retrieves the platform name,
+ //template file, and drop file
+ for(int i=0; i<differentPlatforms.size(); i++) {
+ getPlatformSpecsFromList(differentPlatforms.get(i).toString());
+ description = platformSpecs.get(0).toString();
+ platformTemplateFile = platformSpecs.get(1).toString();
+ platformDropFile = platformSpecs.get(2).toString();
+ platformDescription.add(description);
+ platformTemplateString.add(readFile(platformTemplateFile));
+ platformDropFileName.add(platformDropFile);
+
+ }
+
+ }
+
+ System.out.println("Begin: Generating test results index page");
+ System.out.println("Parsing XML files");
+ parseXml();
+ System.out.println("Parsing compile logs");
+ parseCompileLogs();
+ System.out.println("End: Generating test results index page");
+ writeTestResultsFile();
+ //For the platform build-page, write platform files, in addition to the index file
+ if(platformSpecificTemplateList!="") {
+ writeDropFiles();
+ }
+ else {
+ writeDropIndexFile();
+ }
+ }
+
+ public void parseCompileLogs() {
+
+ StringBuffer compilerString = new StringBuffer();
+ StringBuffer accessesString = new StringBuffer();
+ processCompileLogsDirectory(
+ compileLogsDirectoryName,
+ compilerString,
+ accessesString);
+ if (compilerString.length() == 0) {
+ compilerString.append("None");
+ }
+ if (accessesString.length() == 0) {
+ accessesString.append("None");
+ }
+ testResultsTemplateString =
+ replace(testResultsTemplateString, compileLogsToken, String.valueOf(compilerString));
+
+ testResultsTemplateString =
+ replace(testResultsTemplateString, accessesLogsToken, String.valueOf(accessesString));
+ }
+
+ private void processCompileLogsDirectory(String directoryName, StringBuffer compilerLog, StringBuffer accessesLog) {
+ File sourceDirectory = new File(directoryName);
+ if (sourceDirectory.isFile()) {
+ if (sourceDirectory.getName().endsWith(".log"))
+ readCompileLog(sourceDirectory.getAbsolutePath(), compilerLog, accessesLog);
+ if (sourceDirectory.getName().endsWith(".xml"))
+ parseCompileLog(sourceDirectory.getAbsolutePath(), compilerLog, accessesLog);
+ }
+ if (sourceDirectory.isDirectory()) {
+ File[] logFiles = sourceDirectory.listFiles();
+ Arrays.sort(logFiles);
+ for (int j = 0; j < logFiles.length; j++) {
+ processCompileLogsDirectory(logFiles[j].getAbsolutePath(), compilerLog, accessesLog);
+ }
+ }
+ }
+
+ private void readCompileLog(String log, StringBuffer compilerLog, StringBuffer accessesLog) {
+ String fileContents = readFile(log);
+
+ int errorCount = countCompileErrors(fileContents);
+ int warningCount = countCompileWarnings(fileContents);
+ int forbiddenWarningCount = countForbiddenWarnings(fileContents);
+ int discouragedWarningCount = countDiscouragedWarnings(fileContents);
+ if (errorCount != 0) {
+ //use wildcard in place of version number on directory names
+ String logName =
+ log.substring(getCompileLogsDirectoryName().length() + 1);
+ StringBuffer stringBuffer = new StringBuffer(logName);
+ stringBuffer.replace(
+ logName.indexOf("_") + 1,
+ logName.indexOf(File.separator, logName.indexOf("_") + 1),
+ "*");
+ logName = new String(stringBuffer);
+
+ anErrorTracker.registerError(logName);
+ }
+ formatCompileErrorRow(log, errorCount, warningCount, compilerLog);
+ formatAccessesErrorRow(log, forbiddenWarningCount, discouragedWarningCount, accessesLog);
+ }
+
+ private void parseCompileLog(String log, StringBuffer compilerLog, StringBuffer accessesLog) {
+ int errorCount = 0;
+ int warningCount = 0;
+ int forbiddenWarningCount = 0;
+ int discouragedWarningCount = 0;
+
+ File file=new File(log);
+ Document aDocument=null;
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(file));
+ InputSource inputSource = new InputSource(reader);
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ aDocument = builder.parse(inputSource);
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch(IOException e) {
+ // ignore
+ }
+ }
+ }
+
+ if (aDocument == null) return;
+ // Get summary of problems
+ NodeList nodeList = aDocument.getElementsByTagName("problem");
+ if (nodeList == null ||nodeList.getLength()==0)
+ return;
+
+ int length = nodeList.getLength();
+ for (int i = 0; i < length; i++) {
+ Node problemNode = nodeList.item(i);
+ NamedNodeMap aNamedNodeMap = problemNode.getAttributes();
+ Node severityNode = aNamedNodeMap.getNamedItem("severity");
+ Node idNode = aNamedNodeMap.getNamedItem("id");
+ if (severityNode != null) {
+ String severityNodeValue = severityNode.getNodeValue();
+ if (WARNING_SEVERITY.equals(severityNodeValue)) {
+ // this is a warning
+ // need to check the id
+ String nodeValue = idNode.getNodeValue();
+ if (ForbiddenReferenceID.equals(nodeValue)) {
+ forbiddenWarningCount++;
+ } else if (DiscouragedReferenceID.equals(nodeValue)) {
+ discouragedWarningCount++;
+ } else {
+ warningCount++;
+ }
+ } else if (ERROR_SEVERITY.equals(severityNodeValue)) {
+ // this is an error
+ errorCount++;
+ }
+ }
+ }
+ if (errorCount != 0) {
+ //use wildcard in place of version number on directory names
+ //System.out.println(log + "/n");
+ String logName =
+ log.substring(getCompileLogsDirectoryName().length() + 1);
+ StringBuffer buffer = new StringBuffer(logName);
+ buffer.replace(
+ logName.indexOf("_") + 1,
+ logName.indexOf(File.separator, logName.indexOf("_") + 1),
+ "*");
+ logName = new String(buffer);
+
+ anErrorTracker.registerError(logName);
+ }
+ String logName = log.replaceAll(".xml", ".html");
+ formatCompileErrorRow(
+ logName,
+ errorCount,
+ warningCount,
+ compilerLog);
+ formatAccessesErrorRow(
+ logName,
+ forbiddenWarningCount,
+ discouragedWarningCount,
+ accessesLog);
+ }
+
+ public static byte[] getFileByteContent(String fileName) throws IOException {
+ InputStream stream = null;
+ try {
+ File file = new File(fileName);
+ stream = new FileInputStream(file);
+ return getInputStreamAsByteArray(stream, (int) file.length());
+ } finally {
+ if (stream != null) {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the given input stream's contents as a byte array.
+ * If a length is specified (ie. if length != -1), only length bytes
+ * are returned. Otherwise all bytes in the stream are returned.
+ * Note this doesn't close the stream.
+ * @throws IOException if a problem occured reading the stream.
+ */
+ public static byte[] getInputStreamAsByteArray(InputStream stream, int length)
+ throws IOException {
+ byte[] contents;
+ if (length == -1) {
+ contents = new byte[0];
+ int contentsLength = 0;
+ int amountRead = -1;
+ do {
+ int amountRequested = Math.max(stream.available(), DEFAULT_READING_SIZE); // read at least 8K
+
+ // resize contents if needed
+ if (contentsLength + amountRequested > contents.length) {
+ System.arraycopy(
+ contents,
+ 0,
+ contents = new byte[contentsLength + amountRequested],
+ 0,
+ contentsLength);
+ }
+
+ // read as many bytes as possible
+ amountRead = stream.read(contents, contentsLength, amountRequested);
+
+ if (amountRead > 0) {
+ // remember length of contents
+ contentsLength += amountRead;
+ }
+ } while (amountRead != -1);
+
+ // resize contents if necessary
+ if (contentsLength < contents.length) {
+ System.arraycopy(
+ contents,
+ 0,
+ contents = new byte[contentsLength],
+ 0,
+ contentsLength);
+ }
+ } else {
+ contents = new byte[length];
+ int len = 0;
+ int readSize = 0;
+ while ((readSize != -1) && (len != length)) {
+ // See PR 1FMS89U
+ // We record first the read size. In this case len is the actual read size.
+ len += readSize;
+ readSize = stream.read(contents, len, length - len);
+ }
+ }
+
+ return contents;
+ }
+
+ public String readFile(String fileName) {
+ byte[] aByteArray = null;
+ try {
+ aByteArray = getFileByteContent(fileName);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (aByteArray == null) {
+ return "";
+ }
+ return new String(aByteArray);
+ }
+
+ private int countCompileErrors(String aString) {
+ return extractNumber(aString, "error");
+ }
+
+ private int countCompileWarnings(String aString) {
+ return extractNumber(aString, "warning");
+ }
+
+ private int countForbiddenWarnings(String aString) {
+ return extractNumber(aString, "Access restriction:");
+ }
+
+ private int countDiscouragedWarnings(String aString) {
+ return extractNumber(aString, "Discouraged access:");
+ }
+
+ private int extractNumber(String aString, String endToken) {
+ int endIndex = aString.lastIndexOf(endToken);
+ if (endIndex == -1) {
+ return 0;
+ }
+
+ int startIndex = endIndex;
+ while (startIndex >= 0
+ && aString.charAt(startIndex) != '('
+ && aString.charAt(startIndex) != ',') {
+ startIndex--;
+ }
+
+ String count = aString.substring(startIndex + 1, endIndex).trim();
+ try {
+ return Integer.parseInt(count);
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+
+ }
+
+ private int missingCount = 0;
+ private String verifyAllTestsRan(String directory) {
+ Enumeration enumeration = (anErrorTracker.getTestLogs()).elements();
+
+ String replaceString="";
+ while (enumeration.hasMoreElements()) {
+ String testLogName = enumeration.nextElement().toString();
+
+ if (new File(directory + File.separator + testLogName)
+ .exists())
+ continue;
+
+ anErrorTracker.registerError(testLogName);
+ String tmp=((platformSpecificTemplateList.equals(""))?formatRow(testLogName, -1, false):formatRowReleng(testLogName, -1, false));
+ if(missingCount==0) {
+ replaceString=replaceString+"</table></br>"+"\n"+
+ "<table width=\"65%\" border=\"1\" bgcolor=\"#EEEEEE\" rules=\"groups\" align=\"center\">"+
+ "<tr bgcolor=\"#9999CC\"> <th width=\"80%\" align=\"center\"> Missing Files </th><th align=\"center\"> Status </th></tr>";
+ }
+ replaceString=replaceString+tmp;
+ testResultsWithProblems=testResultsWithProblems.concat("\n" + testLogName.substring(0,testLogName.length()-4) +" (file missing)");
+ missingCount++;
+ }
+ return replaceString;
+ }
+
+ public void parseXml() {
+
+ File sourceDirectory = new File(xmlDirectoryName);
+
+ if (sourceDirectory.exists()) {
+
+ String replaceString = "";
+
+ File[] xmlFileNames = sourceDirectory.listFiles();
+ Arrays.sort(xmlFileNames) ;
+
+ File sourceDirectoryParent = sourceDirectory.getParentFile();
+ if (sourceDirectoryParent != null) {
+ sourceDirectoryParent = sourceDirectoryParent.getParentFile();
+ }
+ String sourceDirectoryCanonicalPath = null;
+ try {
+ sourceDirectoryCanonicalPath = sourceDirectoryParent.getCanonicalPath();
+ } catch (IOException e) {
+ // ignore
+ }
+ for (int i = 0; i < xmlFileNames.length; i++) {
+ if (xmlFileNames[i].getPath().endsWith(".xml")) {
+ String fullName = xmlFileNames[i].getPath();
+ int errorCount = countErrors(fullName);
+ if (errorCount != 0) {
+ String testName =
+ xmlFileNames[i].getName().substring(
+ 0,
+ xmlFileNames[i].getName().length() - 4);
+ testResultsWithProblems =
+ testResultsWithProblems.concat("\n" + testName);
+ testResultsXmlUrls =
+ testResultsXmlUrls.concat("\n" + extractXmlRelativeFileName(sourceDirectoryCanonicalPath, xmlFileNames[i]));
+ anErrorTracker.registerError(
+ fullName.substring(
+ getXmlDirectoryName().length() + 1));
+ }
+
+
+ String tmp=((platformSpecificTemplateList.equals(""))?formatRow(xmlFileNames[i].getPath(), errorCount,true):formatRowReleng(xmlFileNames[i].getPath(), errorCount,true));
+ replaceString=replaceString+tmp;
+
+
+ }
+ }
+ //check for missing test logs
+ replaceString=replaceString+verifyAllTestsRan(xmlDirectoryName);
+
+ testResultsTemplateString =
+ replace(
+ testResultsTemplateString,
+ testResultsToken,
+ replaceString);
+ testsRan = true;
+
+ } else {
+ testsRan = false;
+ System.out.println(
+ "Test results not found in "
+ + sourceDirectory.getAbsolutePath());
+ }
+
+ }
+ private static String extractXmlRelativeFileName(String rootCanonicalPath, File xmlFile) {
+ if (rootCanonicalPath != null) {
+ String xmlFileCanonicalPath = null;
+ try {
+ xmlFileCanonicalPath = xmlFile.getCanonicalPath();
+ } catch (IOException e) {
+ // ignore
+ }
+ if (xmlFileCanonicalPath != null) {
+ // + 1 to remove the '\'
+ return xmlFileCanonicalPath.substring(rootCanonicalPath.length() + 1).replace('\\', '/');
+ }
+ }
+ return "";
+ }
+ private String replace(
+ String source,
+ String original,
+ String replacement) {
+
+ int replaceIndex = source.indexOf(original);
+ if (replaceIndex > -1) {
+ String resultString = source.substring(0, replaceIndex);
+ resultString = resultString + replacement;
+ resultString =
+ resultString
+ + source.substring(replaceIndex + original.length());
+ return resultString;
+ } else {
+ System.out.println("Could not find token: " + original);
+ return source;
+ }
+
+ }
+
+ protected void writeDropFiles() {
+ writeDropIndexFile();
+ //Write all the platform files
+ for(int i=0; i<platformDescription.size(); i++) {
+ writePlatformFile(platformDescription.get(i).toString(), platformTemplateString.get(i).toString(), platformDropFileName.get(i).toString());
+ }
+ }
+
+ protected void writeDropIndexFile() {
+
+ String[] types = anErrorTracker.getTypes();
+ for (int i = 0; i < types.length; i++) {
+ PlatformStatus[] platforms = anErrorTracker.getPlatforms(types[i]);
+ String replaceString = processDropRows(platforms);
+ dropTemplateString =
+ replace(
+ dropTemplateString,
+ dropTokens.get(i).toString(),
+ replaceString);
+ }
+ //Replace the token %testsStatus% with the status of the test results
+ dropTemplateString = replace(dropTemplateString,"%testsStatus%",testResultsStatus);
+ String outputFileName =
+ dropDirectoryName + File.separator + dropHtmlFileName;
+ writeFile(outputFileName, dropTemplateString);
+ }
+
+ //Writes the platform file (dropFileName) specific to "desiredPlatform"
+ protected void writePlatformFile(String desiredPlatform, String templateString, String dropFileName) {
+
+ String[] types = anErrorTracker.getTypes();
+ for (int i = 0; i < types.length; i++) {
+ PlatformStatus[] platforms = anErrorTracker.getPlatforms(types[i]);
+ //Call processPlatformDropRows passing the platform's name
+ String replaceString = processPlatformDropRows(platforms, desiredPlatform);
+ templateString =
+ replace(
+ templateString,
+ dropTokens.get(i).toString(),
+ replaceString);
+ }
+ //Replace the platformIdentifierToken with the platform's name and the testsStatus
+ //token with the status of the test results
+ templateString = replace(templateString, platformIdentifierToken, desiredPlatform);
+ templateString = replace(templateString,"%testsStatus%",testResultsStatus);
+ String outputFileName =
+ dropDirectoryName + File.separator + dropFileName;
+ writeFile(outputFileName, templateString);
+ }
+
+ //Process drop rows specific to each of the platforms
+ protected String processPlatformDropRows(PlatformStatus[] platforms, String name) {
+
+ String result = "";
+ boolean found = false;
+ for (int i = 0; i < platforms.length; i++) {
+ //If the platform description indicates the platform's name, or "All",
+ //call processDropRow
+ if(platforms[i].getName().startsWith(name.substring(0, 3)) || platforms[i].getName().equals("All")) {
+ result = result + processDropRow(platforms[i]);
+ found = true;
+ }
+ //If the platform description indicates "All Other Platforms", process
+ //the row locally
+ else if(platforms[i].getName().equals("All Other Platforms") && !found)
+ {
+ String imageName = "";
+
+ if (platforms[i].hasErrors()) {
+ imageName =
+ "<a href=\"" + getTestResultsHtmlFileName() + "\"><img src = \"FAIL.gif\" width=19 height=23></a>";
+ } else {
+ if (testsRan) {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ } else {
+ if (isBuildTested) {
+ imageName =
+ "<font size=\"-1\" color=\"#FF0000\">pending</font>";
+ } else {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ }
+ }
+ }
+
+ result = result + "<tr>";
+ result = result + "<td><div align=left>" + imageName + "</div></td>\n";
+ result = result + "<td>All " + name + "</td>";
+ //generate http, md5 and sha1 links by calling php functions in the template
+ result = result + "<td><?php genLinks($_SERVER[\"SERVER_NAME\"],\"@buildlabel@\",\"" + platforms[i].getFileName() +"\"); ?></td>\n";
+ result = result + "</tr>\n";
+ }
+ }
+
+ return result;
+ }
+
+ protected String processDropRows(PlatformStatus[] platforms) {
+
+ String result = "";
+ for (int i = 0; i < platforms.length; i++) {
+ result = result + processDropRow(platforms[i]);
+ }
+
+ return result;
+ }
+
+ protected String processDropRow(PlatformStatus aPlatform) {
+
+ String imageName = "";
+
+ if (aPlatform.hasErrors()) {
+ imageName =
+ "<a href=\"" + getTestResultsHtmlFileName()+ "\"><img src = \"FAIL.gif\" width=19 height=23></a>";
+ //Failure in tests
+ testResultsStatus = "failed";
+ } else {
+ if (testsRan) {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ } else {
+ if (isBuildTested) {
+ imageName =
+ "<font size=\"-1\" color=\"#FF0000\">pending</font>";
+ //Tests are pending
+ testResultsStatus = "pending";
+ } else {
+ imageName = "<img src = \"OK.gif\" width=19 height=23>";
+ }
+ }
+ }
+
+ String result = "<tr>";
+
+ result = result + "<td><div align=left>" + imageName + "</div></td>\n";
+ result = result + "<td>" + aPlatform.getName() + "</td>";
+ result = result + "<td>" + aPlatform.getFileName() + "</td>\n";
+ result = result + "</tr>\n";
+
+ return result;
+ }
+
+ public void writeTestResultsFile() {
+
+ String outputFileName =
+ dropDirectoryName + File.separator + testResultsHtmlFileName;
+ writeFile(outputFileName, testResultsTemplateString);
+ }
+
+ private void writeFile(String outputFileName, String contents) {
+ FileOutputStream outputStream = null;
+ try {
+ outputStream = new FileOutputStream(outputFileName);
+ outputStream.write(contents.getBytes());
+ } catch (FileNotFoundException e) {
+ System.out.println(
+ "File not found exception writing: " + outputFileName);
+ } catch (IOException e) {
+ System.out.println("IOException writing: " + outputFileName);
+ } finally {
+ if (outputStream != null) {
+ try {
+ outputStream.close();
+ } catch(IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+
+ public void setTestResultsHtmlFileName(String aString) {
+ testResultsHtmlFileName = aString;
+ }
+
+ public String getTestResultsHtmlFileName() {
+ return testResultsHtmlFileName;
+ }
+
+ public void setTestResultsTemplateFileName(String aString) {
+ testResultsTemplateFileName = aString;
+ }
+
+ public String getTestResultsTemplateFileName() {
+ return testResultsTemplateFileName;
+ }
+
+ public void setXmlDirectoryName(String aString) {
+ xmlDirectoryName = aString;
+ }
+
+ public String getXmlDirectoryName() {
+ return xmlDirectoryName;
+ }
+
+ public void setHtmlDirectoryName(String aString) {
+ htmlDirectoryName = aString;
+ }
+
+ public String getHtmlDirectoryName() {
+ return htmlDirectoryName;
+ }
+
+ public void setDropDirectoryName(String aString) {
+ dropDirectoryName = aString;
+ }
+
+ public String getDropDirectoryName() {
+ return dropDirectoryName;
+ }
+
+ private void formatCompileErrorRow(
+ String fileName,
+ int errorCount,
+ int warningCount,
+ StringBuffer buffer) {
+
+ if (errorCount == 0 && warningCount == 0) {
+ return;
+ }
+
+ String hrefCompileLogsTargetPath2 = getHrefCompileLogsTargetPath();
+ int i = fileName.indexOf(hrefCompileLogsTargetPath2);
+
+ String shortName =
+ fileName.substring(i + hrefCompileLogsTargetPath2.length());
+
+ buffer
+ .append("<tr>\n<td>\n")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("\">")
+ .append(shortName)
+ .append("</a>")
+ .append("</td>\n")
+ .append("<td align=\"center\">")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("#ERRORS")
+ .append("\">")
+ .append(errorCount)
+ .append("</a>")
+ .append("</td>\n")
+ .append("<td align=\"center\">")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("#OTHER_WARNINGS")
+ .append("\">")
+ .append(warningCount)
+ .append("</a>")
+ .append("</td>\n")
+ .append("</tr>\n");
+ }
+
+ private void formatAccessesErrorRow(
+ String fileName,
+ int forbiddenAccessesWarningsCount,
+ int discouragedAccessesWarningsCount,
+ StringBuffer buffer) {
+
+ if (forbiddenAccessesWarningsCount == 0 && discouragedAccessesWarningsCount == 0) {
+ return;
+ }
+
+ String hrefCompileLogsTargetPath2 = getHrefCompileLogsTargetPath();
+ int i = fileName.indexOf(hrefCompileLogsTargetPath2);
+
+ String shortName =
+ fileName.substring(i + hrefCompileLogsTargetPath2.length());
+
+ buffer
+ .append("<tr>\n<td>\n")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("\">")
+ .append(shortName)
+ .append("</a>")
+ .append("</td>\n")
+ .append("<td align=\"center\">")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("#FORBIDDEN_WARNINGS")
+ .append("\">")
+ .append(forbiddenAccessesWarningsCount)
+ .append("</a>")
+ .append("</td>\n")
+ .append("<td align=\"center\">")
+ .append("<a href=")
+ .append("\"")
+ .append(hrefCompileLogsTargetPath2)
+ .append(shortName)
+ .append("#DISCOURAGED_WARNINGS")
+ .append("\">")
+ .append(discouragedAccessesWarningsCount)
+ .append("</a>")
+ .append("</td>\n")
+ .append("</tr>\n");
+ }
+
+ private String formatRow(String fileName, int errorCount, boolean link) {
+
+ // replace .xml with .html
+
+ String aString = "";
+ if (!link) {
+ return "<tr><td>" + fileName + " (missing)" + "</td><td>" + "DNF";
+ }
+
+ if (fileName.endsWith(".xml")) {
+
+ int begin = fileName.lastIndexOf(File.separatorChar);
+ int end = fileName.lastIndexOf(".xml");
+
+ String shortName = fileName.substring(begin + 1, end);
+ String displayName = shortName;
+ if (errorCount != 0)
+ aString = aString + "<tr><td><b>";
+ else
+ aString = aString + "<tr><td>";
+
+
+ if (errorCount!=0){
+ displayName="<font color=\"#ff0000\">"+displayName+"</font>";
+ }
+ if (errorCount==-1){
+ aString=aString.concat(displayName);
+ }else {
+ aString=aString
+ + "<a href="
+ + "\""
+ + hrefTestResultsTargetPath
+ + "/"
+ + shortName
+ + ".html"
+ + "\">"
+ + displayName
+ + "</a>";
+ }
+ if (errorCount > 0)
+ aString = aString + "</td><td><b>";
+ else
+ aString = aString + "</td><td>";
+
+ if (errorCount == -1)
+ aString = aString + "<font color=\"#ff0000\">DNF";
+
+ else if (errorCount >0)
+ aString = aString + "<font color=\"#ff0000\">"+String.valueOf(errorCount);
+ else
+ aString = aString +String.valueOf(errorCount);
+
+ if (errorCount != 0)
+ aString = aString + "</font></b></td></tr>";
+ else
+ aString = aString + "</td></tr>";
+ }
+
+ return aString;
+
+ }
+
+ //Specific to the RelEng test results page
+ private String formatRowReleng(String fileName, int errorCount, boolean link) {
+
+ //If the file name doesn't end with any of the set test configurations, do nothing
+ boolean endsWithConfig = false;
+ int card = testsConfig.length;
+ for(int i=0; i<card; i++) {
+ if(fileName.endsWith(testsConfig[i]))
+ endsWithConfig = true;
+ }
+ if(!endsWithConfig)
+ return "";
+
+ String aString = "";
+ if (!link) {
+ return "<tr><td>" + fileName + "</td><td align=\"center\">" + "DNF </tr>";
+ }
+
+ if (fileName.endsWith(".xml")) {
+
+ int begin = fileName.lastIndexOf(File.separatorChar);
+
+ //Get org.eclipse. out of the component name
+ String shortName = fileName.substring(begin + 13, fileName.indexOf('_'));
+ String displayName = shortName;
+
+ //If the short name does not start with this prefix
+ if(!shortName.startsWith(prefix)) {
+ //If the prefix is not yet set
+ if(prefix=="default"){
+ //Set the testShortName variable to the current short name
+ testShortName = shortName;
+ counter=0;
+ //Set new prefix
+ prefix = shortName.substring(0, shortName.indexOf(".tests") + 6);
+ aString = aString + "<tbody><tr><td><b>" + prefix + ".*" + "</b><td><td><td><td>";
+ aString = aString + "<tr><td><P>" + shortName;
+
+ //Loop until the matching string postfix(test config.) is found
+ while(counter<card && !fileName.endsWith(testsConfig[counter])) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+ }
+ else {
+ //Set new prefix
+ prefix = shortName.substring(0, shortName.indexOf(".tests") + 6);
+
+ //Loop until the matching string postfix(test config.) is found
+ while(counter<card && !fileName.endsWith(testsConfig[counter])) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+
+ //In this case, the new prefix should be set with the short name under it,
+ //since this would mean that the team has more than one component test
+ if(!shortName.endsWith("tests")) {
+ aString = aString + "<tbody><tr><td><b>" + prefix + ".*" + "</b><td><td><td><td>";
+ aString = aString + "<tr><td><P>" + shortName;
+ }
+ //The team has only one component test
+ else
+ aString = aString + "<tbody><tr><td><b>" + shortName;
+ testShortName = shortName;
+
+ counter = 0;
+ }
+ }
+ //If the file's short name starts with the current prefix
+ if(shortName.startsWith(prefix)) {
+ //If the new file has a different short name than the current one
+ if(!shortName.equals(testShortName)){
+ //Fill the remaining cells with '-'. These files will later be listed as
+ //missing
+ while(counter<card) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+ counter = 0;
+ //Print the component name
+ aString = aString + "<tr><td><P>" + shortName;
+ //Loop until the matching string postfix(test config.) is found
+ while(counter<card && !fileName.endsWith(testsConfig[counter])) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+ }
+ else {
+ //Loop until the matching string postfix(test config.) is found
+ while(counter<card && !fileName.endsWith(testsConfig[counter])) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+ //If the previous component has no more test files left
+ if(counter==card) {
+ counter = 0;
+ //Print the new component name
+ aString = aString + "<tr><td><P>" + shortName;
+ //Loop until the matching string postfix(test config.) is found
+ while(counter<card && !fileName.endsWith(testsConfig[counter])) {
+ aString = aString + "<td align=\"center\">-</td>";
+ counter++;
+ }
+ }
+ }
+
+ testShortName = shortName;
+
+ if (errorCount != 0)
+ aString = aString + "<td align=\"center\"><b>";
+ else
+ aString = aString + "<td align=\"center\">";
+
+ //Print number of errors
+ if (errorCount!=0){
+ displayName="<font color=\"#ff0000\">"+ "(" + String.valueOf(errorCount) + ")" +"</font>";
+ }
+ else {
+ displayName="(0)";
+ }
+
+ //Reference
+ if (errorCount==-1){
+ aString=aString.concat(displayName);
+ }else {
+ aString=aString
+ + "<a href="
+ + "\""
+ + hrefTestResultsTargetPath
+ + "/"
+ + fileName.substring(begin+1, fileName.length()-4)
+ + ".html"
+ + "\">"
+ + displayName
+ + "</a>";
+ }
+
+ if (errorCount == -1)
+ aString = aString + "<font color=\"#ff0000\">DNF";
+
+ if (errorCount != 0)
+ aString = aString + "</font></b></td>";
+ else
+ aString = aString + "</td>";
+ counter++;
+ }
+ }
+
+ return aString;
+ }
+
+ private int countErrors(String fileName) {
+ int errorCount = 0;
+
+ if (new File(fileName).length()==0)
+ return -1;
+
+ try {
+ DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory.newInstance();
+ parser=docBuilderFactory.newDocumentBuilder();
+
+ Document document = parser.parse(fileName);
+ NodeList elements = document.getElementsByTagName(elementName);
+
+ int elementCount = elements.getLength();
+ if (elementCount == 0)
+ return -1;
+ for (int i = 0; i < elementCount; i++) {
+ Element element = (Element) elements.item(i);
+ NamedNodeMap attributes = element.getAttributes();
+ Node aNode = attributes.getNamedItem("errors");
+ errorCount =
+ errorCount + Integer.parseInt(aNode.getNodeValue());
+ aNode = attributes.getNamedItem("failures");
+ errorCount =
+ errorCount + Integer.parseInt(aNode.getNodeValue());
+
+ }
+
+ } catch (IOException e) {
+ System.out.println("IOException: " + fileName);
+ // e.printStackTrace();
+ return 0;
+ } catch (SAXException e) {
+ System.out.println("SAXException: " + fileName);
+ // e.printStackTrace();
+ return 0;
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }
+ return errorCount;
+ }
+
+
+
+ /**
+ * Gets the hrefTestResultsTargetPath.
+ * @return Returns a String
+ */
+ public String getHrefTestResultsTargetPath() {
+ return hrefTestResultsTargetPath;
+ }
+
+ /**
+ * Sets the hrefTestResultsTargetPath.
+ * @param hrefTestResultsTargetPath The hrefTestResultsTargetPath to set
+ */
+ public void setHrefTestResultsTargetPath(String htmlTargetPath) {
+ this.hrefTestResultsTargetPath = htmlTargetPath;
+ }
+
+ /**
+ * Gets the compileLogsDirectoryName.
+ * @return Returns a String
+ */
+ public String getCompileLogsDirectoryName() {
+ return compileLogsDirectoryName;
+ }
+
+ /**
+ * Sets the compileLogsDirectoryName.
+ * @param compileLogsDirectoryName The compileLogsDirectoryName to set
+ */
+ public void setCompileLogsDirectoryName(String compileLogsDirectoryName) {
+ this.compileLogsDirectoryName = compileLogsDirectoryName;
+ }
+
+ /**
+ * Gets the hrefCompileLogsTargetPath.
+ * @return Returns a String
+ */
+ public String getHrefCompileLogsTargetPath() {
+ return hrefCompileLogsTargetPath;
+ }
+
+ /**
+ * Sets the hrefCompileLogsTargetPath.
+ * @param hrefCompileLogsTargetPath The hrefCompileLogsTargetPath to set
+ */
+ public void setHrefCompileLogsTargetPath(String hrefCompileLogsTargetPath) {
+ this.hrefCompileLogsTargetPath = hrefCompileLogsTargetPath;
+ }
+
+ /**
+ * Gets the testManifestFileName.
+ * @return Returns a String
+ */
+ public String getTestManifestFileName() {
+ return testManifestFileName;
+ }
+
+ /**
+ * Sets the testManifestFileName.
+ * @param testManifestFileName The testManifestFileName to set
+ */
+ public void setTestManifestFileName(String testManifestFileName) {
+ this.testManifestFileName = testManifestFileName;
+ }
+
+ /**
+ * Gets the dropHtmlFileName.
+ * @return Returns a String
+ */
+ public String getDropHtmlFileName() {
+ return dropHtmlFileName;
+ }
+
+ /**
+ * Sets the dropHtmlFileName.
+ * @param dropHtmlFileName The dropHtmlFileName to set
+ */
+ public void setDropHtmlFileName(String dropHtmlFileName) {
+ this.dropHtmlFileName = dropHtmlFileName;
+ }
+
+ /**
+ * Gets the dropTemplateFileName.
+ * @return Returns a String
+ */
+ public String getDropTemplateFileName() {
+ return dropTemplateFileName;
+ }
+
+ /**
+ * Sets the dropTemplateFileName.
+ * @param dropTemplateFileName The dropTemplateFileName to set
+ */
+ public void setDropTemplateFileName(String dropTemplateFileName) {
+ this.dropTemplateFileName = dropTemplateFileName;
+ }
+
+ protected void getDropTokensFromList(String list) {
+ StringTokenizer tokenizer = new StringTokenizer(list, ",");
+ dropTokens = new Vector();
+
+ while (tokenizer.hasMoreTokens()) {
+ dropTokens.add(tokenizer.nextToken());
+ }
+ }
+
+ protected void getDifferentPlatformsFromList(String list) {
+ StringTokenizer tokenizer = new StringTokenizer(list, ";");
+ differentPlatforms = new Vector();
+
+ while (tokenizer.hasMoreTokens()) {
+ differentPlatforms.add(tokenizer.nextToken());
+ }
+ }
+
+ protected void getPlatformSpecsFromList(String list) {
+ StringTokenizer tokenizer = new StringTokenizer(list, ",");
+ platformSpecs = new Vector();
+
+ while (tokenizer.hasMoreTokens()) {
+ platformSpecs.add(tokenizer.nextToken());
+ }
+ }
+
+ public String getDropTokenList() {
+ return dropTokenList;
+ }
+
+ public void setDropTokenList(String dropTokenList) {
+ this.dropTokenList = dropTokenList;
+ }
+
+ public boolean isBuildTested() {
+ return isBuildTested;
+ }
+
+ public void setIsBuildTested(boolean isBuildTested) {
+ this.isBuildTested = isBuildTested;
+ }
+
+
+ /**
+ * @return
+ */
+ public boolean testsRan() {
+ return testsRan;
+ }
+
+ /**
+ * @param b
+ */
+ public void setTestsRan(boolean b) {
+ testsRan = b;
+ }
+
+ /**
+ * @return
+ */
+ public Vector getDropTokens() {
+ return dropTokens;
+ }
+
+ /**
+ * @param vector
+ */
+ public void setDropTokens(Vector vector) {
+ dropTokens = vector;
+ }
+
+ /**
+ * @return
+ */
+ public String getTestResultsWithProblems() {
+ return testResultsWithProblems;
+ }
+
+ /**
+ * @return
+ */
+ public String getTestResultsXmlUrls() {
+ return testResultsXmlUrls;
+ }
+
+ /**
+ * @param string
+ */
+ public void setTestResultsWithProblems(String string) {
+ testResultsWithProblems = string;
+ }
+
+ public String getBuildType() {
+ return buildType;
+ }
+
+ public void setBuildType(String buildType) {
+ this.buildType = buildType;
+ }
+
+ public String getPlatformSpecificTemplateList() {
+ return platformSpecificTemplateList;
+ }
+
+ public void setPlatformSpecificTemplateList(String platformSpecificTemplateList) {
+ this.platformSpecificTemplateList = platformSpecificTemplateList;
+ }
+
+ public void setPlatformIdentifierToken(String platformIdentifierToken) {
+ this.platformIdentifierToken = platformIdentifierToken;
+ }
+
+ public String getPlatformIdentifierToken() {
+ return platformIdentifierToken;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java
new file mode 100644
index 0000000..7ed4ac3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestVersionTracker.java
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators;
+/**
+ * This class finds the version of a plug-in, or fragment listed in a feature
+ * and writes <element>=<element>_<version> for each in a properties file.
+ * The file produced from this task can be loaded by an Ant script to find files in the
+ * binary versions of plugins and fragments.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.tools.ant.Task;
+import org.eclipse.osgi.framework.util.Headers;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class TestVersionTracker extends Task{
+
+ private Hashtable elements;
+
+ //fields to hold temporary values for parsing
+ private SAXParser parser;
+
+ //the feature to from which to collect version information
+ private String featureId;
+
+ //buildDirectory
+ private String buildDirectory;
+
+ //the path to the file in which to write the results
+ private String outputFile;
+
+ public static void main(String[] args) {
+ TestVersionTracker tracker =
+ new TestVersionTracker();
+ tracker.buildDirectory="D:/src";
+ tracker.featureId="org.eclipse.sdk.tests";
+ tracker.outputFile="d:/eclipse-testing/test.properties";
+ tracker.execute();
+
+ }
+
+ public TestVersionTracker(){
+ super();
+ }
+
+
+ public void execute() {
+ elements = new Hashtable();
+
+ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+ try {
+ parser = saxParserFactory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ }
+
+ parse(buildDirectory+"/features/"+featureId+"/build.xml",new FeatureHandler());
+ getTestPluginProperties();
+ writeProperties(outputFile, true);
+ }
+
+ public void parse(String xmlFile,DefaultHandler handler){
+ try {
+ parser.parse(xmlFile,handler);
+ } catch (SAXException e) {
+ System.err.println (e);
+ } catch (IOException e) {
+ System.err.println (e);
+ }
+ }
+
+ private void getTestPluginProperties(){
+ //set prerequisites list for each test plugin
+ Enumeration keys=elements.keys();
+ while (keys.hasMoreElements()){
+ String id=keys.nextElement().toString();
+ TestPlugin testPlugin=(TestPlugin)elements.get(id);
+ testPlugin.getPrerequisitePlugins(id);
+ testPlugin.setHasPerformanceTarget();
+ }
+ }
+
+ private class FeatureHandler extends DefaultHandler{
+ // Start Element Event Handler
+ public void startElement(
+ String uri,
+ String local,
+ String qName,
+ Attributes atts) {
+
+ if (qName.equals("eclipse.idReplacer")) {
+ try{
+ String pluginIds = atts.getValue("pluginIds");
+
+ //get pluginIDs and versions from generated build.xml. Create TestPlugin objects
+ StringTokenizer tokenizer= new StringTokenizer(pluginIds,",");
+ while (tokenizer.hasMoreTokens()){
+ String idtmp=tokenizer.nextToken();
+ String id=idtmp.substring(0, idtmp.indexOf(":"));
+ String version=tokenizer.nextToken();
+ TestPlugin testPlugin=new TestPlugin(id,version);
+ elements.put(id,testPlugin);
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ private class TestPlugin {
+ String id;
+ String version;
+ boolean hasPerformanceTarget=false;
+ ArrayList prerequisitePlugins=new ArrayList();
+ File testXml;
+
+ TestPlugin(String id, String version){
+ this.id=id;
+ this.version=version;
+ this.testXml=new File(buildDirectory,"plugins/"+id+"/test.xml");
+ }
+
+ private void getPrerequisitePlugins(String id) {
+ Headers headers = null;
+ String value = null;
+ File manifest = new File(buildDirectory, "plugins/" + id + "/META-INF/MANIFEST.MF");
+ ManifestElement[] manifestElements=null;
+ if (manifest.exists()) {
+ try {
+ headers = Headers.parseManifest(new FileInputStream(manifest));
+ if (headers.get(Constants.REQUIRE_BUNDLE)==null)
+ return;
+ value = headers.get(Constants.REQUIRE_BUNDLE).toString();
+ manifestElements = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, value);
+
+ } catch (BundleException e) {
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ for (int i = 0; i < manifestElements.length; i++) {
+ String name = manifestElements[i].getValue();
+ if (elements.containsKey(name)){
+ if (!prerequisitePlugins.contains(name)){
+ boolean prereqAdded=prerequisitePlugins.add(name);
+ if (prereqAdded){
+ getPrerequisitePlugins(name);
+ }
+ }
+ }
+ }
+ }
+ getPrerequisitePluginsFromPluginXml(id);
+ }
+
+ /**
+ * Returns the required list of plug-ins from plugin.xml
+ */
+ private void getPrerequisitePluginsFromPluginXml(String id) {
+ File pluginXml = new File(buildDirectory, "/plugins/" + id + "/plugin.xml");
+ if (!pluginXml.exists())
+ return;
+
+ InputStream is = null;
+ Document doc = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(pluginXml));
+ InputSource inputSource = new InputSource(is);
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+ DocumentBuilder builder = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ }
+
+ try {
+ doc = builder.parse(inputSource);
+ } catch (SAXParseException e) {
+ e.printStackTrace();
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ // Find the fragment's plugins's name, id and version
+ NodeList nodeList = doc.getElementsByTagName("import");
+ if (nodeList == null || nodeList.getLength() == 0) {
+ return;
+ }
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ NamedNodeMap map = node.getAttributes();
+ Node namedItem = map.getNamedItem("plugin");
+ String name = namedItem.getNodeValue();
+ if (namedItem == null) {
+ continue;
+ } else {
+ if (elements.containsKey(name)) {
+ if (!prerequisitePlugins.contains(name)) {
+ boolean prereqAdded = prerequisitePlugins.add(name);
+ if (prereqAdded) {
+ getPrerequisitePlugins(name);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the required list of plug-ins from plugin.xml
+ */
+ private void setHasPerformanceTarget() {
+ File testXml = new File(buildDirectory, "/plugins/" + id + "/test.xml");
+ if (!testXml.exists())
+ return;
+
+ InputStream is = null;
+ Document doc = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(testXml));
+ InputSource inputSource = new InputSource(is);
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+ DocumentBuilder builder = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ }
+
+ try {
+ doc = builder.parse(inputSource);
+ } catch (SAXParseException e) {
+ e.printStackTrace();
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ // Find a target named "performance"
+ NodeList nodeList = doc.getElementsByTagName("target");
+ if (nodeList == null || nodeList.getLength() == 0) {
+ return;
+ }
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ NamedNodeMap map = node.getAttributes();
+ Node namedItem = map.getNamedItem("name");
+ String name = namedItem.getNodeValue();
+ if (namedItem == null) {
+ continue;
+ } else {
+ if (name.equals("performance")){
+ hasPerformanceTarget=true;
+ return;
+ }
+ }
+ }
+ }
+
+ public String toString(){
+ String keyPrefix=id+"_"+version;
+ String performanceProperty=hasPerformanceTarget?id+".has.performance.target="+hasPerformanceTarget+"\n":"";
+ return id+"="+keyPrefix+"\n"+
+ performanceProperty+
+ id+".prerequisite.testplugins="+getPrerequisiteList()+"\n";
+ }
+
+ private String getPrerequisiteList(){
+ String prerequisites="";
+ for (int i=0;i<prerequisitePlugins.size();i++){
+ prerequisites=prerequisites.concat("**/${"+prerequisitePlugins.get(i)+"}** ");
+ }
+ return prerequisites;
+ }
+ }
+
+ public void writeProperties(String propertiesFile,boolean append){
+
+ try{
+
+ PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append));
+
+ Object[] keys = elements.keySet().toArray();
+ Arrays.sort(keys);
+ for (int i=0;i<keys.length;i++){
+ Object key = keys[i];
+ writer.println(((TestPlugin)elements.get(key)).toString());
+ writer.flush();
+ }
+ writer.close();
+
+ } catch (IOException e){
+ System.out.println("Unable to write to file "+propertiesFile);
+ }
+
+
+ }
+
+
+ /**
+ * @return Returns the outputFilePath.
+ */
+ public String getOutputFilePath() {
+ return outputFile;
+ }
+
+ /**
+ * @param outputFilePath The outputFilePath to set.
+ */
+ public void setOutputFilePath(String outputFilePath) {
+ this.outputFile = outputFilePath;
+ }
+
+ public String getBuildDirectory() {
+ return buildDirectory;
+ }
+
+ public void setBuildDirectory(String buildDirectory) {
+ this.buildDirectory = buildDirectory;
+ }
+
+ public String getFeatureId() {
+ return featureId;
+ }
+
+ public void setFeatureId(String featureId) {
+ this.featureId = featureId;
+ }
+
+ public String getOutputFile() {
+ return outputFile;
+ }
+
+ public void setOutputFile(String outputFile) {
+ this.outputFile = outputFile;
+ }
+
+
+
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/VersionTrackerTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/VersionTrackerTask.java
new file mode 100644
index 0000000..68c1631
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src/org/eclipse/releng/generators/VersionTrackerTask.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/**
+ * This class finds the version of a plug-in, or fragment listed in a feature
+ * and writes <element>=<element>_<version> for each in a properties file.
+ * The file produced from this task can be loaded by an Ant script to find files in the
+ * binary versions of plugins and fragments.
+ */
+package org.eclipse.releng.generators;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.SAXException;
+import java.io.*;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import org.apache.tools.ant.Task;
+import java.util.Vector;
+
+public class VersionTrackerTask extends Task {
+
+ private String buildDirectory;
+ private Hashtable elements;
+ private SAXParser parser;
+ private Vector allElements;
+
+ //the feature to from which to collect version information
+ private String featurePath;
+
+ //the path to the file in which to write the results
+ private String outputFilePath;
+
+ public void execute(){
+ VersionTrackerTask tracker =
+ new VersionTrackerTask(getBuildDirectory());
+ tracker.parse(getFeaturePath(),new FeatureHandler());
+ tracker.parse(new PluginHandler());
+ tracker.writeProperties(getOutputFilePath(), true);
+ }
+
+ //test
+ public static void main(String[] args) {
+ VersionTrackerTask Tracker =
+ new VersionTrackerTask(args[1]);
+ Tracker.parse(args[0],Tracker.new FeatureHandler());
+ Tracker.parse(Tracker.new PluginHandler());
+ Tracker.writeProperties(args[2], true);
+ }
+
+ public VersionTrackerTask(){
+ }
+
+ public VersionTrackerTask(String install) {
+ elements = new Hashtable();
+ allElements=new Vector();
+
+ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+ try {
+ parser = saxParserFactory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ } catch (SAXException e) {
+ e.printStackTrace();
+ }
+
+ // directory containing the source for a given build
+ buildDirectory = install;
+ }
+
+ private void parse (DefaultHandler handler){
+ for (int i=0; i<allElements.size();i++){
+ parse(allElements.elementAt(i).toString(), handler);
+ }
+ }
+
+ public void parse(String xmlFile,DefaultHandler handler){
+ try {
+ parser.parse(xmlFile,handler);
+ } catch (SAXException e) {
+ System.err.println (e);
+ } catch (IOException e) {
+ System.err.println (e);
+ }
+ }
+
+ private class FeatureHandler extends DefaultHandler{
+ // Start Element Event Handler
+ public void startElement(
+ String uri,
+ String local,
+ String qName,
+ Attributes atts) {
+
+ String element = atts.getValue("id");
+ //need to parse the plugin.xml or fragment.xml for the correct version value since the 3.0 features may list these as "0.0.0"
+ if (qName.equals("plugin")) {
+ try{
+ allElements.add(getBuildDirectory()+File.separator+"plugins"+File.separator+element+File.separator+"plugin.xml");
+ } catch (Exception e){
+ e.printStackTrace();
+
+ }
+ } else if (qName.equals("fragment")){
+ allElements.add(getBuildDirectory()+File.separator+"plugins"+File.separator+element+File.separator+"fragment.xml");
+ }
+ }
+ }
+
+ private class PluginHandler extends DefaultHandler{
+ // Start Element Event Handler
+ public void startElement(
+ String uri,
+ String local,
+ String qName,
+ Attributes atts) {
+
+
+ String element = atts.getValue("id");
+ String version = atts.getValue("version");
+ System.out.println("Examining "+element);
+
+ if (qName.equals("plugin") || qName.equals("fragment")){
+ System.out.println("Found plugin "+element);
+ elements.put(element,element+"_"+version);
+ }
+ }
+ }
+
+ public void writeProperties(String propertiesFile,boolean append){
+ try{
+
+ PrintWriter writer = new PrintWriter(new FileWriter(propertiesFile,append));
+
+ Enumeration keys = elements.keys();
+
+ while (keys.hasMoreElements()){
+ Object key = keys.nextElement();
+ writer.println(key.toString()+"="+elements.get(key).toString());
+ writer.flush();
+ }
+ writer.close();
+
+ } catch (IOException e){
+ System.out.println("Unable to write to file "+propertiesFile);
+ }
+
+
+ }
+
+ /**
+ * @return Returns the featurePath.
+ */
+ public String getFeaturePath() {
+ return featurePath;
+ }
+
+ /**
+ * @param featurePath The featurePath to set.
+ */
+ public void setFeaturePath(String featurePath) {
+ this.featurePath = featurePath;
+ }
+
+ /**
+ * @return Returns the installDirectory.
+ */
+ public String getBuildDirectory() {
+ return buildDirectory;
+ }
+
+ /**
+ * @param installDirectory The installDirectory to set.
+ */
+ public void setBuildDirectory(String buildDirectory) {
+ this.buildDirectory = buildDirectory;
+ }
+
+ /**
+ * @return Returns the outputFilePath.
+ */
+ public String getOutputFilePath() {
+ return outputFilePath;
+ }
+
+ /**
+ * @param outputFilePath The outputFilePath to set.
+ */
+ public void setOutputFilePath(String outputFilePath) {
+ this.outputFilePath = outputFilePath;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/services/bugzilla/UpdateBugStateTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/services/bugzilla/UpdateBugStateTask.java
new file mode 100644
index 0000000..5e120cb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/services/bugzilla/UpdateBugStateTask.java
@@ -0,0 +1,706 @@
+/**
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.eclipse.releng.services.bugzilla;
+
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.net.ssl.HttpsURLConnection;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import org.eclipse.releng.util.bugzilla.Messages;
+
+
+public class UpdateBugStateTask extends Task
+{
+ private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
+
+ private static final String GET = "GET"; //$NON-NLS-1$
+
+ private static final String CTYPE_RDF = "&ctype=rdf"; //$NON-NLS-1$
+
+ private static final String URL_TARGET_MILESTONE = "&target_milestone="; //$NON-NLS-1$
+
+ private static final String URL_CHFIELDTO = "&chfieldto="; //$NON-NLS-1$
+
+ private static final String URL_BUG_STATUS = "&bug_status="; //$NON-NLS-1$
+
+ private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_BUGLIST_CGI_PRODUCT = "https://bugs.eclipse.org/bugs/buglist.cgi?product="; //$NON-NLS-1$
+
+ private static final String COOKIE = "Cookie"; //$NON-NLS-1$
+
+ private static final String APPLICATION_X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded"; //$NON-NLS-1$
+
+ private static final String CONTENT_TYPE = "Content-type"; //$NON-NLS-1$
+
+ private static final String POST = "POST"; //$NON-NLS-1$
+
+ private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_PROCESS_BUG_CGI = "https://bugs.eclipse.org/bugs/process_bug.cgi"; //$NON-NLS-1$
+
+ private static final String BUG_STATUS = "bug_status"; //$NON-NLS-1$
+
+ private static final String AMP = "&"; //$NON-NLS-1$
+
+ private static final String EQ = "="; //$NON-NLS-1$
+
+ private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_SHOW_BUG_CGI_ID = "https://bugs.eclipse.org/bugs/show_bug.cgi?id="; //$NON-NLS-1$
+
+ private static final String CTYPE_XML = "&ctype=xml"; //$NON-NLS-1$
+
+ private static final String RESOLVE = "resolve"; //$NON-NLS-1$
+
+ private static final String RESOLUTION = "resolution"; //$NON-NLS-1$
+
+ private static final String KNOB = "knob"; //$NON-NLS-1$
+
+ private static final String LONGDESCLENGTH = "longdesclength"; //$NON-NLS-1$
+
+ private static final String SHORT_DESC = "short_desc"; //$NON-NLS-1$
+
+ private static final String BUG_FILE_LOC = "bug_file_loc"; //$NON-NLS-1$
+
+ private static final String BUG_SEVERITY = "bug_severity"; //$NON-NLS-1$
+
+ private static final String PRIORITY = "priority"; //$NON-NLS-1$
+
+ private static final String OP_SYS = "op_sys"; //$NON-NLS-1$
+
+ private static final String REP_PLATFORM = "rep_platform"; //$NON-NLS-1$
+
+ private static final String TARGET_MILESTONE = "target_milestone"; //$NON-NLS-1$
+
+ private static final String COMPONENT = "component"; //$NON-NLS-1$
+
+ private static final String VERSION = "version"; //$NON-NLS-1$
+
+ private static final String PRODUCT = "product"; //$NON-NLS-1$
+
+ private static final String ID = "id"; //$NON-NLS-1$
+
+ private static final String COMMENT = "comment"; //$NON-NLS-1$
+
+ private static final String PROCESS_BUG = "process_bug"; //$NON-NLS-1$
+
+ private static final String FORM_NAME = "form_name"; //$NON-NLS-1$
+
+ private static final String BUGZILLA_LOGINCOOKIE = "; Bugzilla_logincookie="; //$NON-NLS-1$
+
+ private static final String BUGZILLA_LOGIN = "Bugzilla_login="; //$NON-NLS-1$
+
+ private static final String DIGITS_REGEX = "(\\d+)"; //$NON-NLS-1$
+
+ private static final String COLON = ":"; //$NON-NLS-1$
+
+ private static final String DASH = "-"; //$NON-NLS-1$
+
+ private static final String BUGID_REGEX = "<bz:id(?: nc:parseType=\"Integer\")>(\\d+)</bz:id>"; //$NON-NLS-1$
+
+ private static final String BUILDID_REGEX = "([IMNRS]?-?)(\\d{4})(\\d{2})(\\d{2})-?(\\d{2})(\\d{2})"; //$NON-NLS-1$
+
+ private static final String TIMESTAMP_REGEX = "(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})"; //$NON-NLS-1$
+
+ private static final String JS = "Java said:"; //$NON-NLS-1$
+
+ private static final String SP = " "; //$NON-NLS-1$
+
+ private static final String XML_REGEX = "<(\\S+)>([^<]+)</\\1>"; //$NON-NLS-1$
+
+ private static final String NL = "\n"; //$NON-NLS-1$
+
+ private static final String CSO = ", or "; //$NON-NLS-1$
+
+ private static final String CS = ", "; //$NON-NLS-1$
+
+ private static final String BZ_IV = "INVALID"; //$NON-NLS-1$
+
+ private static final String BZ_WF = "WONTFIX"; //$NON-NLS-1$
+
+ private static final String BZ_LT = "LATER"; //$NON-NLS-1$
+
+ private static final String BZ_RM = "REMIND"; //$NON-NLS-1$
+
+ private static final String BZ_WK = "WORKSFORME"; //$NON-NLS-1$
+
+ private static final String BZ_FX = "FIXED"; //$NON-NLS-1$
+
+ private static final String BZ_RE = "REOPENED"; //$NON-NLS-1$
+
+ private static final String BZ_AS = "ASSIGNED"; //$NON-NLS-1$
+
+ private static final String BZ_NEW = "NEW"; //$NON-NLS-1$
+
+ private static final String BZ_UC = "UNCONFIRMED"; //$NON-NLS-1$
+
+ private static final String EMPTY = ""; //$NON-NLS-1$
+
+ private static final String LT = "<"; //$NON-NLS-1$
+
+ private static final String GT = ">"; //$NON-NLS-1$
+
+ private static final String QUOT = "\""; //$NON-NLS-1$
+
+ private static final String APOS = "'"; //$NON-NLS-1$
+
+ private static final String HTML_APOS = "&apos;"; //$NON-NLS-1$
+
+ private static final String HTML_QUOT = "&quot;"; //$NON-NLS-1$
+
+ private static final String HTML_LT = "&lt;"; //$NON-NLS-1$
+
+ private static final String HTML_GT = "&gt;"; //$NON-NLS-1$
+
+ private static final String HTML_NBSP = "&nbsp;"; //$NON-NLS-1$
+
+ private static final String HTML_AMP = "&amp;"; //$NON-NLS-1$
+
+ private int debug;
+
+ private int login;
+
+ private int loginCookie;
+
+ private String product;
+
+ private String status;
+
+ private String buildID;
+
+ private String buildAlias;
+
+ private String milestone;
+
+ private String bugList;
+
+ private String resolution;
+
+ private String endDate;
+
+ private LinkedHashMap trans;
+
+ public UpdateBugStateTask()
+ {
+ debug = 1;
+
+ login = 0;
+ loginCookie = 0;
+ product = EMPTY;
+ status = EMPTY;
+ buildID = EMPTY;
+ buildAlias = EMPTY;
+ endDate = EMPTY;
+ milestone = EMPTY;
+ bugList = EMPTY;
+ resolution = BZ_FX;
+
+ trans = new LinkedHashMap(8, 0.75f, false);
+ trans.put(HTML_APOS, APOS);
+ trans.put(HTML_QUOT, QUOT);
+ trans.put(HTML_LT, LT);
+ trans.put(HTML_GT, GT);
+ trans.put(HTML_NBSP, SP);
+ trans.put(HTML_AMP, AMP);
+ }
+
+ public void setDebug(int d)
+ {
+ debug = d;
+ }
+
+ public void setBugList(String b)
+ {
+ bugList = b;
+ }
+
+ public void setProduct(String p)
+ {
+ product = p;
+ }
+
+ public void setStatus(String s)
+ {
+ if (s.equals(BZ_UC) || s.equals(BZ_NEW) || s.equals(BZ_AS) || s.equals(BZ_RE))
+ {
+ status = s;
+ }
+ else
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.invalidStatus") + "!" + SP + //$NON-NLS-1$ //$NON-NLS-2$
+ Messages.getString("UpdateBugStateTask.expectedOne") + SP + BZ_UC + CS + BZ_NEW + CS + BZ_AS + CSO + BZ_RE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ public void setLogin(int l)
+ {
+ login = l;
+ }
+
+ public void setLoginCookie(int lc)
+ {
+ loginCookie = lc;
+ }
+
+ public void setResolution(String r)
+ {
+ if (r.equals(BZ_FX) || r.equals(BZ_IV) || r.equals(BZ_WF) || r.equals(BZ_LT) || r.equals(BZ_RM) || r.equals(BZ_WK))
+ {
+ resolution = r;
+ }
+ else
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.invalidResolution") + "!" + SP + //$NON-NLS-1$ //$NON-NLS-2$
+ Messages.getString("UpdateBugStateTask.expected") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ + SP + BZ_FX + CS + BZ_IV + CS + BZ_WF + CS + BZ_LT + CS + BZ_RM + CSO + BZ_WK + SP
+ + "(" + Messages.getString("UpdateBugStateTask.default") + COLON + SP + BZ_FX + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ public void setEndDate(String t)
+ {
+ Pattern p = Pattern.compile(TIMESTAMP_REGEX);
+ Matcher m = p.matcher(t);
+ if (m.matches())
+ {
+ endDate = m.group(1) + DASH + m.group(2) + DASH + m.group(3) + SP + m.group(4) + COLON + m.group(5);
+ }
+ else
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.invalidTimestamp") + COLON + SP + t + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ public void setBuildID(String t)
+ {
+ Pattern p = Pattern.compile(BUILDID_REGEX);
+ Matcher m = p.matcher(t);
+ if (m.matches())
+ {
+ buildID = m.group(1) + m.group(2) + m.group(3) + m.group(4) + m.group(5) + m.group(6);
+ }
+ else
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.invalidBuildID") + COLON + SP + t + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ public void setBuildAlias(String b)
+ {
+ buildAlias = b;
+ }
+
+ public void setMilestone(String m)
+ {
+ milestone = m;
+ }
+
+public void execute() throws BuildException
+ {
+ if (login == 0)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.expectingLogin") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ if (loginCookie == 0)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.expectingLogincookie") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ if (status.equals(EMPTY))
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.expectingStatus") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /* we take an explicit list OR do a query, not both */
+ if (!bugList.equals(EMPTY) && endDate.equals(EMPTY) && milestone.equals(EMPTY) && product.equals(EMPTY))
+ {
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.usingBugList")); //$NON-NLS-1$
+ }
+ Pattern p = Pattern.compile(DIGITS_REGEX);
+ Matcher m = p.matcher(bugList);
+ while (m.find())
+ {
+ int bugID = Integer.parseInt(m.group(1));
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.found") + SP + bugID); //$NON-NLS-1$
+ }
+ doBug(bugID);
+ }
+ }
+ else if (bugList.equals(EMPTY))
+ {
+ if (product.equals(EMPTY))
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.expectingProduct") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.queryingFor") + SP + //$NON-NLS-1$
+ (!status.equals(EMPTY) ? status + SP : EMPTY) +
+ (!product.equals(EMPTY) ? product + SP : EMPTY) +
+ (!milestone.equals(EMPTY) ? milestone + SP : EMPTY) +
+ Messages.getString("UpdateBugStateTask.bugs")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /* the Bugzilla search form generates a massive URL, but thankfully doesn't
+ * demand all sorts of superfluous fields like when updating a bug */
+ String url = HTTPS_BUGS_ECLIPSE_ORG_BUGS_BUGLIST_CGI_PRODUCT + urlEncode(product) + URL_BUG_STATUS + urlEncode(status)
+ + URL_CHFIELDTO + urlEncode(endDate) + URL_TARGET_MILESTONE + urlEncode(milestone) + CTYPE_RDF;
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
+ url + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ HttpsURLConnection bugsconn = getConn(url, GET, true, false, EMPTY);
+ String bugs = slurpStream(bugsconn);
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.gotBugList") + COLON); //$NON-NLS-1$
+ System.err.println(bugs);
+ }
+
+ Pattern p = Pattern.compile(BUGID_REGEX);
+ Matcher m = p.matcher(bugs);
+ if (m.find()) {
+ while (m.find())
+ {
+ int bugID = Integer.parseInt(m.group(1));
+ if (debug > 1)
+ {
+ System.out.println(Messages.getString("UpdateBugStateTask.found") + SP + bugID); //$NON-NLS-1$
+ }
+ doBug(bugID);
+ }
+ }
+ else
+ {
+ System.out.println("No bugs found matching specified state" + SP + "(" + status + "). Nothing to do!");
+ }
+ }
+ else
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.ambiguousRequest") + CS + //$NON-NLS-1$
+ Messages.getString("UpdateBugStateTask.mutuallyExclusive") + "!"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ } private void doBug(int bugID) throws BuildException
+ {
+ if (bugID == 0)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.invalidBugID") + SP + bugID + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ String bugcookie = BUGZILLA_LOGIN + login + BUGZILLA_LOGINCOOKIE + loginCookie;
+ String buildstring = EMPTY;
+ if (buildAlias.equals(EMPTY) && buildID.equals(EMPTY))
+ {
+ buildstring = Messages.getString("UpdateBugStateTask.latestBuild"); //$NON-NLS-1$
+ }
+ else if (!buildAlias.equals(EMPTY) && !buildID.equals(EMPTY))
+ {
+ buildstring = buildAlias + SP + "(" + buildID + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ else
+ {
+ buildstring = (!buildAlias.equals(EMPTY) ? buildAlias : buildID);
+ }
+
+ Hashtable args = new Hashtable();
+ args.put(FORM_NAME, PROCESS_BUG);
+ args.put(COMMENT, Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + "."); //$NON-NLS-1$ //$NON-NLS-2$
+ args.put(ID, new Integer(bugID));
+ args.put(PRODUCT, EMPTY);
+ args.put(VERSION, EMPTY);
+ args.put(COMPONENT, EMPTY);
+ args.put(TARGET_MILESTONE, EMPTY);
+ args.put(REP_PLATFORM, EMPTY);
+ args.put(OP_SYS, EMPTY);
+ args.put(PRIORITY, EMPTY);
+ args.put(BUG_SEVERITY, EMPTY);
+ args.put(BUG_FILE_LOC, EMPTY);
+ args.put(SHORT_DESC, EMPTY);
+ args.put(LONGDESCLENGTH, new Integer(1)); //Bugzilla doesn't seem to use this, but demands it anyways
+ args.put(KNOB, RESOLVE);
+ args.put(RESOLUTION, resolution);
+
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.usingCookie") + COLON + SP + bugcookie); //$NON-NLS-1$
+ System.err.println(Messages.getString("UpdateBugStateTask.usingComment") + COLON + SP + args.get(COMMENT).toString()); //$NON-NLS-1$
+ }
+
+ /* slurp xml for bugID */
+ String url = HTTPS_BUGS_ECLIPSE_ORG_BUGS_SHOW_BUG_CGI_ID + urlEncode(args.get(ID).toString()) + CTYPE_XML;
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
+ url + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ HttpsURLConnection xmlconn = getConn(url, GET, true, false, EMPTY);
+ String xml = slurpStream(xmlconn);
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.gotXML") + COLON); //$NON-NLS-1$
+ System.err.println(xml);
+ }
+ xmlconn.disconnect();
+
+ /* parse xml, build post string */
+ String req = EMPTY;
+ Hashtable pxml = parseXML(xml);
+ for (Enumeration e = args.keys(); e.hasMoreElements();)
+ {
+ String elem = e.nextElement().toString();
+ /* sometimes Bugzilla omits bug_file_loc if it's blank... */
+ if (args.get(elem).equals(EMPTY) && pxml.get(elem) != null)
+ {
+ args.put(elem, pxml.get(elem));
+ }
+
+ req += urlEncode(elem) + EQ + urlEncode(args.get(elem).toString()) + AMP;
+ }
+
+ req = req.substring(0, req.length() - 1);
+
+ /* update bug, if applicable */
+ if (pxml.get(BUG_STATUS) == null)
+ {
+ if (debug > 0)
+ {
+ System.out.println(Messages.getString("UpdateBugStateTask.noBugStatus") + SP + //$NON-NLS-1$
+ bugID + CS + Messages.getString("UpdateBugStateTask.missingBug")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ else if (pxml.get(BUG_STATUS).equals(status))
+ {
+ String bugurl = HTTPS_BUGS_ECLIPSE_ORG_BUGS_PROCESS_BUG_CGI;
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
+ bugurl + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ HttpsURLConnection bugconn = getConn(bugurl, POST, true, true, bugcookie);
+
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.postingData") + COLON); //$NON-NLS-1$
+ System.err.println(req);
+ }
+ sendStream(bugconn, req);
+ String response = slurpStream(bugconn);
+
+ // trap for invalid login cookie
+ if (response.indexOf(Messages.getString("UpdateBugStateTask.legitimateLoginAndPassword")) > 0) //$NON-NLS-1$
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.couldNotLogIn")); //$NON-NLS-1$
+ System.err.println(Messages.getString("UpdateBugStateTask.BugzillaReplied") + COLON + SP + //$NON-NLS-1$
+ "\"" + Messages.getString("UpdateBugStateTask.legitimateLoginAndPassword") + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.gotResponse") + COLON); //$NON-NLS-1$
+ System.err.println(response);
+ }
+ bugconn.disconnect();
+ System.err.println(Messages.getString("UpdateBugStateTask.setBugFailed") + SP + bugID + SP + //$NON-NLS-1$
+ Messages.getString("UpdateBugStateTask.to") + SP + resolution + SP + //$NON-NLS-1$
+ "(" + Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS) + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "\"" + Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + ".\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ else
+ {
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.gotResponse") + COLON); //$NON-NLS-1$
+ System.err.println(response);
+ }
+ bugconn.disconnect();
+ if (debug > 0)
+ {
+ System.out.println(Messages.getString("UpdateBugStateTask.setBug") + SP + bugID + SP + //$NON-NLS-1$
+ Messages.getString("UpdateBugStateTask.to") + SP + resolution + SP + //$NON-NLS-1$
+ "(" + Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS) + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "\"" + Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + ".\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+ }
+ else
+ {
+ if (debug > 0)
+ {
+ System.out.println(Messages.getString("UpdateBugStateTask.ignoreBug") + SP + args.get(ID).toString() + SP + //$NON-NLS-1$
+ "(" + Messages.getString("UpdateBugStateTask.notInExpectedState") + SP + status + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS).toString() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ }
+
+ private String urlEncode(String elem)
+ {
+ elem = htmlDecode(elem);
+
+ try
+ {
+ elem = URLEncoder.encode(elem, UTF_8);
+ }
+ catch (java.io.UnsupportedEncodingException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.couldntEncode") + SP + //$NON-NLS-1$
+ "'" + elem + "'" + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+
+ return elem;
+ }
+
+ private HttpsURLConnection getConn(String url, String method, boolean in, boolean out, String cookie)
+ {
+ URL u = null;
+ try
+ {
+ u = new URL(url);
+ }
+ catch (java.net.MalformedURLException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.badURL") + CS + //$NON-NLS-1$
+ url + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+
+ URLConnection conn = null;
+ try
+ {
+ conn = u.openConnection();
+ }
+ catch (java.io.IOException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.failedConnection") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ HttpsURLConnection sconn = (HttpsURLConnection)conn;
+
+ try
+ {
+ sconn.setRequestMethod(method);
+ }
+ catch (java.net.ProtocolException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.badHTTPMethod") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ if (method.equals(POST))
+ {
+ sconn.setRequestProperty(CONTENT_TYPE, APPLICATION_X_WWW_FORM_URLENCODED);
+ }
+
+ if (!cookie.equals(EMPTY))
+ {
+ sconn.setRequestProperty(COOKIE, cookie);
+ }
+
+ sconn.setDoInput(in);
+ sconn.setDoOutput(out);
+
+ try
+ {
+ sconn.connect();
+ }
+ catch (java.io.IOException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.connectError") + SP + //$NON-NLS-1$
+ url + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+
+ return sconn;
+ }
+
+ private void sendStream(HttpsURLConnection conn, String req)
+ {
+ try
+ {
+ PrintWriter out = new PrintWriter(conn.getOutputStream());
+ out.print(req);
+ out.flush();
+ out.close();
+ }
+ catch (java.io.IOException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.streamWriteError") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ private String slurpStream(HttpsURLConnection conn)
+ {
+ String ret = EMPTY;
+ try
+ {
+ BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String tmp;
+ while ((tmp = in.readLine()) != EMPTY && tmp != null)
+ {
+ ret += tmp + NL;
+ }
+
+ in.close();
+ }
+ catch (java.io.IOException e)
+ {
+ throw new BuildException(Messages.getString("UpdateBugStateTask.streamReadError") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ return ret;
+ }
+
+ /* this will only keep the last comment, but we don't use the comments anyways */
+ private Hashtable parseXML(String xml)
+ {
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.parsingXML") + "..."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ Hashtable pxml = new Hashtable();
+ Pattern p = Pattern.compile(XML_REGEX);
+ Matcher m = p.matcher(xml);
+ while (m.find())
+ {
+ if (debug > 1)
+ {
+ System.err.println(Messages.getString("UpdateBugStateTask.found") + SP + m.group(1) + SP + EQ + SP + m.group(2)); //$NON-NLS-1$
+ }
+ pxml.put(m.group(1), m.group(2));
+ }
+
+ return pxml;
+ }
+
+ private String htmlDecode(String str)
+ {
+ for (Iterator i = trans.keySet().iterator(); i.hasNext();)
+ {
+ String elem = i.next().toString();
+
+ str = Pattern.compile(elem).matcher(str).replaceAll(trans.get(elem).toString());
+ }
+
+ return str;
+ }
+
+ public static void main(String args[])
+ {
+ new UpdateBugStateTask();
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/Messages.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/Messages.java
new file mode 100644
index 0000000..d36f0f1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/Messages.java
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ */
+package org.eclipse.releng.util.bugzilla;
+
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.releng.util.bugzilla.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/messages.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/messages.properties
new file mode 100644
index 0000000..415e9c1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_bugzilla/org/eclipse/releng/util/bugzilla/messages.properties
@@ -0,0 +1,46 @@
+UpdateBugStateTask.invalidStatus=Invalid initial status
+UpdateBugStateTask.expectedOne=Expected one of
+UpdateBugStateTask.invalidResolution=Invalid resolution
+UpdateBugStateTask.expected=Expected
+UpdateBugStateTask.default=default
+UpdateBugStateTask.invalidBuildID=Invalid buildID. Entered
+UpdateBugStateTask.invalidTimestamp=Invalid timestamp (must be yyyymmddHHMM or yyyymmdd0000). Entered
+UpdateBugStateTask.expectingLogin=Was expecting a login
+UpdateBugStateTask.expectingLogincookie=Was expecting a logincookie
+UpdateBugStateTask.legitimateLoginAndPassword=I need a legitimate login and password to continue.
+UpdateBugStateTask.expectingStatus=Was expecting an initial status
+UpdateBugStateTask.usingBugList=Using explicit bug list
+UpdateBugStateTask.found=Found
+UpdateBugStateTask.expectingProduct=Was expecting a product
+UpdateBugStateTask.queryingFor=Querying for
+UpdateBugStateTask.bugs=bugs
+UpdateBugStateTask.connectingTo=Connecting to
+UpdateBugStateTask.gotBugList=Got bug list
+UpdateBugStateTask.ambiguousRequest=Ambiguous request
+UpdateBugStateTask.mutuallyExclusive=bugList and (endDate, milestone, product) are mutually exclusive
+UpdateBugStateTask.invalidBugID=Invalid bugID
+UpdateBugStateTask.latestBuild=latest build
+UpdateBugStateTask.fixedIn=Fixed in
+UpdateBugStateTask.usingCookie=Using cookie information
+UpdateBugStateTask.usingComment=Using comment
+UpdateBugStateTask.gotXML=Got xml
+UpdateBugStateTask.noBugStatus=Couldn't find bug_status for bug
+UpdateBugStateTask.missingBug=this means that the bug probably doesn't exist, ignoring.
+UpdateBugStateTask.postingData=Posting data
+UpdateBugStateTask.gotResponse=Got response
+UpdateBugStateTask.setBug=Set bug
+UpdateBugStateTask.setBugFailed=Failed to set bug
+UpdateBugStateTask.to=to
+UpdateBugStateTask.was=was
+UpdateBugStateTask.ignoreBug=Ignoring bug
+UpdateBugStateTask.notInExpectedState=as not in expected state
+UpdateBugStateTask.couldntEncode=Couldn't encode
+UpdateBugStateTask.couldNotLogIn=Could not use your login/logincookie credentials to log in.
+UpdateBugStateTask.badURL=Bad URL
+UpdateBugStateTask.failedConnection=Couldn't open connection
+UpdateBugStateTask.badHTTPMethod=Bad HTTP method
+UpdateBugStateTask.connectError=Error connecting to
+UpdateBugStateTask.streamWriteError=Error writing to stream
+UpdateBugStateTask.streamReadError=Error in reading from stream
+UpdateBugStateTask.BugzillaReplied=Bugzilla replied
+UpdateBugStateTask.parsingXML=Parsing xml
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedAddEntryTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedAddEntryTask.java
new file mode 100644
index 0000000..d0a6d96
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedAddEntryTask.java
@@ -0,0 +1,584 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators.rss;
+
+//TODO: bug - can't run CreateFeed and AddEntry together when debug=2 - file locking problem?
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.Date;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.util.DateUtils;
+
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be created - eg., /path/to/file.to.create.xml
+ * project - project's name, used to label the feed - eg., Eclipse, EMF, UML2
+ * branch - build's branch, eg., 2.2.0
+ * buildID - build's ID, eg., S200605051234
+ * feedURL - URL of the feed where it will be published - eg., http://servername/path/to/feed.xml
+ * note that feedURL is not required if the feed already exists, only if a new feed file must be created
+ * buildURL - URL of the build being added to the feed - eg., http://servername/path/to/project/branch/buildID/
+ *
+ * buildAlias - build's alias, eg., 2.2.0RC2
+ *
+ * dependencyURLs - upstream dependencies, eg., UML2 depends on emf and eclipse, so specify TWO URLs in properties file or ant task
+ *
+ * releaseNotesURL - URL of the build's release notes page - eg., http://www.eclipse.org/project/news/release-notes.php
+ * updateManagerURL - URL of the build's Update Manager site - eg., http://servername/path/to/project/updates/
+ * downloadsURL - URL of the build's downloads - eg., http://servername/path/to/project/downloads/
+ *
+ * jarSigningStatus - code to define jar signing status - eg., one of:
+ * NONE (or '') - no status available or not participating
+ * UNSIGNED - no jar signage available or done yet
+ * SIGNREADY - jars promoted to eclipse.org, ready for signing
+ * BUILDREADY - signed on eclipse.org, ready to be collected and bundled as zips and copied to UM site
+ * SIGNED - signed & bundled on download page and on UM site
+ *
+ * callistoStatus - code to define Callisto status, eg., one of:
+ * NONE (or '') - not part of Callisto or unknown status
+ * BUILDCOMPLETE - Have you finished your RC1 bits?
+ * 2006-05-02T20:50:00Z - When do you expect to finish them?
+ * TPTP - If you're waiting for another project, which one(s)? (TPTP is just an example)
+ * UMSITEREADY - Have you placed those bits in your update site?
+ * CALLISTOSITEREADY - Have you updated the features.xml file in the Callisto CVS directory?
+ * COMPLETE - Are you ready for RC1 to be declared?
+ *
+ * buildType - code to define type of build, eg., one of:
+ * N - Nightly
+ * I - Integration
+ * M - Maintenance
+ * S - Stable (Milestone or Release Candidate)
+ * R - Release
+ * MC - Maintenance-Callisto
+ * SC - Stable-Callisto
+ * RC - Release-Callisto
+ *
+ * Releases - comma or space-separated list of releases in quints of os,ws,arch,type/name,filename,...
+ * - eg., win32,win,x86,SDK,eclipse-SDK-3.2RC5-win32.zip,linux,gtk,x86_64,SDK,eclipse-SDK-3.2RC5-linux-gtk.tar.gz
+ * - (for examples and definitions of ws, os + arch, see below)
+ *
+ * JUnitTestURL - URL of the build's JUnit test results - eg., http://servername/path/to/project/branch/buildID/testResults.php
+ * performanceTestURL - URL of the build's performance tests - eg., http://servername/path/to/project/branch/buildID/performance/performance.php
+ * APITestURL - URL of the build's API test results - eg., http://servername/path/to/project/branch/buildID/testResults.php
+ *
+ * JUnitTestResults - comma or space-separated list of test results in quads of os,ws,arch,status,os,ws,status,arch,... - eg., win32,win,x86,PASS,linux,gtk,x86,PASS
+ * performanceTestResults - comma or space-separated list of test results in quads of os,ws,arch,status,os,ws,status,arch,... - eg., win32,win,x86_64,PASS,linux,gtk,x86_64,PASS
+ * APITestResults - comma or space-separated list of test results in quads of os,ws,arch,status,os,ws,status,arch,... - eg., win32,win,ppc,PASS,linux,gtk,ppc,PASS
+ * ws - window system - eg., ALL, win32, win64, linux, macos...
+ * os - operating system - eg., ALL, win, gtk, motif, carbon, ...
+ * arch - architecture, eg., ALL, x86, x86_64, ppc, ...
+ * status - status code for test results - eg., one of: PASS, PENDING, FAIL, UNKNOWN, SKIPPED
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedAddEntryTask extends Task {
+
+ private int debug = 0;
+
+ private static final String now = getTimestamp();
+
+ //$ANALYSIS-IGNORE codereview.java.rules.portability.RulePortabilityLineSeparators
+ private static final String NL="\n"; //$NON-NLS-1$
+ private static final String NS = ""; //$NON-NLS-1$
+ private static final String SEP = "----"; //$NON-NLS-1$
+ private static final String SP = " "; //$NON-NLS-1$
+
+ private static final String splitter = "[,\t " + NL + "]+"; //$NON-NLS-1$ //$NON-NLS-2$
+
+ //required fields
+ private File file;
+ private String project;
+ private String branch;
+ private String buildID;
+ private String feedURL;
+ private String buildURL;
+
+ //optional
+ private String buildAlias;
+
+ //optional
+ private String[] dependencyURLs = new String[] {};
+
+ //optional
+ private String releaseNotesURL;
+ private String updateManagerURL;
+ private String downloadsURL;
+ private String jarSigningStatus;
+ private String callistoStatus;
+ private String buildType;
+
+ //optional
+ private String[] releases = new String[] {};
+
+ //optional
+ private String JUnitTestURL;
+ private String performanceTestURL;
+ private String APITestURL;
+ private String[] JUnitTestResults;
+ private String[] performanceTestResults;
+ private String[] APITestResults;
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required fields
+ public void setFile(String file) {
+ if (isNullString(file))
+ { System.err.println(Messages.getString("RSSFeedCommon.FileError")); } //$NON-NLS-1$
+ else
+ { this.file = new File(file); }
+ }
+ public void setProject(String project) {
+ if (isNullString(project))
+ { System.err.println(Messages.getString("RSSFeedCommon.ProjectError")); } //$NON-NLS-1$
+ else
+ { this.project = project; }
+ }
+ public void setBranch(String branch) {
+ if (isNullString(branch))
+ { System.err.println(Messages.getString("RSSFeedAddEntryTask.BranchError")); } //$NON-NLS-1$
+ else
+ { this.branch = branch; }
+ }
+ public void setBuildID(String buildID) {
+ if (isNullString(buildID))
+ { System.err.println(Messages.getString("RSSFeedAddEntryTask.BuildIDError")); } //$NON-NLS-1$
+ else
+ { this.buildID = buildID; }
+ }
+ public void setFeedURL(String feedURL) {
+ if (isNullString(feedURL))
+ { System.err.println(Messages.getString("RSSFeedCommon.FeedURLError")); } //$NON-NLS-1$
+ else
+ { this.feedURL = feedURL; }
+ }
+ public void setBuildURL(String buildURL) {
+ if (isNullString(buildURL))
+ { System.err.println(Messages.getString("RSSFeedAddEntryTask.BuildURLError")); } //$NON-NLS-1$
+ else
+ { this.buildURL = buildURL; }
+ }
+
+ //optional: alias is usually something like "3.2.0M6"
+ public void setBuildAlias(String buildAlias) { this.buildAlias = buildAlias; }
+
+ //optional: upstream dependencies, eg., UML2 depends on emf and eclipse, so specify TWO URLs in properties file or ant task
+ public void setDependencyURLs(String dependencyURLs) { if (!isNullString(dependencyURLs)) { this.dependencyURLs = dependencyURLs.split(splitter); } }
+
+ //optional: define releases available in this build for a series of operating systems, windowing systems, and type
+ public void setReleases(String releases) { if (!isNullString(releases)) { this.releases = releases.split(splitter); } }
+
+ //optional: informational links to release notes, downloads, update manager
+ public void setReleaseNotesURL(String releaseNotesURL) { this.releaseNotesURL = releaseNotesURL; }
+ public void setUpdateManagerURL(String updateManagerURL) { this.updateManagerURL = updateManagerURL; }
+ public void setDownloadsURL(String downloadsURL) { this.downloadsURL = downloadsURL; }
+ public void setJarSigningStatus(String jarSigningStatus) { this.jarSigningStatus = jarSigningStatus; }
+ public void setCallistoStatus(String callistoStatus) { this.callistoStatus = callistoStatus; }
+ public void setBuildType(String buildType) {
+ if (!isNullString(buildType))
+ {
+ this.buildType = buildType;
+ }
+ else
+ {
+ this.buildType = buildID.replaceAll("[^NIMSR]", NS); //$NON-NLS-1$
+ if (this.buildType.length()>1)
+ {
+ this.buildType=this.buildType.substring(0, 1);
+ }
+ }
+
+ }
+
+ //optional: test URLs and results
+ public void setJUnitTestURL(String JUnitTestURL) { this.JUnitTestURL = JUnitTestURL; }
+ public void setPerformanceTestURL(String performanceTestURL) { this.performanceTestURL = performanceTestURL; }
+ public void setAPITestURL(String APITestURL) { this.APITestURL = APITestURL; }
+ public void setJUnitTestResults(String JUnitTestResults) { if (!isNullString(JUnitTestResults)) { this.JUnitTestResults = JUnitTestResults.split(splitter); } }
+ public void setPerformanceTestResults(String performanceTestResults) { if (!isNullString(performanceTestResults)) { this.performanceTestResults = performanceTestResults.split(splitter); } }
+ public void setAPITestResults(String APITestResults) { if (!isNullString(APITestResults)) { this.APITestResults = APITestResults.split(splitter); } }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+ if (debug>0) {
+ System.out.println(Messages.getString("RSSFeedAddEntryTask.AddingEntryTo") + project + SP + Messages.getString("RSSFeedCommon.RSSFeedFile") + SP + file.toString() + ", " + Messages.getString("RSSFeedCommon.ToBePublishedAt") + feedURL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+ }
+ updateFeedXML(file); // load previous
+ }
+
+ //$ANALYSIS-IGNORE codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions
+ private void updateFeedXML(File file){
+ if (!file.exists()) {
+ System.out.println(Messages.getString("RSSFeedCommon.RSSFeedFile") + SP + file.toString() + SP + Messages.getString("RSSFeedAddEntryTask.DoesNotExist")); //$NON-NLS-1$ //$NON-NLS-2$
+ RSSFeedCreateFeedTask creator=new RSSFeedCreateFeedTask();
+ creator.setFile(file.toString());
+ creator.setFeedURL(feedURL);
+ creator.setProject(project);
+ creator.setDebug(debug);
+ creator.execute();
+ }
+ DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setNamespaceAware(true);
+ DocumentBuilder documentBuilder=null;
+ try {
+ documentBuilder=documentBuilderFactory.newDocumentBuilder();
+ }
+ catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }
+ Document document=null;
+ try {
+ document=documentBuilder.parse(file);
+ }
+ catch (SAXException e) {
+ e.printStackTrace();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ Transformer transformer = null;
+ try {
+ transformer = createTransformer("UTF-8"); //$NON-NLS-1$
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ }
+
+ Element element=document.getDocumentElement();
+ for (Node child=element.getFirstChild(); child != null; child=child.getNextSibling()) {
+ if ("updated".equals(child.getLocalName())) { //$NON-NLS-1$
+ if (debug > 0) {
+ System.out.println(Messages.getString("RSSFeedCommon.Set") + " <" + child.getLocalName()+ ">"+ now+ "</"+ child.getLocalName()+ ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ }
+ ((Element)child).setTextContent(now);
+ }
+ else if ("id".equals(child.getLocalName())) { //$NON-NLS-1$
+ Node newNode=createEntry(document);
+ if (debug > 0) {
+ System.out.println(Messages.getString("RSSFeedAddEntryTask.AttachNew") + " <entry/>"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ try {
+ if (debug > 0) {
+ System.out.println(SEP); //$NON-NLS-1$
+ transformer.transform(new DOMSource(newNode),new StreamResult(System.out));
+ System.out.println(SEP); //$NON-NLS-1$
+ }
+ }
+ catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ Node refNode=child.getNextSibling();
+ element.insertBefore(document.createTextNode(NL + " "),refNode); //$NON-NLS-1$
+ element.insertBefore(newNode,refNode);
+ break;
+ }
+ }
+ try {
+ transformer.transform(new DOMSource(document),new StreamResult(new OutputStreamWriter(new FileOutputStream(file))));
+ if (debug > 1) {
+ System.out.println(SEP); //$NON-NLS-1$
+ transformer.transform(new DOMSource(document),new StreamResult(System.out));
+ System.out.println(SEP); //$NON-NLS-1$
+ }
+ }
+ catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ private Element createEntry(Document document) {
+
+// <entry>
+ Element entry = document.createElement("entry"); //$NON-NLS-1$
+
+ String[] txt = { NL + " ", NL + " ", NL + " ", NL + " ", NL + " " , NL + " " }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+ Element elem = null;
+
+ String projectVersionString = project + SP + (!isNullString(buildAlias)? //$NON-NLS-1$
+ (buildAlias.startsWith(branch) ?
+ buildAlias + " (" + buildID + ")" : // 2.2.0RC2 (S200605051234) //$NON-NLS-1$ //$NON-NLS-2$
+ buildAlias + " (" + branch + "." + buildID + ")") : // Foobar (2.2.0.S200605051234) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ branch + SP + buildID); // 2.2.0.S200605051234 //$NON-NLS-1$
+
+ doVarSubs();
+
+// <title>[announce] " + project + SP + branch + SP + buildID + " is available</title>
+ elem = document.createElement("title"); //$NON-NLS-1$
+ elem.setTextContent(Messages.getString("RSSFeedAddEntryTask.AnnouncePrefix") + projectVersionString + SP + Messages.getString("RSSFeedAddEntryTask.IsAvailable")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ attachNode(document, entry, elem, txt[1]);
+
+// <link href=\"" + buildURL + "\"/>
+ elem = document.createElement("link"); //$NON-NLS-1$
+ elem.setAttribute("href", !isNullString(buildURL) ? buildURL : projectVersionString); //$NON-NLS-1$
+ attachNode(document, entry, elem, txt[1]);
+
+// <id>" + buildURL + "</id>
+ elem = document.createElement("id"); //$NON-NLS-1$
+ elem.setTextContent(!isNullString(buildURL) ? buildURL : projectVersionString);
+ attachNode(document, entry, elem, txt[1]);
+
+// <updated>" + getTimestamp() + "</updated>
+ elem = document.createElement("updated"); //$NON-NLS-1$
+ elem.setTextContent(now);
+ attachNode(document, entry, elem, txt[1]);
+
+// <summary>
+ Element summary = document.createElement("summary"); //$NON-NLS-1$
+ attachNode(document, entry, summary, txt[1]);
+
+// <build callisto="" jars="" type="" href="" xmlns="http://www.eclipse.org/2006/BuildFeed">
+ Element build = document.createElement("build"); //$NON-NLS-1$
+ build.setAttribute("jars", jarSigningStatus); //$NON-NLS-1$
+ build.setAttribute("callisto", callistoStatus); //$NON-NLS-1$
+ build.setAttribute("type", buildType); //$NON-NLS-1$
+ build.setAttribute("xmlns", "http://www.eclipse.org/2006/BuildFeed"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (!isNullString(buildURL)) {
+ build.setAttribute("href",buildURL); //$NON-NLS-1$
+ }
+ attachNode(document, summary, build, txt[2]);
+
+// <update>" + usiteURL + "</update>
+ if (!isNullString(updateManagerURL)) {
+ elem = document.createElement("update"); //$NON-NLS-1$
+ elem.setTextContent(updateManagerURL);
+ attachNode(document, build, elem, txt[3]);
+ }
+
+// <downloads>" + dropsURL + "</downloads>
+ if (!isNullString(downloadsURL)) {
+ elem = document.createElement("downloads"); //$NON-NLS-1$
+ elem.setTextContent(downloadsURL);
+ attachNode(document, build, elem, txt[3]);
+ }
+
+// <releasenotes>" + releaseNotesURL + "</releasenotes>
+ if (!isNullString(releaseNotesURL)) {
+ elem = document.createElement("releasenotes"); //$NON-NLS-1$
+ elem.setTextContent(releaseNotesURL);
+ attachNode(document, build, elem, txt[3]);
+ }
+
+// <releases>
+// <release os="" ws="" type=""> + filename + </release>
+ if (releases!=null && releases.length>0) {
+ if (releases.length % 5 != 0) {
+ System.err.println(Messages.getString("RSSFeedAddEntryTask.WrongNumberOfVariables") + SP + Messages.getString("RSSFeedAddEntryTask.MustBeMultipleOf5") + SP + Messages.getString("RSSFeedAddEntryTask.InProperty") + SP + "releases"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ Element releasesElem = document.createElement("releases"); //$NON-NLS-1$
+ for (int i = 0; i < releases.length; i+=5)
+ {
+ Element release = document.createElement("release"); //$NON-NLS-1$
+ release.setAttribute("os", releases[i]); //$NON-NLS-1$
+ release.setAttribute("ws", releases[i+1]); //$NON-NLS-1$
+ release.setAttribute("arch", releases[i+2]); //$NON-NLS-1$
+ release.setAttribute("type", releases[i+3]); //$NON-NLS-1$
+ release.setTextContent(varSub(releases[i+4]));
+ attachNode(document, releasesElem, release, txt[4]);
+ }
+ attachNode(document, build, releasesElem, txt[3]);
+ }
+
+// <tests>
+ Element tests = document.createElement("tests"); //$NON-NLS-1$
+
+// <test type=\"junit\" href=\"" + JUnitTestURL + "\"/>
+ if (!isNullString(JUnitTestURL)) {
+ Element test = document.createElement("test"); //$NON-NLS-1$
+ test.setAttribute("type", "junit"); //$NON-NLS-1$ //$NON-NLS-2$
+ test.setAttribute("href", JUnitTestURL); //$NON-NLS-1$
+ if (JUnitTestResults!=null && JUnitTestResults.length>0) {
+ if (JUnitTestResults.length % 4 != 0) {
+ System.err.println(Messages.getString("RSSFeedAddEntryTask.WrongNumberOfVariables") + SP + Messages.getString("RSSFeedAddEntryTask.MustBeMultipleOf4") + SP + Messages.getString("RSSFeedAddEntryTask.InProperty") + SP + "JUnitTestResults"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ for (int i = 0; i < JUnitTestResults.length; i+=4)
+ {
+ Element result = document.createElement("result"); //$NON-NLS-1$
+ result.setAttribute("os", JUnitTestResults[i]); //$NON-NLS-1$
+ result.setAttribute("ws", JUnitTestResults[i+1]); //$NON-NLS-1$
+ result.setAttribute("arch", JUnitTestResults[i+2]); //$NON-NLS-1$
+ result.setTextContent(JUnitTestResults[i+3]);
+ attachNode(document, test, result, txt[5]);
+ }
+ // extra space to close containing tag
+ elem.appendChild(document.createTextNode(txt[4]));
+ }
+ attachNode(document, tests, test, txt[4]);
+ }
+
+// <test type=\"performance\" href=\"" + performanceTestURL + "\"/>
+ if (!isNullString(performanceTestURL)) {
+ Element test = document.createElement("test"); //$NON-NLS-1$
+ test.setAttribute("type", "performance"); //$NON-NLS-1$ //$NON-NLS-2$
+ test.setAttribute("href", performanceTestURL); //$NON-NLS-1$
+ if (performanceTestResults!=null && performanceTestResults.length>0) {
+ if (performanceTestResults.length % 4 != 0) {
+ System.err.println(Messages.getString("RSSFeedAddEntryTask.WrongNumberOfVariables") + SP + Messages.getString("RSSFeedAddEntryTask.MustBeMultipleOf4") + SP + Messages.getString("RSSFeedAddEntryTask.InProperty") + SP + "performanceTestResults"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ for (int i = 0; i < performanceTestResults.length; i+=4)
+ {
+ Element result = document.createElement("result"); //$NON-NLS-1$
+ result.setAttribute("os", performanceTestResults[i]); //$NON-NLS-1$
+ result.setAttribute("ws", performanceTestResults[i+1]); //$NON-NLS-1$
+ result.setAttribute("arch", performanceTestResults[i+2]); //$NON-NLS-1$
+ result.setTextContent(performanceTestResults[i+3]);
+ attachNode(document, test, result, txt[5]);
+ }
+ // extra space to close containing tag
+ test.appendChild(document.createTextNode(txt[4]));
+ }
+ attachNode(document, tests, test, txt[4]);
+ }
+
+// <test type=\"performance\" href=\"" + performanceTestURL + "\"/>
+ if (!isNullString(APITestURL)) {
+ Element test = document.createElement("test"); //$NON-NLS-1$
+ test.setAttribute("type", "api"); //$NON-NLS-1$ //$NON-NLS-2$
+ test.setAttribute("href", APITestURL); //$NON-NLS-1$
+ if (APITestResults!=null && APITestResults.length>0) {
+ if (APITestResults.length % 4 != 0) {
+ System.err.println(Messages.getString("RSSFeedAddEntryTask.WrongNumberOfVariables") + SP + Messages.getString("RSSFeedAddEntryTask.MustBeMultipleOf4") + SP + Messages.getString("RSSFeedAddEntryTask.InProperty") + SP + "APITestResults"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ for (int i = 0; i < APITestResults.length; i+=4)
+ {
+ Element result = document.createElement("result"); //$NON-NLS-1$
+ result.setAttribute("os", APITestResults[i]); //$NON-NLS-1$
+ result.setAttribute("ws", APITestResults[i+1]); //$NON-NLS-1$
+ result.setAttribute("arch", APITestResults[i+2]); //$NON-NLS-1$
+ result.setTextContent(APITestResults[i+3]);
+ attachNode(document, tests, result, txt[5]);
+ }
+ // extra space to close containing tag
+ test.appendChild(document.createTextNode(txt[4]));
+ }
+ attachNode(document, tests, test, txt[4]);
+ }
+
+ attachNode(document, build, tests, txt[3]);
+
+ if (dependencyURLs!=null && dependencyURLs.length>0) {
+ // <dependencies>
+ // <dependency>" + dependencyURL + "</dependency>
+ Element dependencies = document.createElement("dependencies"); //$NON-NLS-1$
+ for (int i = 0; i < dependencyURLs.length; i++)
+ {
+ elem = document.createElement("dependency"); //$NON-NLS-1$
+ elem.setTextContent(dependencyURLs[i]);
+ attachNode(document, dependencies, elem, txt[4]);
+ }
+ attachNode(document, build, dependencies, txt[3]);
+ }
+
+ return entry;
+ }
+
+ //$ANALYSIS-IGNORE codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions
+ private void attachNode(Document document,Element entry,Element elem,String txt){
+ entry.appendChild(document.createTextNode(txt));
+ entry.appendChild(elem);
+ }
+
+ private static String getTimestamp() { // eg., 2006-04-10T20:40:08Z
+ return DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN) + "Z"; //$NON-NLS-1$
+ }
+
+ private void doVarSubs()
+ {
+ feedURL = varSub(feedURL);
+ buildURL = varSub(buildURL);
+
+ releaseNotesURL = varSub(releaseNotesURL);
+ updateManagerURL = varSub(updateManagerURL);
+ downloadsURL = varSub(downloadsURL);
+
+ JUnitTestURL = varSub(JUnitTestURL);
+ performanceTestURL = varSub(performanceTestURL);
+ APITestURL = varSub(APITestURL);
+ }
+
+ public static Transformer createTransformer(String encoding) throws TransformerException
+ {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+
+ try
+ {
+ transformerFactory.setAttribute("indent-number", new Integer(2)); //$NON-NLS-1$
+ }
+ catch (IllegalArgumentException exception)
+ {
+ }
+
+ Transformer transformer = transformerFactory.newTransformer();
+
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+
+ // Unless a width is set, there will be only line breaks but no indentation.
+ // The IBM JDK and the Sun JDK don't agree on the property name,
+ // so we set them both.
+ //
+ transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2"); //$NON-NLS-1$ //$NON-NLS-2$
+ transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (encoding != null)
+ {
+ transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
+ }
+ return transformer;
+ }
+
+ /*
+ * variable substitution in URLs - eg., replace %%branch%% and %%buildID%% in buildURL
+ */
+ private String varSub(String urlstring)
+ {
+ if (!isNullString(urlstring) && urlstring.indexOf("%%")>=0) //$NON-NLS-1$
+ {
+ return urlstring.replaceAll(Messages.getString("RSSFeedAddEntryTask.BranchKeyword"), branch).replaceAll(Messages.getString("RSSFeedAddEntryTask.BuildIDKeyword"), buildID).replaceAll(Messages.getString("RSSFeedAddEntryTask.BuildAliasKeyword"), buildAlias); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ return urlstring;
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedCreateFeedTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedCreateFeedTask.java
new file mode 100644
index 0000000..042c0cf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedCreateFeedTask.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators.rss;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.Date;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.util.DateUtils;
+
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+//TODO: bug - can't run CreateFeed and AddEntry back when debug=2
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be created - eg., /path/to/file.to.create.xml
+ * project - project's name, used to label the feed - eg., Eclipse, EMF, UML2
+ * feedURL - URL of the feed where it will be published - eg., http://servername/path/to/feed.xml
+ * @author nickb
+ *
+ */
+public class RSSFeedCreateFeedTask extends Task {
+
+ private int debug = 0;
+
+ //$ANALYSIS-IGNORE codereview.java.rules.portability.RulePortabilityLineSeparators
+ private static final String NL="\n"; //$NON-NLS-1$
+ private static final String NS = ""; //$NON-NLS-1$
+ private static final String SP = " "; //$NON-NLS-1$
+
+ //required fields
+ private File file;
+ private String project;
+ private String feedURL;
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required fields
+ public void setFile(String file) {
+ if (isNullString(file))
+ { System.err.println(Messages.getString("RSSFeedCommon.FileError")); } //$NON-NLS-1$
+ else
+ { this.file = new File(file); }
+ }
+ public void setProject(String project) {
+ if (isNullString(project))
+ { System.err.println(Messages.getString("RSSFeedCommon.ProjectError")); } //$NON-NLS-1$
+ else
+ { this.project = project; }
+ }
+ public void setFeedURL(String feedURL) {
+ if (isNullString(feedURL))
+ { System.err.println(Messages.getString("RSSFeedCommon.FeedURLError")); } //$NON-NLS-1$
+ else
+ { this.feedURL = feedURL; }
+ }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+ if (debug>0) {
+ System.out.println(Messages.getString("RSSFeedCreateFeedTask.Creating") + project + SP + Messages.getString("RSSFeedCommon.RSSFeedFile") + SP + file.toString() + ", " + Messages.getString("RSSFeedCommon.ToBePublishedAt") + feedURL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+ }
+ writeFeedXML(createFeedXML(),file);
+ if (debug>1) {
+ writeFeedXML(createFeedXML(),System.out);
+ }
+ }
+
+ private String createFeedXML() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("<?xml-stylesheet href=\"http://www.blogger.com/styles/atom.css\" type=\"text/css\"?>" + NL); //$NON-NLS-1$
+ sb.append("<feed xmlns=\"http://www.w3.org/2005/Atom\">" + NL); //$NON-NLS-1$
+ sb.append(" <title>" + project + SP + Messages.getString("RSSFeedCreateFeedTask.Builds") + "</title>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ sb.append(" <link rel=\"self\" type=\"application/atom+xml\" href=\"" + (!isNullString(feedURL)?feedURL:NS) + "\"/>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ sb.append(" <updated>" + getTimestamp() + "</updated>" + NL); //$NON-NLS-1$ //$NON-NLS-2$
+ sb.append(" <author>" + NL); //$NON-NLS-1$
+ sb.append(" <name>" + (!isNullString(project)?project + SP : NS) + Messages.getString("RSSFeedCreateFeedTask.BuildTeam") + "</name>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ sb.append(" </author>" + NL); //$NON-NLS-1$
+ sb.append(" <id>" + (!isNullString(feedURL)?feedURL:NS) + "</id>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ sb.append("</feed>" + NL + NL); //$NON-NLS-1$
+ return sb.toString();
+ }
+
+ private void writeFeedXML(String feedXML,File file) {
+ try{
+ PrintWriter writer = new PrintWriter(new FileWriter(file));
+ writer.println(feedXML);
+ writer.flush();
+ writer.close();
+ } catch (IOException e){
+ System.out.println(Messages.getString("RSSFeedCreateFeedTask.UnableToWriteToFile")+file); //$NON-NLS-1$
+ }
+
+ }
+
+ private void writeFeedXML(String feedXML, PrintStream ps) {
+ PrintWriter writer = new PrintWriter(ps);
+ writer.println(feedXML);
+ writer.flush();
+ writer.close();
+ }
+
+ private String getTimestamp() { // eg., 2006-04-10T20:40:08Z
+ return DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN) + "Z"; //$NON-NLS-1$
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedGetPropertyTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedGetPropertyTask.java
new file mode 100644
index 0000000..b8f4855
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedGetPropertyTask.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators.rss;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be read - eg., /path/to/file.to.read.xml
+ * xpath - xpath string representing the object to read
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedGetPropertyTask extends Task {
+
+ private int debug = 0;
+
+ //required fields
+ private File file;
+
+ private String xpath;
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required fields
+ public void setFile(String file) {
+ if (isNullString(file))
+ { System.err.println(Messages.getString("RSSFeedCommon.FileError")); } //$NON-NLS-1$
+ else
+ { this.file = new File(file); }
+ }
+ public void setXpath(String xpath) {
+ if (isNullString(xpath))
+ { System.err.println(Messages.getString("RSSFeedCommon.XpathError")); } //$NON-NLS-1$
+ else
+ { this.xpath = xpath; }
+ }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+ RSSFeedUpdateEntryTask updater = new RSSFeedUpdateEntryTask();
+ updater.setFile(file.toString());
+ updater.setXpath(xpath);
+ updater.setDebug(debug);
+ updater.execute();
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedUpdateEntryTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedUpdateEntryTask.java
new file mode 100644
index 0000000..417b8bb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/generators/rss/RSSFeedUpdateEntryTask.java
@@ -0,0 +1,338 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.generators.rss;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Date;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.util.DateUtils;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.xml.sax.SAXException;
+
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be read - eg., /path/to/file.to.read.xml
+ * xpath - xpath string representing the object to modify
+ * replacement - string to use as replacement
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedUpdateEntryTask extends Task {
+
+ private int debug = 0;
+
+ private static final String now = getTimestamp();
+
+ private static final XPath xp = XPathFactory.newInstance().newXPath();
+
+ private static final String NS = ""; //$NON-NLS-1$
+ private static final String SEP = "----"; //$NON-NLS-1$
+ private static final String SP = " "; //$NON-NLS-1$
+
+ //required fields
+ private File file;
+
+ private String xpath;
+ private String replacement;
+
+ private Transformer transformer = null;
+
+ private boolean isNodeFound = false;
+ private boolean isNodeChanged = false;
+ private Node foundNode = null;
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required fields
+ public void setFile(String file) {
+ if (isNullString(file))
+ { System.err.println(Messages.getString("RSSFeedCommon.FileError")); } //$NON-NLS-1$
+ else
+ { this.file = new File(file); }
+ }
+ public void setXpath(String xpath) {
+ if (isNullString(xpath))
+ { System.err.println(Messages.getString("RSSFeedCommon.XpathError")); } //$NON-NLS-1$
+ else
+ { this.xpath = xpath; }
+ }
+
+ //optional - if null, display value found instead of changing it - see RSSFeedGetPropertyTask
+ public void setReplacement(String replacement) { this.replacement = replacement; }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+ if (debug>0) {
+ System.out.println(Messages.getString("RSSFeedUpdateEntryTask.SearchingFor") + SP + xpath + (!isNullString(replacement)?", " + Messages.getString("RSSFeedUpdateEntryTask.ReplacingWith") + " '" + replacement + "'":NS)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+ }
+ updateFeedXML(file); // load previous
+ }
+
+ //$ANALYSIS-IGNORE codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions
+ private void updateFeedXML(File file){
+ if (file.exists()) {
+ DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setNamespaceAware(true);
+ DocumentBuilder documentBuilder=null;
+ try {
+ documentBuilder=documentBuilderFactory.newDocumentBuilder();
+ }
+ catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }
+ Document document=null;
+ try {
+ document=documentBuilder.parse(file);
+ }
+ catch (SAXException e) {
+ e.printStackTrace();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ transformer = RSSFeedAddEntryTask.createTransformer("UTF-8"); //$NON-NLS-1$
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ }
+
+ if (!isNullString(replacement)) {
+ setEntryNodeUpdate(document.getDocumentElement());
+ }
+ Node newNode=findAndReplace(document);
+ if (debug > 1 && newNode != null) {
+ try {
+ System.out.println(SEP);
+ transformer.transform(new DOMSource(newNode),new StreamResult(System.out));
+ System.out.println(SEP);
+ }
+ catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ }
+ if (!isNullString(replacement) && newNode != null) {
+ try {
+ transformer.transform(new DOMSource(document),new StreamResult(new PrintStream(file)));
+ }
+ catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ else {
+ System.out.println(Messages.getString("RSSFeedCommon.RSSFeedFile") + SP + file.toString()+ " "+ Messages.getString("RSSFeedUpdateEntryTask.DoesNotExist")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ }
+
+ // get/set the desired node
+ public Node getFoundNode()
+ {
+ return this.foundNode;
+ }
+ private void setFoundNode(Node foundNode)
+ {
+ this.foundNode = foundNode;
+ }
+
+ // has the desired node been found?
+ public boolean getNodeFound()
+ {
+ return this.isNodeFound;
+ }
+ private void setNodeFound(boolean isNodeFound)
+ {
+ this.isNodeFound = isNodeFound;
+ }
+
+ // has the desired node been changed?
+ public boolean getNodeChanged()
+ {
+ return this.isNodeChanged;
+ }
+ private void setNodeChanged(boolean isNodeChanged)
+ {
+ this.isNodeChanged = isNodeChanged;
+ }
+
+ /**
+ * Modify an entry:
+ *
+ * <entry>
+ * <title/>
+ * <link href=""/>
+ * <id/>
+ * <updated/>
+ * <summary>
+ * ...
+ * </summary>
+ * </entry>
+ */
+ private Node findAndReplace(Document document) {
+ Node parentEntryNode = null;
+ Node aNode = null;
+ if (debug==0) { System.out.print(xpath + (isNullString(replacement)?" = ":" :: ")); } //$NON-NLS-1$ //$NON-NLS-2$
+ NodeList nodelist = getNodeList(document, xpath);
+ // Process the elements in the nodelist
+ if (nodelist != null && nodelist.getLength()>0) {
+ for (int i=0; i<nodelist.getLength(); i++) {
+ Node node = (Node)nodelist.item(i);
+ switch (node.getNodeType())
+ {
+ case Node.ATTRIBUTE_NODE :
+ aNode = (Attr)nodelist.item(i);
+ if (debug>0) { System.out.print(Messages.getString("RSSFeedUpdateEntryTask.DebugFoundAttribute")); } //$NON-NLS-1$
+ break;
+
+ case Node.ELEMENT_NODE :
+ aNode = (Element)nodelist.item(i);
+ if (debug>0) { System.out.print(Messages.getString("RSSFeedUpdateEntryTask.DebugFoundElement")); } //$NON-NLS-1$
+ break;
+
+ case Node.TEXT_NODE :
+ aNode = (Text)nodelist.item(i);
+ if (debug>0) { System.out.print(Messages.getString("RSSFeedUpdateEntryTask.DebugFoundText")); } //$NON-NLS-1$
+ break;
+
+ default:
+ aNode = null;
+ break;
+ }
+ if (aNode != null) {
+ setFoundNode(aNode);
+ setNodeFound(true);
+ System.out.print((debug>0?aNode.getNodeName() + " = ":NS) + aNode.getNodeValue()); //$NON-NLS-1$ //$NON-NLS-2$
+ if (!isNullString(replacement)) { aNode.setTextContent(replacement); }
+ System.out.println(isNullString(replacement)?NS:" => " + replacement); //$NON-NLS-1$ //$NON-NLS-2$
+ if (debug>0) {
+ try
+ {
+ // write to console
+ System.out.println(SEP); //$NON-NLS-1$
+ transformer.transform(new DOMSource(getParentNode(document,aNode,null,NS)), new StreamResult(System.out)); //$NON-NLS-1$
+ System.out.println(SEP); //$NON-NLS-1$
+ }
+ catch (TransformerException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ if (!isNullString(replacement)) {
+ parentEntryNode = getParentNode(document, aNode, "entry", NS); //$NON-NLS-1$ //$NON-NLS-2$
+ setEntryNodeUpdate(parentEntryNode);
+ }
+ }
+ }
+ } else {
+ System.out.println(Messages.getString("RSSFeedUpdateEntryTask.XpathNodeNotFound")); //$NON-NLS-1$
+ }
+ return parentEntryNode;
+ }
+
+ private Node getParentNode(Document document, Node nodeIn, String target, String indent)
+ {
+ Node node = nodeIn;
+ if (node.getNodeType() != Node.ELEMENT_NODE) {
+ if (debug>1) { System.out.println(indent + Messages.getString("RSSFeedUpdateEntryTask.DebugGotATNode") + node.getNodeName()); } //$NON-NLS-1$
+ // get the element for the attrib/text node
+ NodeList nodelist = getNodeList(document, xpath.substring(0, xpath.lastIndexOf("/")));
+ if (nodelist !=null && nodelist.getLength()>0)
+ {
+ for (int i=0; i<nodelist.getLength(); i++) {
+ node = (Node)nodelist.item(i);
+ break;
+ }
+ }
+ }
+ if (debug>1) { System.out.println(indent + Messages.getString("RSSFeedUpdateEntryTask.DebugGotENode") + node.getNodeName() + " (" + node.getNodeType() + ")"); } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (!isNullString(target) && !node.getNodeName().equals(target))
+ {
+ node = getParentNode(document, node.getParentNode(), target, indent + "_ "); //$NON-NLS-1$
+ }
+ return node;
+ }
+
+ private NodeList getNodeList(Document document, String xpath)
+ {
+ NodeList nodelist = null;
+ try
+ {
+ xp.reset();
+ Object o = xp.evaluate(xpath, document, XPathConstants.NODESET);
+ if (o instanceof NodeList)
+ {
+ nodelist = (NodeList)o;
+ }
+ }
+ catch (XPathExpressionException e)
+ {
+ e.printStackTrace();
+ }
+ return nodelist;
+ }
+
+ //$ANALYSIS-IGNORE codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions
+ private void setEntryNodeUpdate(Node parentEntryNode){
+ for (Node child=parentEntryNode.getFirstChild(); child != null; child=child.getNextSibling()) {
+ if ("updated".equals(child.getLocalName())) { //$NON-NLS-1$
+ if (debug > 0) {
+ System.out.println(Messages.getString("RSSFeedCommon.Set") + " <" + child.getLocalName()+ ">"+ now+ "</"+ child.getLocalName()+ ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ }
+ ((Element)child).setTextContent(now);
+ setNodeChanged(true);
+ break;
+ }
+ }
+ }
+
+
+ private static String getTimestamp() { // eg., 2006-04-10T20:40:08Z
+ return DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN) + "Z"; //$NON-NLS-1$
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedPublisherTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedPublisherTask.java
new file mode 100644
index 0000000..b26e7f9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedPublisherTask.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.services.rss;
+
+//TODO: enable support for running task on Windows (problems with ssh, scp, cvs)
+//TODO: enable support for connecting to Windows server? (`mkdir -p` not supported)
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be published - eg., /path/to/file.to.publish.xml
+ *
+ * cvsExec - path to the executable for cvs, eg., /usr/bin/cvs
+ * cvsRoot - cvs root used to commit the file - eg., username@cvsserver:/cvsroot/path
+ * cvsPath - cvs module to update - eg., project/news/ (into which builds.xml would go)
+ * cvsTemp - path to the temp folder to use for cvs checkout
+ *
+ * scpExec - path to the executable for scp, eg., /usr/bin/scp
+ * scpTarget - scp target path for publishing the file - eg., username@server:/path/to/target/file.xml
+ *
+ * Optionally, if the target folder might not exist, you can use ssh to create it before scp'ing
+ * sshExec - path to the executable for ssh, eg., /usr/bin/ssh
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedPublisherTask extends Task {
+
+ private int debug = 0;
+
+ private static final String CL = ":"; //$NON-NLS-1$
+ private static final String FS = File.separator;
+ private static final String SP = " "; //$NON-NLS-1$
+
+ // default values for optional fields
+ private static final String DEFAULT_CVSTemp = "/tmp/tmp-RSSFeedPublisherTask"; //$NON-NLS-1$
+ private static final String DEFAULT_CVSExec = "cvs"; //$NON-NLS-1$
+ private static final String DEFAULT_SCPExec = "scp"; //$NON-NLS-1$
+
+ private static final RSSFeedUtil util = new RSSFeedUtil();
+
+ //required fields
+ private File file;
+
+ // required if doing CVS
+ private String CVSExec;
+ private String CVSRoot;
+ private String CVSPath;
+ private String CVSTemp;
+
+ // required if doing SCP
+ private String SCPExec;
+ private String SCPTarget;
+
+ // required if doing SCP and target dir may not already exist
+ private String SSHExec;
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required
+ public void setFile(String file) {
+ if (!isNullString(file)) { this.file = new File(file); }
+ }
+
+ //required for CVS commit (with default)
+ public void setCVSExec(String CVSExec) {
+ if (!isNullString(CVSExec)) {
+ this.CVSExec = CVSExec;
+ } else {
+ this.CVSExec = DEFAULT_CVSExec;
+ }
+ }
+
+ //required for CVS commit
+ public void setCVSRoot(String CVSRoot) { this.CVSRoot = CVSRoot; }
+ public void setCVSPath(String CVSPath) { this.CVSPath = CVSPath; }
+
+ //required for CVS commit (with default)
+ public void setCVSTemp(String CVSTemp) {
+ if (!isNullString(CVSTemp)) {
+ this.CVSTemp = CVSTemp;
+ } else {
+ this.CVSTemp = DEFAULT_CVSTemp;
+ }
+ }
+
+ //required for CVS commit (with default)
+ public void setSCPExec(String SCPExec) {
+ if (!isNullString(SCPExec)) {
+ this.SCPExec = SCPExec;
+ } else {
+ this.SCPExec = DEFAULT_SCPExec;
+ }
+ }
+ public void setSCPTarget(String SCPTarget) { this.SCPTarget = SCPTarget; }
+
+ // required if doing SCP and target dir may not already exist (with default, not assigned)
+ public void setSSHExec(String SSHExec) {
+ this.SSHExec = SSHExec;
+ }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+
+ if (file==null || !file.exists() || !file.isFile()) {
+ System.err.println(Messages.getString("RSSFeedPublisherTask.ErrorInvalidFile") + CL + SP + file + "!"); //$NON-NLS-1$ //$NON-NLS-2$
+ } else {
+ if (debug>0) { System.out.println(Messages.getString("RSSFeedPublisherTask.Publish") + SP + file); } //$NON-NLS-1$
+ if ((!isNullString(CVSRoot) && !isNullString(CVSPath)) || !isNullString(SCPTarget)) {
+ if ((!isNullString(CVSRoot) && !isNullString(CVSPath))) {
+ commitFeedToCVS();
+ }
+ if (!isNullString(SCPTarget)) {
+ publishFeedWithSCP();
+ }
+ } else {
+ System.err.println(Messages.getString("RSSFeedPublisherTask.ErrorNothingToDo")); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private void commitFeedToCVS()
+ {
+ if (debug>1) {
+ System.out.println(Messages.getString("RSSFeedPublisherTask.UsingCVSRoot") + SP + CVSRoot); //$NON-NLS-1$
+ System.out.println(Messages.getString("RSSFeedPublisherTask.UsingCVSPath") + SP + CVSPath); //$NON-NLS-1$
+ }
+// <!-- 3. get filename (eg., builds.xml) from file (which could include a path, eg. ./data/news/builds.xml) -->
+// <pathconvert property="filename"><path path="${file}"/><mapper type="flatten"/></pathconvert>
+ String filename = file.getName();
+
+// <!-- 4. create target temp folder & check out existing version from CVS -->
+// <mkdir dir="${cvsTemp}"/>
+ File CVSTempDir = new File(CVSTemp);
+ if (CVSTempDir.isFile()) { // if dir exists as a file, we need a new tmp folder name
+ CVSTemp += ".tmp"; //$NON-NLS-1$
+ CVSTempDir = new File(CVSTemp);
+ }
+ if (CVSTempDir.isDirectory()) {
+ if (!CVSTempDir.delete()) {
+ System.err.println(Messages.getString("RSSFeedPublisherTask.ErrorCouldNotDeleteTempFolder") + SP + CVSTempDir); //$NON-NLS-1$
+ }
+ }
+ CVSTempDir.mkdir();
+ if (debug>1) {
+ System.out.println(Messages.getString("RSSFeedPublisherTask.UsingCVSTemp") + SP + CVSTempDir); //$NON-NLS-1$
+ }
+
+// <exec executable="${cvsExec}" dir="${cvsTemp}"><arg line="-d ${cvsRoot} co -d checkoutDir ${cvsPath}"/></exec>
+ runCVSExecTask("co -d checkoutDir" + SP + CVSPath, CVSTemp); //$NON-NLS-1$
+
+// <!-- 5. check if the file already exists in CVS to see if we need to add it -->
+// <available file="${cvsTemp}/checkoutDir/${filename}" type="file" property="fileInCVS"/>
+ File destFile = new File(CVSTemp + FS + "checkoutDir" + FS + filename); //$NON-NLS-1$
+ boolean fileInCVS = destFile.isFile();
+
+// <!-- 6. overwrite CVS copy with new version; or if new, copy file to destination for add then check-in -->
+// <copy file="../${file}" overwrite="true" todir="${cvsTemp}/checkoutDir"/>
+ try
+ {
+ RSSFeedUtil.transferData(new FileInputStream(file),new FileOutputStream(destFile));
+ }
+ catch (FileNotFoundException e)
+ {
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+
+// <!-- 7. add to CVS (if new) -->
+// <antcall target="addFileToCVS"/>
+// <!-- 7. Add file to CVS (if file is new) -->
+// <target name="addFileToCVS" depends="init" unless="fileInCVS" description="Add file to CVS (if file is new)">
+// <exec executable="${cvsExec}" dir="${cvsTemp}/checkoutDir"><arg line="-d ${cvsRoot} add ${filename}"/></exec>
+// </target>
+ if (!fileInCVS) {
+ runCVSExecTask("add " + filename, CVSTemp + FS + "checkoutDir"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+// <!-- 8. check in file -->
+// <exec executable="${cvsExec}" dir="${cvsTemp}/checkoutDir"><arg line="-d ${cvsRoot} ci -m '' ${filename}"/></exec>
+ runCVSExecTask("ci -m '' " + filename, CVSTemp + FS + "checkoutDir"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ private void publishFeedWithSCP()
+ {
+ if (debug>1) {
+ System.out.println(Messages.getString("RSSFeedPublisherTask.PublishToSCPTarget") + SP + SCPTarget); //$NON-NLS-1$
+ }
+
+// <exec executable="${sshExec}"><arg line="${sshMakeDirCommand}"/></exec>
+ if (!isNullString(SSHExec) && SCPTarget.indexOf(CL)>0) {
+ String userAtHost = SCPTarget.substring(0, SCPTarget.indexOf(CL));
+ String targetPath = SCPTarget.substring(SCPTarget.indexOf(CL)+1,SCPTarget.lastIndexOf(FS));
+ util.runExecTask(SSHExec, userAtHost + " \"mkdir -p" + SP + targetPath + "\"", null); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+// <exec executable="${scpExec}" dir="../"><arg line="${file} ${scpTarget}"/></exec>
+ util.runExecTask(SCPExec, file.toString() + SP + SCPTarget, null);
+ }
+
+ private void runCVSExecTask(String task, String dir)
+ {
+ util.runExecTask(CVSExec, "-d " + CVSRoot + " -q " + task, dir); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedWatcherTask.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedWatcherTask.java
new file mode 100644
index 0000000..085d46c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/services/rss/RSSFeedWatcherTask.java
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.services.rss;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.ExecTask;
+
+import org.eclipse.releng.generators.rss.RSSFeedUpdateEntryTask;
+import org.eclipse.releng.util.rss.Messages;
+import org.eclipse.releng.util.rss.RSSFeedUtil;
+
+/**
+ * Parameters:
+ * debug - more output to console - eg., 0|1|2
+ *
+ * file - path to the XML file that will be published - eg., /path/to/file.to.publish.xml
+ * feedURL - URL of the feed where it will be published - eg., http://servername/path/to/feed.xml
+ *
+ * feedWatchActions - semi-comma-separated list of triplets:
+ * (Xpath to watch for); (what to execute if condition is met); (commandline args to the executable)...
+ * eg., to watch for ANY change in the feed and respond by sending email
+ * /*[name() = 'feed']/*[name() = 'updated']/text(); sendEmailAlert.sh; null
+ * eg., to watch for ANY changes in the current build
+ * //*[name() = 'entry'][1]/*[name() = 'updated']/text(); sendEmailAlert.sh; null
+ * eg., to watch for changes in the current build's performance test results on linux-gtk
+ * //*[name() = 'entry'][1]/*[name() = 'summary']/*[@type = 'performance'][1]/*[name() = 'results'][@os = 'linux'][@ws = 'gtk']/text(); sendEmailAlert.sh; null
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedWatcherTask extends Task {
+
+ private int debug = 0;
+
+ private static final String CL = ":"; //$NON-NLS-1$
+ private static final String DOT = "."; //$NON-NLS-1$
+ private static final String NS = ""; //$NON-NLS-1$
+ private static final String SP = " "; //$NON-NLS-1$
+
+ private static final String splitter = "[;\t\r\n]+"; //$NON-NLS-1$
+
+ private static final String feedWatchActionError = "feedWatchAction.Error"; //$NON-NLS-1$
+ private static final String feedWatchActionOuput = "feedWatchAction.Output"; //$NON-NLS-1$
+ private static final String feedWatchActionResult = "feedWatchAction.Result"; //$NON-NLS-1$
+ private static final String feedWatchActionNewValue = "feedWatchAction.NewValue"; //$NON-NLS-1$
+ private static final String feedWatchActionOldValue = "feedWatchAction.OldValue"; //$NON-NLS-1$
+ private static final String feedWatchActionTheValue = "feedWatchAction.TheValue"; //$NON-NLS-1$
+
+ private static final RSSFeedUtil util = new RSSFeedUtil();
+
+ //required fields
+ private File file;
+ private File tmpFile;
+ private String feedURL;
+ private String[] feedWatchActions = new String[] {};
+
+ //optional
+ public void setDebug(int debug) { this.debug = debug; }
+
+ //required
+ public void setFile(String file) {
+ if (!isNullString(file)) {
+ this.file = new File(file);
+ this.tmpFile = new File(file + ".tmp"); //$NON-NLS-1$
+ }
+ }
+ public void setFeedURL(String feedURL) {
+ if (isNullString(feedURL))
+ { System.err.println(Messages.getString("RSSFeedCommon.FeedURLError")); } //$NON-NLS-1$
+ else
+ { this.feedURL = feedURL; }
+ }
+ public void setFeedWatchActions(String feedWatchActions) {
+ int missingActions = 0;
+ if (!isNullString(feedWatchActions)) {
+ this.feedWatchActions = feedWatchActions.split(splitter);
+ missingActions = this.feedWatchActions.length % 3; if (missingActions > 0) { missingActions = 3 - missingActions; }
+ }
+ if (missingActions > 0) {
+ for (int i = 0; i < missingActions; i++)
+ {
+ System.out.println((i==0 && missingActions==2 ? Messages.getString("RSSFeedWatcherTask.WarningNoScriptAction") : Messages.getString("RSSFeedWatcherTask.WarningNoCommandlineParams")) + SP + feedWatchActions ); //$NON-NLS-1$ //$NON-NLS-2$
+ feedWatchActions += "; null"; //$NON-NLS-1$
+ }
+ this.feedWatchActions = feedWatchActions.split(splitter);
+ }
+ }
+
+ // The method executing the task
+ public void execute() throws BuildException {
+ if (debug>0) { util.setDebug(debug); }
+ if (file==null || !file.exists() || !file.isFile()) {
+ // if there's no local copy of the feed, get a copy, then exit with instructions
+ downloadFeed(file,debug>=0);
+ System.out.println(Messages.getString("RSSFeedWatcherTask.PleaseRunThisTaskLater") + SP + file); //$NON-NLS-1$
+ System.out.println(Messages.getString("RSSFeedWatcherTask.ToTheLatestVersion") + SP + feedURL); //$NON-NLS-1$
+ } else {
+ if (feedWatchActions==null || feedWatchActions.length<1) {
+ System.err.println(Messages.getString("RSSFeedWatcherTask.ErrorNoWatchActions")); //$NON-NLS-1$
+ } else {
+ checkFeed();
+ }
+ }
+ }
+
+ private void checkFeed() {
+ if (file.isDirectory()) {
+ System.err.println(Messages.getString("RSSFeedWatcherTask.ErrorDestinationFileIsADirectory")); //$NON-NLS-1$
+ } else {
+ downloadFeed(tmpFile,debug>0);
+ }
+
+ if (tmpFile.isFile()) {
+ if (debug>0) { System.out.println(Messages.getString("RSSFeedWatcherTask.Compare") + SP + file + Messages.getString("RSSFeedWatcherTask.with") + tmpFile + CL); } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+ RSSFeedUpdateEntryTask oldFeedWatcher = null;
+ RSSFeedUpdateEntryTask newFeedWatcher = null;
+ int j=0;
+
+ for (int i = 0; i < feedWatchActions.length; i+=3)
+ {
+ String xpath = feedWatchActions[i].trim();
+ String action = feedWatchActions[i+1].trim();
+ String commandline = feedWatchActions[i+2].trim();
+
+ oldFeedWatcher = new RSSFeedUpdateEntryTask();
+ oldFeedWatcher.setFile(file.toString());
+ if (debug>0) { oldFeedWatcher.setDebug(debug); }
+ oldFeedWatcher.setXpath(xpath);
+ oldFeedWatcher.execute();
+
+ if (oldFeedWatcher.getFoundNode() != null) {
+ newFeedWatcher = new RSSFeedUpdateEntryTask();
+ newFeedWatcher.setFile(tmpFile.toString());
+ if (debug>0) { newFeedWatcher.setDebug(debug); }
+ newFeedWatcher.setXpath(xpath);
+ newFeedWatcher.execute();
+
+ String oldContent = oldFeedWatcher.getFoundNode().getTextContent();
+ String newContent = newFeedWatcher.getFoundNode().getTextContent();
+
+ if (debug>1) {
+ System.out.println(Messages.getString("RSSFeedWatcherTask.GotOldNodeContents") + CL + SP + oldContent); //$NON-NLS-1$
+ System.out.println(Messages.getString("RSSFeedWatcherTask.GotNewNodeContents") + CL + SP + newContent); //$NON-NLS-1$
+ }
+
+ if (!"null".equals(action)) { //$NON-NLS-1$
+ commandline =
+ (debug>0?"-debug " + debug + SP:NS) + ("null".equals(commandline)?NS:commandline) + //$NON-NLS-1$ //$NON-NLS-2$
+ " -feedURL " + feedURL + //$NON-NLS-1$
+ " -xpath \"" + xpath + "\"" + //$NON-NLS-1$ //$NON-NLS-2$
+ " -oldvalue \"" + oldContent + "\"" + //$NON-NLS-1$ //$NON-NLS-2$
+ " -newvalue \"" + newContent + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ // store actual value - either the changed value or the original value (if unchanged)
+ this.getProject().setProperty(feedWatchActionTheValue + DOT + j,!isNullString(newContent)?newContent:oldContent);
+
+ if (newFeedWatcher.getFoundNode() == null || // changed from exists to not exists, or
+ !oldContent.equals(newContent) // node has changed
+ ) {
+ // collect property from newNode and pass it to THIS task so that the local ant script can see it
+ if (!isNullString(oldContent)) { this.getProject().setProperty(feedWatchActionOldValue + DOT + j,oldContent); }
+ if (!isNullString(newContent)) { this.getProject().setProperty(feedWatchActionNewValue + DOT + j,newContent); }
+
+ if (!"null".equals(action)) { //$NON-NLS-1$
+ System.out.println(Messages.getString("RSSFeedWatcherTask.RunExecTask") + CL + SP + action + SP + commandline); //$NON-NLS-1$
+ ExecTask exec = util.runExecTask((new File(action)).getAbsolutePath(), commandline, null);
+
+ // collect properties from exec task and pass them to THIS task so that the local ant script can see them
+ String out = null;
+
+ out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_ERROR);
+ if (!isNullString(out)) { this.getProject().setProperty(feedWatchActionError + DOT + j, out); }
+
+ out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_RESULT);
+ if (!isNullString(out)) { this.getProject().setProperty(feedWatchActionOuput + DOT + j, out); }
+
+ out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_RESULT);
+ if (!RSSFeedUtil.EXPECTED_RESULT.equals(out)) { this.getProject().setProperty(feedWatchActionResult + DOT + j, out); }
+ }
+ } else {
+ System.out.println(Messages.getString("RSSFeedWatcherTask.NodeUnchanged")); //$NON-NLS-1$
+ }
+ } else {
+ System.out.println(Messages.getString("RSSFeedWatcherTask.NodeNotFound")); //$NON-NLS-1$
+ }
+ j++;
+ }
+
+ try
+ {
+ RSSFeedUtil.transferData(new FileInputStream(tmpFile), new FileOutputStream(file));
+ tmpFile.deleteOnExit();
+ }
+ catch (FileNotFoundException e)
+ {
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void downloadFeed(File destFile, boolean verbose)
+ {
+ try
+ {
+ if (verbose) {
+ System.out.println(Messages.getString("RSSFeedWatcherTask.Download") + CL + SP + feedURL); //$NON-NLS-1$
+ System.out.println(Messages.getString("RSSFeedWatcherTask.To") + CL + SP + destFile + SP); //$NON-NLS-1$
+ }
+ RSSFeedUtil.transferData((new URL(feedURL)).openStream(), new FileOutputStream(destFile));
+ if (verbose) {
+ System.out.println(Messages.getString("RSSFeedWatcherTask.Done")); //$NON-NLS-1$
+ System.out.println(SP);
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ e.printStackTrace();
+ }
+ catch (FileNotFoundException e)
+ {
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ private static boolean isNullString(String str)
+ {
+ return RSSFeedUtil.isNullString(str);
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/Messages.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/Messages.java
new file mode 100644
index 0000000..81e63a4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/Messages.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: Messages.java,v 1.2 2006/09/19 15:53:51 kmoir Exp $
+ * /
+ *******************************************************************************/
+package org.eclipse.releng.util.rss;
+
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.eclipse.releng.util.rss.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/RSSFeedUtil.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/RSSFeedUtil.java
new file mode 100644
index 0000000..f933f76
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/RSSFeedUtil.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.releng.util.rss;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.ExecTask;
+import org.apache.tools.ant.types.Commandline.Argument;
+
+/**
+ *
+ * Helper methods
+ *
+ * @author nickb
+ *
+ */
+public class RSSFeedUtil {
+
+ private static final String SP = " "; //$NON-NLS-1$
+ private static final String CL = ":"; //$NON-NLS-1$
+ public static final String EXPECTED_RESULT = "0"; //$NON-NLS-1$
+
+ public static final String RUN_EXEC_TASK_ERROR = "runExecTask.Error"; //$NON-NLS-1$
+ public static final String RUN_EXEC_TASK_OUTPUT = "runExecTask.Output"; //$NON-NLS-1$
+ public static final String RUN_EXEC_TASK_RESULT = "runExecTask.Result"; //$NON-NLS-1$
+
+ private int debug = 0;
+
+ /**
+ * A buffer.
+ */
+ private static byte[] buffer = new byte [8192];
+
+ public ExecTask runExecTask(String executable, String commandline, String dir)
+ {
+ if (dir==null) {
+ dir = "."; //$NON-NLS-1$
+ }
+
+ ExecTask exec = new ExecTask();
+ exec.setExecutable(executable);
+ exec.setResolveExecutable(true);
+ exec.setDir((new File(dir)).getAbsoluteFile());
+ Project project = new Project(); project.setName(executable);
+ exec.setProject(project);
+ exec.setFailIfExecutionFails(true);
+ exec.setFailonerror(true);
+ exec.setErrorProperty(RUN_EXEC_TASK_ERROR);
+ exec.setOutputproperty(RUN_EXEC_TASK_OUTPUT);
+ exec.setResultProperty(RUN_EXEC_TASK_RESULT);
+ exec.setLogError(true);
+
+ if (commandline != null || "".equals(commandline)) { //$NON-NLS-1$
+ Argument execArg = exec.createArg();
+ execArg.setLine(commandline);
+ }
+ try
+ {
+ if (debug>0) {
+ System.out.println(Messages.getString("RSSFeedPublisherTask.Execute") + SP + executable + (commandline==null?"":SP + commandline)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ exec.execute();
+ handleExecTaskReturn(project);
+ }
+ catch (Exception e)
+ {
+ handleExecTaskReturn(project);
+ System.err.println(Messages.getString("RSSFeedPublisherTask.ForProject") + SP + project.getName() + CL); //$NON-NLS-1$
+ e.printStackTrace();
+ }
+
+ return exec;
+
+ }
+
+ private void handleExecTaskReturn(Project project)
+ {
+ String out = null;
+
+ out = project.getProperty(RUN_EXEC_TASK_RESULT);
+ if (debug>1) {
+ if (!isNullString(out) && !EXPECTED_RESULT.equals(out)) {
+ System.err.println(Messages.getString("RSSFeedPublisherTask.Result") + SP + out); //$NON-NLS-1$
+ }
+ }
+
+ out = project.getProperty(RUN_EXEC_TASK_OUTPUT);
+ if (!isNullString(out)) {
+ System.out.println(out);
+ }
+
+ out = project.getProperty(RUN_EXEC_TASK_ERROR);
+ if (!isNullString(out)) {
+ if (debug>1 && out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
+ System.out.println(out);
+ } else if (!out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
+ System.err.println(Messages.getString("RSSFeedPublisherTask.Error") + SP + out); //$NON-NLS-1$
+ }
+ }
+ }
+
+ /**
+ * Copies all bytes in the given source stream to the given destination
+ * stream. Neither streams are closed.
+ *
+ * From: org.eclipse.emf/tests/org.eclipse.emf.test.build/src/org/eclipse/emf/test/build/FileTool.java,v 1.2
+ *
+ * @param source
+ * the given source stream
+ * @param destination
+ * the given destination stream
+ */
+ public static void transferData(InputStream source, OutputStream destination) throws IOException
+ {
+ int bytesRead = 0;
+ while (bytesRead != -1)
+ {
+ bytesRead = source.read(buffer, 0, buffer.length);
+ if (bytesRead != -1)
+ {
+ destination.write(buffer, 0, bytesRead);
+ }
+ }
+ }
+
+ public static boolean isNullString(String str)
+ {
+ return str==null||"".equals(str); //$NON-NLS-1$
+ }
+
+ public void setDebug(int debug)
+ {
+ this.debug = debug;
+ }
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/messages.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/messages.properties
new file mode 100644
index 0000000..7a57db3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools/src_rss/org/eclipse/releng/util/rss/messages.properties
@@ -0,0 +1,80 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+RSSFeedCommon.FileError=Error: no output file specified for feed, eg., ./feed.xml\!
+RSSFeedWatcherTask.with=\ with
+RSSFeedWatcherTask.To=To
+RSSFeedWatcherTask.Done=Done.
+RSSFeedCommon.ProjectError=Error: no project name specified, eg., EMF or WTP\!
+RSSFeedCommon.FeedURLError=Error: no feedURL specified, eg., http://server/path/to/feed.xml\!
+RSSFeedCommon.RSSFeedFile=RSS Feed file
+RSSFeedCommon.ToBePublishedAt=to be published at:
+RSSFeedCommon.Set=Set
+RSSFeedCommon.XpathError=Error: no xpath string to search for, eg., /*/*[name() = 'entry'][1]/*[name() = 'updated']/text()
+
+RSSFeedCreateFeedTask.Creating=Creating
+RSSFeedCreateFeedTask.Builds=Builds
+RSSFeedCreateFeedTask.BuildTeam=Build Team
+RSSFeedCreateFeedTask.UnableToWriteToFile=Unable to write to file
+
+RSSFeedAddEntryTask.BranchError=Warning: no branch specified, eg., 3.2.0\!
+RSSFeedAddEntryTask.BuildIDError=Warning: no buildID specified, eg., S200506071234\!
+RSSFeedAddEntryTask.BuildURLError=Warning: no buildURL specified, eg., http://server/path/to/project/downloads/drops/branch/buildID/\!
+RSSFeedAddEntryTask.AddingEntryTo=Adding entry to
+
+RSSFeedAddEntryTask.DoesNotExist=does not exist. Creating ...
+RSSFeedAddEntryTask.AnnouncePrefix=[announce]
+RSSFeedAddEntryTask.IsAvailable=is available
+RSSFeedAddEntryTask.InProperty=in property
+RSSFeedAddEntryTask.AttachNew=Attach new
+RSSFeedAddEntryTask.BranchKeyword=%%branch%%
+RSSFeedAddEntryTask.BuildIDKeyword=%%buildID%%
+RSSFeedAddEntryTask.BuildAliasKeyword=%%buildAlias%%
+RSSFeedAddEntryTask.WrongNumberOfVariables=Wrong number of variables
+RSSFeedAddEntryTask.MustBeMultipleOf5=(must be multiple of 5)
+RSSFeedAddEntryTask.MustBeMultipleOf4=(must be multiple of 4)
+
+RSSFeedUpdateEntryTask.SearchingFor=Searching for
+RSSFeedUpdateEntryTask.ReplacingWith=replacing with
+RSSFeedUpdateEntryTask.DoesNotExist=does not exist. Nothing to do\!
+RSSFeedUpdateEntryTask.DebugFoundAttribute=Found Attribute:
+RSSFeedUpdateEntryTask.DebugFoundElement=Found Element:
+RSSFeedUpdateEntryTask.DebugFoundText=Found Text:
+RSSFeedUpdateEntryTask.XpathNodeNotFound=Xpath Node Not Found\!
+RSSFeedUpdateEntryTask.DebugGotATNode=Got A/T Node:
+RSSFeedUpdateEntryTask.DebugGotENode=Got E Node:
+
+RSSFeedPublisherTask.ErrorInvalidFile=Error: invalid feed file specified
+RSSFeedPublisherTask.Error=Error:
+RSSFeedPublisherTask.Publish=Publish
+RSSFeedPublisherTask.Execute=Execute:
+RSSFeedPublisherTask.Result=Result:
+RSSFeedPublisherTask.ForProject=For project
+RSSFeedPublisherTask.UsingCVSRoot=Using CVS Root:
+RSSFeedPublisherTask.UsingCVSPath=Using CVS Path:
+RSSFeedPublisherTask.UsingCVSTemp=Using CVS Temp:
+RSSFeedPublisherTask.PublishToSCPTarget=Publish to SCP Target:
+RSSFeedPublisherTask.ErrorNothingToDo=Error\! Must specify SCP and/or CVS options to publish a feed file. Nothing to do\!
+RSSFeedPublisherTask.ErrorCouldNotDeleteTempFolder=Error: could not delete temp folder
+RSSFeedPublisherTask.CVSWarning=cvs add: use `cvs commit' to add this file permanently
+
+RSSFeedWatcherTask.ErrorNoWatchActions=Error\! Must specify for which feed changes to watch and what actions as response. Nothing to do\!
+RSSFeedWatcherTask.PleaseRunThisTaskLater=Please run this task at some later date to compare reference copy in
+RSSFeedWatcherTask.WarningNoScriptAction=Warning: Assuming no script action for
+RSSFeedWatcherTask.WarningNoCommandlineParams=Warning: Assuming no commandline params for
+RSSFeedWatcherTask.ToTheLatestVersion=to latest version of feed in
+RSSFeedWatcherTask.ErrorDestinationFileIsADirectory=Error\! Destination file exists as a directory\! Cannot proceed.
+RSSFeedWatcherTask.Compare=Compare
+RSSFeedWatcherTask.GotOldNodeContents=Got old node contents
+RSSFeedWatcherTask.GotNewNodeContents=Got new node contents
+RSSFeedWatcherTask.RunExecTask=Run Exec Task
+RSSFeedWatcherTask.NodeUnchanged=Node unchanged. Nothing to do\!
+RSSFeedWatcherTask.NodeNotFound=Node not found. Nothing to do\!
+RSSFeedWatcherTask.Download=Download
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
new file mode 100644
index 0000000..a325731
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar
new file mode 100644
index 0000000..b03a451
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.observable_1.3.0.I20100601-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.observable_1.3.0.I20100601-0800.jar
new file mode 100644
index 0000000..cc8db95
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.observable_1.3.0.I20100601-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.property_1.3.0.I20100601-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.property_1.3.0.I20100601-0800.jar
new file mode 100644
index 0000000..c370065
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding.property_1.3.0.I20100601-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding_1.3.100.I20100601-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding_1.3.100.I20100601-0800.jar
new file mode 100644
index 0000000..449f6ff
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.databinding_1.3.100.I20100601-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar
new file mode 100644
index 0000000..0afb4ee
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filebuffers_3.5.100.v20100520-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filebuffers_3.5.100.v20100520-0800.jar
new file mode 100644
index 0000000..0542d38
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filebuffers_3.5.100.v20100520-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem.win32.x86_1.1.201.R36x_v20100727-0745.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem.win32.x86_1.1.201.R36x_v20100727-0745.jar
new file mode 100644
index 0000000..3b13b4a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem.win32.x86_1.1.201.R36x_v20100727-0745.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem_1.3.1.R36x_v20100727-0745.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem_1.3.1.R36x_v20100727-0745.jar
new file mode 100644
index 0000000..74fd886
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.filesystem_1.3.1.R36x_v20100727-0745.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.jobs_3.5.1.R36x_v20100824.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.jobs_3.5.1.R36x_v20100824.jar
new file mode 100644
index 0000000..b02ce58
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.jobs_3.5.1.R36x_v20100824.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources.compatibility_3.4.0.v20090505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources.compatibility_3.4.0.v20090505.jar
new file mode 100644
index 0000000..b766260
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources.compatibility_3.4.0.v20090505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources_3.6.1.R36x_v20101007-1215.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources_3.6.1.R36x_v20101007-1215.jar
new file mode 100644
index 0000000..cabb0e0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.resources_3.6.1.R36x_v20101007-1215.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517.jar
new file mode 100644
index 0000000..d8fb24d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar
new file mode 100644
index 0000000..1a828cf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar
new file mode 100644
index 0000000..f91eeac
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.variables_3.2.400.v20100505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.variables_3.2.400.v20100505.jar
new file mode 100644
index 0000000..605af61
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.core.variables_3.2.400.v20100505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.debug.core_3.6.0.v20100519.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.debug.core_3.6.0.v20100519.jar
new file mode 100644
index 0000000..d976075
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.debug.core_3.6.0.v20100519.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100529-0735.jar
new file mode 100644
index 0000000..760a289
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.identity_3.1.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.identity_3.1.0.v20100529-0735.jar
new file mode 100644
index 0000000..0f8118e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.identity_3.1.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100529-0735.jar
new file mode 100644
index 0000000..da53010
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100529-0735.jar
new file mode 100644
index 0000000..829ccd0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100529-0735.jar
new file mode 100644
index 0000000..eaf351b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100529-0735.jar
new file mode 100644
index 0000000..af49204
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.ssl_1.0.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.ssl_1.0.0.v20100529-0735.jar
new file mode 100644
index 0000000..92792c1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf.ssl_1.0.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf_3.1.0.v20100529-0735.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf_3.1.0.v20100529-0735.jar
new file mode 100644
index 0000000..d53c0c8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ecf_3.1.0.v20100529-0735.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.app_1.3.1.R36x_v20100803.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.app_1.3.1.R36x_v20100803.jar
new file mode 100644
index 0000000..e56e389
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.app_1.3.1.R36x_v20100803.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar
new file mode 100644
index 0000000..b9800a7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.ds_1.2.1.R36x_v20100803.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.ds_1.2.1.R36x_v20100803.jar
new file mode 100644
index 0000000..64f33e8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.ds_1.2.1.R36x_v20100803.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.event_1.2.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.event_1.2.0.v20100503.jar
new file mode 100644
index 0000000..5706138
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.event_1.2.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin.equinox_1.0.200.v20100505.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin.equinox_1.0.200.v20100505.jar
new file mode 100644
index 0000000..e6ac15c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin.equinox_1.0.200.v20100505.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin_2.0.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin_2.0.0.v20100503.jar
new file mode 100644
index 0000000..44e8176
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.frameworkadmin_2.0.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..f0ede9f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..2fa09c9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF
@@ -0,0 +1,17 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: 779C3LsKypDoSCq0P4fbW5wVoRs=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: qStArqJXVDAOVN5liNMVpMRD5Yg=
+
+Name: eclipse_1310.so
+SHA1-Digest: /psLRw39aO8xiex9vUALLaYziH4=
+
+Name: launcher.gtk.linux.x86.properties
+SHA1-Digest: ibm+rFtHFunrBG0irLpHIMN5SoM=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: SAqY+5ITAL0mkdYeijlSRhyIaZk=
+
+Name: about.html
+SHA1-Digest: xGcp/Hbq/ywyvVWkPzD/2vkIzdY=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5dfcf84
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x8
+ 6))
+Bundle-Vendor: %providerName
+Bundle-Localization: launcher.gtk.linux.x86
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2
+ .0)"
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86;single
+ ton:=true
+Eclipse-BundleShape: dir
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/rt:
+ org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fr
+ agments/org.eclipse.equinox.launcher.gtk.linux.x86;tag=R36x_v20101019
+ _1345
+Bundle-Version: 1.1.2.R36x_v20101019_1345
+Bundle-ManifestVersion: 2
+
+Name: eclipse_1310.so
+SHA1-Digest: 3GPYOcL5J9KIoe6BCIaX7kfKwts=
+
+Name: launcher.gtk.linux.x86.properties
+SHA1-Digest: L5vFw0VOUbUqEprhNttZPNKwx+Q=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: about.html
+SHA1-Digest: a9lDHrGuLPkvHBUhsqWU+V2mhPw=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf
new file mode 100644
index 0000000..7864d3c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf
@@ -0,0 +1,3 @@
+#Processed using Jarprocessor
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/about.html
new file mode 100644
index 0000000..395df3b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).
+Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor&rsquo;s license
+that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.so b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.so
new file mode 100644
index 0000000..8efc8af
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.so
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/launcher.gtk.linux.x86.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/launcher.gtk.linux.x86.properties
new file mode 100644
index 0000000..120c5fb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.2.R36x_v20101019_1345/launcher.gtk.linux.x86.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher Linux X86 Fragment
+providerName = Eclipse.org - Equinox
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar
new file mode 100644
index 0000000..a929cf3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..7789946
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..5ddc631
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/ECLIPSEF.SF
@@ -0,0 +1,17 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: 10DU/noKw+jvtIxUNe6iPOzpdEQ=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: azp+OL2gzBjx8JTEqMuJLAJkcdE=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: SAqY+5ITAL0mkdYeijlSRhyIaZk=
+
+Name: about.html
+SHA1-Digest: xGcp/Hbq/ywyvVWkPzD/2vkIzdY=
+
+Name: eclipse_1310.dll
+SHA1-Digest: /9LRtiqBVi4PYC0XAHVL/5eU6AM=
+
+Name: launcher.win32.win32.x86.properties
+SHA1-Digest: dyqeAecYCwH56Q9HALT/M58du8o=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2643003
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=
+ x86))
+Bundle-Vendor: %providerName
+Bundle-Localization: launcher.win32.win32.x86
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2
+ .0)"
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86; sin
+ gleton:=true
+Eclipse-BundleShape: dir
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/rt:
+ org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fr
+ agments/org.eclipse.equinox.launcher.win32.win32.x86;tag=R36x_v201010
+ 19_1345
+Bundle-Version: 1.1.2.R36x_v20101019_1345
+Bundle-ManifestVersion: 2
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: about.html
+SHA1-Digest: a9lDHrGuLPkvHBUhsqWU+V2mhPw=
+
+Name: launcher.win32.win32.x86.properties
+SHA1-Digest: 9YS+Q0m7uH9sORMehRSXfxre7Yk=
+
+Name: eclipse_1310.dll
+SHA1-Digest: qBxnnVatMTDi8iWCVSj/rP4cLG4=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf
new file mode 100644
index 0000000..7864d3c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/META-INF/eclipse.inf
@@ -0,0 +1,3 @@
+#Processed using Jarprocessor
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/about.html
new file mode 100644
index 0000000..395df3b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).
+Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor&rsquo;s license
+that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.dll b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.dll
new file mode 100644
index 0000000..1d90e12
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/eclipse_1310.dll
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/launcher.win32.win32.x86.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/launcher.win32.win32.x86.properties
new file mode 100644
index 0000000..c5ca613
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101019_1345/launcher.win32.win32.x86.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher Win32 X86 Fragment
+providerName = Eclipse.org - Equinox
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
new file mode 100644
index 0000000..a929cf3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.artifact.repository_1.1.1.R36x_v20100901.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.artifact.repository_1.1.1.R36x_v20100901.jar
new file mode 100644
index 0000000..d6af7af
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.artifact.repository_1.1.1.R36x_v20100901.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.console_1.0.200.v20100601.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.console_1.0.200.v20100601.jar
new file mode 100644
index 0000000..88ccbc9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.console_1.0.200.v20100601.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.core_2.0.2.R36x_v20100804.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.core_2.0.2.R36x_v20100804.jar
new file mode 100644
index 0000000..35ff5c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.core_2.0.2.R36x_v20100804.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director.app_1.0.201.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director.app_1.0.201.R36x_v20100823.jar
new file mode 100644
index 0000000..762f9f5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director.app_1.0.201.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director_2.0.3.R36x_v20101117-1018.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director_2.0.3.R36x_v20101117-1018.jar
new file mode 100644
index 0000000..2fdcbc9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.director_2.0.3.R36x_v20101117-1018.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.directorywatcher_1.0.203.R36x_v20101027.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.directorywatcher_1.0.203.R36x_v20101027.jar
new file mode 100644
index 0000000..6b7c7df
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.directorywatcher_1.0.203.R36x_v20101027.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.engine_2.0.0.v20100606.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.engine_2.0.0.v20100606.jar
new file mode 100644
index 0000000..3dec7e5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.engine_2.0.0.v20100606.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.extensionlocation_1.2.0.v20100518.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.extensionlocation_1.2.0.v20100518.jar
new file mode 100644
index 0000000..6755a01
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.extensionlocation_1.2.0.v20100518.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.garbagecollector_1.0.100.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.garbagecollector_1.0.100.v20100503.jar
new file mode 100644
index 0000000..8288d4c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.garbagecollector_1.0.100.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20100503a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20100503a.jar
new file mode 100644
index 0000000..5149366
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20100503a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.generator_1.0.200.v20100503a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.generator_1.0.200.v20100503a.jar
new file mode 100644
index 0000000..4dfdc30
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.generator_1.0.200.v20100503a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.repository_1.1.0.v20100513.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.repository_1.1.0.v20100513.jar
new file mode 100644
index 0000000..20d6729
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata.repository_1.1.0.v20100513.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata_2.0.0.v20100601.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata_2.0.0.v20100601.jar
new file mode 100644
index 0000000..6a03fe1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.metadata_2.0.0.v20100601.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.operations_2.0.0.v20100510.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.operations_2.0.0.v20100510.jar
new file mode 100644
index 0000000..1204caf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.operations_2.0.0.v20100510.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.publisher_1.1.2.v20100824-2220.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.publisher_1.1.2.v20100824-2220.jar
new file mode 100644
index 0000000..7d82f73
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.publisher_1.1.2.v20100824-2220.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ql_2.0.0.v20100503a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ql_2.0.0.v20100503a.jar
new file mode 100644
index 0000000..a2f8aad
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ql_2.0.0.v20100503a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.reconciler.dropins_1.1.2.R36x_v20101111-1430.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.reconciler.dropins_1.1.2.R36x_v20101111-1430.jar
new file mode 100644
index 0000000..087294d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.reconciler.dropins_1.1.2.R36x_v20101111-1430.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository.tools_2.0.1.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository.tools_2.0.1.R36x_v20100823.jar
new file mode 100644
index 0000000..f9ba516
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository.tools_2.0.1.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository_2.0.1.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository_2.0.1.R36x_v20100823.jar
new file mode 100644
index 0000000..525f331
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.repository_2.0.1.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.eclipse_2.0.2.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.eclipse_2.0.2.R36x_v20100823.jar
new file mode 100644
index 0000000..135dab3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.eclipse_2.0.2.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.natives_1.0.200.v20100503a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.natives_1.0.200.v20100503a.jar
new file mode 100644
index 0000000..80d0490
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.touchpoint.natives_1.0.200.v20100503a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler_1.0.0.v20100507-1815.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler_1.0.0.v20100507-1815.jar
new file mode 100644
index 0000000..da3d5aa
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler_1.0.0.v20100507-1815.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk_1.0.100.v20100513.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk_1.0.100.v20100513.jar
new file mode 100644
index 0000000..a0b94c1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.ui.sdk_1.0.100.v20100513.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatechecker_1.1.101.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatechecker_1.1.101.R36x_v20100823.jar
new file mode 100644
index 0000000..1b186dc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatechecker_1.1.101.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatesite_1.0.201.R36x_v20100823.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatesite_1.0.201.R36x_v20100823.jar
new file mode 100644
index 0000000..0cee620
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.p2.updatesite_1.0.201.R36x_v20100823.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar
new file mode 100644
index 0000000..b902bcb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar
new file mode 100644
index 0000000..935717b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.security_1.0.200.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.security_1.0.200.v20100503.jar
new file mode 100644
index 0000000..35e6bd5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.security_1.0.200.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20100503.jar
new file mode 100644
index 0000000..9bb1253
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar
new file mode 100644
index 0000000..fbc8591
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.util_1.0.200.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.util_1.0.200.v20100503.jar
new file mode 100644
index 0000000..4297f84
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.equinox.util_1.0.200.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.appserver_3.1.400.v20100427.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.appserver_3.1.400.v20100427.jar
new file mode 100644
index 0000000..d72bc0e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.appserver_3.1.400.v20100427.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.base_3.5.2.v201011171123.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.base_3.5.2.v201011171123.jar
new file mode 100644
index 0000000..8099211
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help.base_3.5.2.v201011171123.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help_3.5.0.v20100524.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help_3.5.0.v20100524.jar
new file mode 100644
index 0000000..4a288eb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.help_3.5.0.v20100524.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.apt.core_3.3.401.R36_v20100727-0110.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.apt.core_3.3.401.R36_v20100727-0110.jar
new file mode 100644
index 0000000..823837a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.apt.core_3.3.401.R36_v20100727-0110.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core.contrib.converter_1.1.2.200703120901.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core.contrib.converter_1.1.2.200703120901.jar
new file mode 100644
index 0000000..38ff2e2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core.contrib.converter_1.1.2.200703120901.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core_3.6.2.v_A76_R36x.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core_3.6.2.v_A76_R36x.jar
new file mode 100644
index 0000000..1e4f4ca
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.core_3.6.2.v_A76_R36x.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/.api_description b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/.api_description
new file mode 100644
index 0000000..fcb2e7e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/.api_description
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component name="org.eclipse.jdt.debug_3.6.1.v20100715_r361" version="1.2">
+ <plugin id="org.eclipse.jdt.debug_3.6.1.v20100715_r361"/>
+ <package name="org.eclipse.jdt.debug.core" visibility="1">
+ <type name="IJavaArray" restrictions="3"/>
+ <type name="IJavaArrayType" restrictions="3"/>
+ <type name="IJavaBreakpoint" restrictions="3"/>
+ <type name="IJavaClassObject" restrictions="3"/>
+ <type name="IJavaClassPrepareBreakpoint" restrictions="3"/>
+ <type name="IJavaClassType" restrictions="3"/>
+ <type name="IJavaDebugTarget" restrictions="3"/>
+ <type name="IJavaExceptionBreakpoint" restrictions="3"/>
+ <type name="IJavaFieldVariable" restrictions="3"/>
+ <type name="IJavaInterfaceType" restrictions="3"/>
+ <type name="IJavaLineBreakpoint" restrictions="3"/>
+ <type name="IJavaMethodBreakpoint" restrictions="3"/>
+ <type name="IJavaMethodEntryBreakpoint" restrictions="3"/>
+ <type name="IJavaModifiers" restrictions="3"/>
+ <type name="IJavaObject" restrictions="3"/>
+ <type name="IJavaPatternBreakpoint" restrictions="3"/>
+ <type name="IJavaPrimitiveValue" restrictions="3"/>
+ <type name="IJavaReferenceType" restrictions="3"/>
+ <type name="IJavaStackFrame" restrictions="3"/>
+ <type name="IJavaStratumLineBreakpoint" restrictions="3"/>
+ <type name="IJavaTargetPatternBreakpoint" restrictions="3"/>
+ <type name="IJavaThread" restrictions="3"/>
+ <type name="IJavaThreadGroup" restrictions="3"/>
+ <type name="IJavaType" restrictions="3"/>
+ <type name="IJavaValue" restrictions="3"/>
+ <type name="IJavaVariable" restrictions="3"/>
+ <type name="IJavaWatchpoint" restrictions="3"/>
+ <type name="JDIDebugModel" restrictions="6"/>
+ </package>
+ <package name="org.eclipse.jdt.debug.eval" visibility="1">
+ <type name="EvaluationManager" restrictions="6"/>
+ <type name="IAstEvaluationEngine" restrictions="3"/>
+ <type name="IClassFileEvaluationEngine" restrictions="3"/>
+ <type name="ICompiledExpression" restrictions="3"/>
+ <type name="IEvaluationEngine" restrictions="3"/>
+ <type name="IEvaluationResult" restrictions="3"/>
+ </package>
+</component>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..249f9f4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..5810150
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/ECLIPSEF.SF
@@ -0,0 +1,26 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: +n3K7/zFeRBhKAAETXGs1AvrHqc=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: Jum9nUWLJAVEp3Aak9kK4XJMVFc=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: SAqY+5ITAL0mkdYeijlSRhyIaZk=
+
+Name: jdimodel.jar
+SHA1-Digest: n0bg63DfUyaKFuYXJXHnBjzC/pI=
+
+Name: .api_description
+SHA1-Digest: ieYx04UEu2rjt7Sea4P0U+MVeCA=
+
+Name: plugin.xml
+SHA1-Digest: 38GG9hT3IANr4BbPOzIbWuSj09k=
+
+Name: about.html
+SHA1-Digest: M+fykt9heyWoEv1LNiIEeBhi/2Q=
+
+Name: jdi.jar
+SHA1-Digest: EG89J1xFw1doRsY6rE/D+ymGyy8=
+
+Name: plugin.properties
+SHA1-Digest: Py6O6Cx7hvulZf419gAGNBnMRds=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..dd7cf64
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/MANIFEST.MF
@@ -0,0 +1,60 @@
+Manifest-Version: 1.0
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/ecl
+ ipse:org.eclipse.jdt.debug;tag=v20100715_r361
+Bundle-Activator: org.eclipse.jdt.internal.debug.core.JDIDebugPlugin
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.5.0,4.0.
+ 0)",org.eclipse.debug.core;bundle-version="[3.5.0,4.0.0)",org.eclipse
+ .jdt.core;bundle-version="[3.5.0,4.0.0)",org.eclipse.core.runtime;bun
+ dle-version="[3.5.0,4.0.0)",org.eclipse.core.expressions;bundle-versi
+ on="[3.4.0,4.0.0)"
+Export-Package: com.sun.jdi,com.sun.jdi.connect,com.sun.jdi.connect.sp
+ i,com.sun.jdi.event,com.sun.jdi.request,org.eclipse.jdi,org.eclipse.j
+ di.hcr,org.eclipse.jdi.internal;x-friends:="org.eclipse.jdt.debug.ui"
+ ,org.eclipse.jdi.internal.connect;x-friends:="org.eclipse.jdt.debug.u
+ i",org.eclipse.jdi.internal.event;x-friends:="org.eclipse.jdt.debug.u
+ i",org.eclipse.jdi.internal.jdwp;x-friends:="org.eclipse.jdt.debug.ui
+ ",org.eclipse.jdi.internal.request;x-friends:="org.eclipse.jdt.debug.
+ ui",org.eclipse.jdi.internal.spy;x-friends:="org.eclipse.jdt.debug.ui
+ ",org.eclipse.jdt.debug.core,org.eclipse.jdt.debug.eval,org.eclipse.j
+ dt.internal.debug.core;x-friends:="org.eclipse.jdt.debug.ui,org.eclip
+ se.jdt.launching",org.eclipse.jdt.internal.debug.core.breakpoints;x-f
+ riends:="org.eclipse.jdt.debug.ui",org.eclipse.jdt.internal.debug.cor
+ e.hcr;x-friends:="org.eclipse.jdt.debug.ui",org.eclipse.jdt.internal.
+ debug.core.logicalstructures;x-friends:="org.eclipse.jdt.debug.ui",or
+ g.eclipse.jdt.internal.debug.core.model;x-friends:="org.eclipse.jdt.d
+ ebug.ui",org.eclipse.jdt.internal.debug.eval;x-friends:="org.eclipse.
+ jdt.debug.ui",org.eclipse.jdt.internal.debug.eval.ast.engine;x-friend
+ s:="org.eclipse.jdt.debug.ui",org.eclipse.jdt.internal.debug.eval.ast
+ .instructions;x-friends:="org.eclipse.jdt.debug.ui"
+Bundle-Version: 3.6.1.v20100715_r361
+Bundle-ClassPath: jdi.jar,jdimodel.jar,tools.jar
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-Name: %pluginName
+Import-Package: com.ibm.icu.text
+Bundle-ManifestVersion: 2
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: jdimodel.jar
+SHA1-Digest: wnwnoRAjAFOxfov8kVexopLs1kU=
+
+Name: .api_description
+SHA1-Digest: 23wAgZfBBJ1KNvbaV5zOarpdhWQ=
+
+Name: jdi.jar
+SHA1-Digest: OUI4ntL73FinKelsF2Eau0Z5TEo=
+
+Name: about.html
+SHA1-Digest: ejOZra0kypGLQQ2bJtGTX+LI8tU=
+
+Name: plugin.xml
+SHA1-Digest: fS7HqrqCTc5o+3CoMpuWimlSpt8=
+
+Name: plugin.properties
+SHA1-Digest: sBGaDfjFO8Z+PXOFXE9fX6BK4rw=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/eclipse.inf
new file mode 100644
index 0000000..7864d3c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/META-INF/eclipse.inf
@@ -0,0 +1,3 @@
+#Processed using Jarprocessor
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdi.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdi.jar
new file mode 100644
index 0000000..dff4d2a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdi.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdimodel.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdimodel.jar
new file mode 100644
index 0000000..b67c111
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/jdimodel.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.properties
new file mode 100644
index 0000000..9044b75
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.properties
@@ -0,0 +1,42 @@
+###############################################################################
+# Copyright (c) 2000, 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+
+
+pluginName=JDI Debug Model
+providerName=Eclipse.org
+
+descriptionCollection=Array
+descriptionMap=Map Entries
+descriptionMapEntry=Key and Value
+descriptionSWTComposite=Children
+
+javaLineBreakpoint.name=Java Line Breakpoints
+javaClassLoadBreakpoint.name=Java Class Load Breakpoints
+javaExceptionBreakpoint.name=Java Exception Breakpoints
+javaWatchpoint.name=Java Watchpoints
+javaMethodBreakpoint.name=Java Method Breakpoints
+
+virtualMachineManagerImpl= org.eclipse.jdi.internal.VirtualMachineManagerImpl
+javaLogicalStructures= Java Logical Structures
+
+JavaBreakpoint.name = Java Breakpoint
+JavaClassLoadBreakpoint.name = Java Class Load Breakpoint
+CommonJavaLineBreakpoint.name = Common Java Line Breakpoint
+JavaLineBreakpoint.name = Java Line Breakpoint
+JavaPatternBreakpoint.name = Java Pattern Breakpoint
+JavaTargetPatternBreakpoint.name = Java Target Pattern Breakpoint
+JavaExceptionBreakpoint.name = Java Exception Breakpoint
+JavaWatchpoint.name = Java Watchpoint
+JavaMethodBreakpoint.name = Java Method Breakpoint
+JavaMethodEntryBreakpoint.name = Java Method Entry Breakpoint
+JavaStratumLineBreakpoint.name = Java Stratum Line Breakpoint
+
+breakpointListeners.name = Java Breakpoint Listeners
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.xml
new file mode 100644
index 0000000..bbfd254
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.debug_3.6.1.v20100715_r361/plugin.xml
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+ Copyright (c) 2005, 2010 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+
+<plugin>
+
+
+<!-- Not to be extended com.sun.tools.jdi.VirtualMachineManagerImpl or org.eclipse.jdi.internal.VirtualMachineManagerImpl -->
+ <extension-point id="jdiclient" name="%virtualMachineManagerImpl" schema="schema/jdiclient.exsd"/>
+ <extension-point id="javaLogicalStructures" name="%javaLogicalStructures" schema="schema/javaLogicalStructures.exsd"/>
+ <extension-point id="breakpointListeners" name="%breakpointListeners.name" schema="schema/breakpointListeners.exsd"/>
+
+<!-- Extensions -->
+ <extension
+ point="org.eclipse.debug.core.breakpoints">
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaLineBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint"
+ id="javaLineBreakpoint"
+ name="%javaLineBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaClassPrepareBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaClassPrepareBreakpoint"
+ id="javaClassPrepareBreakpoint"
+ name="%javaClassLoadBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaPatternBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaPatternBreakpoint"
+ id="javaPatternBreakpoint"
+ name="%javaLineBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaTargetPatternBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaTargetPatternBreakpoint"
+ id="javaTargetPatternBreakpoint"
+ name="%javaLineBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaExceptionBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint"
+ id="javaExceptionBreakpoint"
+ name="%javaExceptionBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaWatchpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaWatchpoint"
+ id="javaWatchpoint"
+ name="%javaWatchpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaMethodBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaMethodBreakpoint"
+ id="javaMethodBreakpoint"
+ name="%javaMethodBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaMethodEntryBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaMethodEntryBreakpoint"
+ id="javaMethodEntryBreakpoint"
+ name="%javaMethodBreakpoint.name">
+ </breakpoint>
+ <breakpoint
+ markerType="org.eclipse.jdt.debug.javaStratumLineBreakpointMarker"
+ class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaStratumLineBreakpoint"
+ id="javaStratumLineBreakpointMarker"
+ name="%javaLineBreakpoint.name">
+ </breakpoint>
+ </extension>
+ <extension
+ id="javaBreakpointMarker"
+ name="%JavaBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.debug.core.breakpointMarker">
+ </super>
+ </extension>
+ <extension
+ id="javaClassPrepareBreakpointMarker"
+ name="%JavaClassLoadBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ </extension>
+ <extension
+ id="commonJavaLineBreakpointMarker"
+ name="%CommonJavaLineBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaBreakpointMarker">
+ </super>
+ <super
+ type="org.eclipse.debug.core.lineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.typeName">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.installCount">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.hitCount">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.expired">
+ </attribute>
+ </extension>
+ <extension
+ id="javaLineBreakpointMarker"
+ name="%JavaLineBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.commonJavaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ </extension>
+ <extension
+ id="javaPatternBreakpointMarker"
+ name="%JavaPatternBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.commonJavaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.pattern">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.sourceName">
+ </attribute>
+ </extension>
+ <extension
+ id="javaTargetPatternBreakpointMarker"
+ name="%JavaTargetPatternBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.commonJavaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.sourceName">
+ </attribute>
+ </extension>
+ <extension
+ id="javaExceptionBreakpointMarker"
+ name="%JavaExceptionBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.caught">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.uncaught">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.checked">
+ </attribute>
+ </extension>
+ <extension
+ id="javaWatchpointMarker"
+ name="%JavaWatchpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.fieldName">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.access">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.modification">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.auto_disabled">
+ </attribute>
+ </extension>
+ <extension
+ id="javaMethodBreakpointMarker"
+ name="%JavaMethodBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.methodName">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.methodSignature">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.entry">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.exit">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.native">
+ </attribute>
+ </extension>
+ <extension
+ id="javaMethodEntryBreakpointMarker"
+ name="%JavaMethodEntryBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.javaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.methodName">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.methodSignature">
+ </attribute>
+ </extension>
+ <extension
+ id="javaStratumLineBreakpointMarker"
+ name="%JavaStratumLineBreakpoint.name"
+ point="org.eclipse.core.resources.markers">
+ <super
+ type="org.eclipse.jdt.debug.commonJavaLineBreakpointMarker">
+ </super>
+ <persistent
+ value="true">
+ </persistent>
+ <attribute
+ name="org.eclipse.jdt.debug.core.stratum">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.sourceName">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.sourcePath">
+ </attribute>
+ <attribute
+ name="org.eclipse.jdt.debug.core.pattern">
+ </attribute>
+ </extension>
+
+
+ <extension point="org.eclipse.core.expressions.propertyTesters">
+ <propertyTester
+ namespace="org.eclipse.jdt.debug"
+ properties="isMultiStrata"
+ type="org.eclipse.debug.core.model.IStackFrame"
+ class="org.eclipse.jdt.internal.debug.core.JavaDebugPropertyTester"
+ id="org.eclipse.jdt.debug.PropertyTester">
+ </propertyTester>
+ </extension>
+
+ <extension point="org.eclipse.core.runtime.preferences">
+ <initializer class="org.eclipse.jdt.internal.debug.core.JDIDebugPluginPreferenceInitializer"/>
+ </extension>
+ <extension
+ point="org.eclipse.jdt.debug.javaLogicalStructures">
+ <javaLogicalStructure
+ subtypes="true"
+ value="return entrySet().toArray();"
+ type="java.util.Map"
+ description="%descriptionMap"/>
+ <javaLogicalStructure
+ subtypes="true"
+ value="return toArray();"
+ type="java.util.Collection"
+ description="%descriptionCollection"/>
+ <javaLogicalStructure
+ subtypes="true"
+ type="java.util.Map$Entry"
+ description="%descriptionMapEntry">
+ <variable
+ value="return getKey();"
+ name="key"/>
+ <variable
+ value="return getValue();"
+ name="value"/>
+ </javaLogicalStructure>
+ <javaLogicalStructure
+ subtypes="true"
+ value="return getChildren();"
+ type="org.eclipse.swt.widgets.Composite"
+ description="%descriptionSWTComposite"/>
+ </extension>
+ <extension
+ point="org.eclipse.debug.core.logicalStructureProviders">
+ <logicalStructureProvider
+ class="org.eclipse.jdt.internal.debug.core.logicalstructures.JavaLogicalStructures"
+ modelIdentifier="org.eclipse.jdt.debug"/>
+ </extension>
+ <extension
+ point="org.eclipse.debug.core.breakpointImportParticipants">
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaClassPrepareBreakpointMarker">
+ </importParticipant>
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaExceptionBreakpointMarker">
+ </importParticipant>
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaLineBreakpointMarker">
+ </importParticipant>
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaMethodBreakpointMarker">
+ </importParticipant>
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaMethodEntryBreakpointMarker">
+ </importParticipant>
+ <importParticipant
+ participant="org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpointImportParticipant"
+ type="org.eclipse.jdt.debug.javaWatchpointMarker">
+ </importParticipant>
+ </extension>
+
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.launching_3.5.100.v20100526.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.launching_3.5.100.v20100526.jar
new file mode 100644
index 0000000..4aba6a2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jdt.launching_3.5.100.v20100526.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.databinding_1.4.0.I20100601-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.databinding_1.4.0.I20100601-0800.jar
new file mode 100644
index 0000000..f3323cc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.databinding_1.4.0.I20100601-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text.source_3.6.1.r361_v20100825-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text.source_3.6.1.r361_v20100825-0800.jar
new file mode 100644
index 0000000..6253393
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text.source_3.6.1.r361_v20100825-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text_3.6.1.r361_v20100825-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text_3.6.1.r361_v20100825-0800.jar
new file mode 100644
index 0000000..081b658
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface.text_3.6.1.r361_v20100825-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface_3.6.1.M20100825-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface_3.6.1.M20100825-0800.jar
new file mode 100644
index 0000000..a1bb7a9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.jface_3.6.1.M20100825-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.services_3.2.100.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.services_3.2.100.v20100503.jar
new file mode 100644
index 0000000..e7aeacd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.services_3.2.100.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.util_3.2.100.v20100503.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.util_3.2.100.v20100503.jar
new file mode 100644
index 0000000..37a7c2d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi.util_3.2.100.v20100503.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.1.R36x_v20100806.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.1.R36x_v20100806.jar
new file mode 100644
index 0000000..a0ab7c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.1.R36x_v20100806.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.2.R36x_v20101103.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.2.R36x_v20101103.jar
new file mode 100644
index 0000000..9c88d8b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.osgi_3.6.2.R36x_v20101103.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..39ed711
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentcdcfoundation10
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.cdcfoundation10
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/fragmentcdcfoundation10.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/fragmentcdcfoundation10.properties
new file mode 100644
index 0000000..45f9d3c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/fragmentcdcfoundation10.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for CDC-1.0/Foundation-1.0
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.0_Foundation-1.0.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.0_Foundation-1.0.zip
new file mode 100644
index 0000000..9c389bd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.0_Foundation-1.0.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..05876a6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentcdcfoundation11
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.cdcfoundation11
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/fragmentcdcfoundation11.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/fragmentcdcfoundation11.properties
new file mode 100644
index 0000000..51126d3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/fragmentcdcfoundation11.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for CDC-1.1/Foundation-1.1
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.1_Foundation-1.1.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.1_Foundation-1.1.zip
new file mode 100644
index 0000000..355b23c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/CDC-1.1_Foundation-1.1.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9c2baa3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentj2se12
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se12
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/fragmentj2se12.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/fragmentj2se12.properties
new file mode 100644
index 0000000..cd4ff75
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/fragmentj2se12.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for J2SE-1.2
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip
new file mode 100644
index 0000000..ba4f0cb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se12_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..72c5ade
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentj2se13
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se13
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/fragmentj2se13.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/fragmentj2se13.properties
new file mode 100644
index 0000000..600f206
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/fragmentj2se13.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for J2SE-1.3
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip
new file mode 100644
index 0000000..4e98a20
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se13_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5014a8a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentj2se14
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se14
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/fragmentj2se14.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/fragmentj2se14.properties
new file mode 100644
index 0000000..16ffe52
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/fragmentj2se14.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for J2SE-1.4
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip
new file mode 100644
index 0000000..af38463
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se14_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d490a2b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentj2se15
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se15
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/fragmentj2se15.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/fragmentj2se15.properties
new file mode 100644
index 0000000..a2734c5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/fragmentj2se15.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for J2SE-1.5
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip
new file mode 100644
index 0000000..7cbafe1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.j2se15_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..991e16f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentjavase16
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase16
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/fragmentjavase16.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/fragmentjavase16.properties
new file mode 100644
index 0000000..6838970
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/fragmentjavase16.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for JavaSE-1.6
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip
new file mode 100644
index 0000000..35d79c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.javase16_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a3b5ba8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentjre11
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.jre11
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/fragmentjre11.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/fragmentjre11.properties
new file mode 100644
index 0000000..d25a674
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/fragmentjre11.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for JRE-1.1
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip
new file mode 100644
index 0000000..37f3c92
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.jre11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d5df632
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentosgiminimum10
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum10
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/fragmentosgiminimum10.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/fragmentosgiminimum10.properties
new file mode 100644
index 0000000..a4e3787
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/fragmentosgiminimum10.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for OSGi/Minimum-1.0
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.0.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.0.zip
new file mode 100644
index 0000000..64274db
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.0.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b94d401
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.200901281111
+Bundle-Localization: fragmentosgiminimum11
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum11
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/fragmentosgiminimum11.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/fragmentosgiminimum11.properties
new file mode 100644
index 0000000..a3d429f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/fragmentosgiminimum11.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for OSGi/Minimum-1.1
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.1.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.1.zip
new file mode 100644
index 0000000..dc50a8c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11_1.0.0.200901281111/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.1.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b3ecd1f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.100"
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.1.200904031014
+Bundle-Localization: fragmentosgiminimum12
+Bundle-Name: %fragmentName
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum12
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/fragmentosgiminimum12.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/fragmentosgiminimum12.properties
new file mode 100644
index 0000000..24b019b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/fragmentosgiminimum12.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Environment Description for OSGi/Minimum-1.2
+providerName = Eclipse.org \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip
new file mode 100644
index 0000000..3dae534
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12_1.0.1.200904031014/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools_1.0.202.v20100820_r361.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools_1.0.202.v20100820_r361.jar
new file mode 100644
index 0000000..fcde4d5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.api.tools_1.0.202.v20100820_r361.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.api_description b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.api_description
new file mode 100644
index 0000000..8074529
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.api_description
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component name="org.eclipse.pde.build_3.6.1.R36x_v20100823" version="1.2">
+ <plugin id="org.eclipse.pde.build_3.6.1.R36x_v20100823"/>
+ <package name="org.eclipse.pde.build" visibility="1">
+ <type name="Constants" restrictions="1"/>
+ <type name="IAntScript" restrictions="1"/>
+ </package>
+</component>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.options b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.options
new file mode 100644
index 0000000..3456b32
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/.options
@@ -0,0 +1,2 @@
+# Debugging options for the org.eclipse.pde.build plug-in.
+org.eclipse.pde.build/debug = false \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..9599fc5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..e06f454
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/ECLIPSEF.SF
@@ -0,0 +1,95 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: OgPqrIS/Qkm++WUCOEOLJyT3G5M=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: KKqTYWJcw8N6L+ZXKVOJXcLZmyw=
+
+Name: about_files/LICENSE-2.0.txt
+SHA1-Digest: DMnZPrY7w/ZEOj0YI/l8KoozuvM=
+
+Name: templates/headless-build/allElements.xml
+SHA1-Digest: uNOP4x87ZFcxCZrh1wHh6xocNGE=
+
+Name: pdebuild.jar
+SHA1-Digest: 4+3a26ful0+vPonHd6vN7esT1k0=
+
+Name: data/30/plugin/plugin.xml
+SHA1-Digest: TNr0SYVHOz82hYL1E035r1bdaxI=
+
+Name: data/21/fragment/fragment.xml
+SHA1-Digest: RuOvETVwkWHHIz6sLL0cGzWOyfs=
+
+Name: plugin.properties
+SHA1-Digest: fSjiXuBXrKDeiadiN8kWDMB5+d0=
+
+Name: scripts/build.xml
+SHA1-Digest: Ra/buYWq+UnCJcPzA5sz41d/1Wo=
+
+Name: data/30/plugin/META-INF/MANIFEST.MF
+SHA1-Digest: uGP7DGAAo+v2VD2WZMZMcvbW5rg=
+
+Name: data/30/fragment/META-INF/MANIFEST.MF
+SHA1-Digest: xuwIdriTMf5tW/1Q8pgg/DXqrkU=
+
+Name: data/env.properties
+SHA1-Digest: xv4et2pXxLF6mALWLgDnsTcJMz0=
+
+Name: templates/headless-build/customTargets.xml
+SHA1-Digest: WlB+9NuLDfS72Ze8qNdClC5UvJ4=
+
+Name: plugin.xml
+SHA1-Digest: Oo7TbEwzvkJDXLUZ0Jn1MmXXz4s=
+
+Name: templates/plugins/customBuildCallbacks.xml
+SHA1-Digest: IDfOpRJ/uOOutPKv/917vToHckA=
+
+Name: templates/headless-build/customAssembly.xml
+SHA1-Digest: LclMktc124g60naNVYDIZaytT+A=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: aM8odIt7KSTgo2Ap3NjnGa3gOAA=
+
+Name: templates/packager/packager.properties
+SHA1-Digest: 6lW7kLPw6o+7h7RI0cFTkCje1y0=
+
+Name: scripts/package.xml
+SHA1-Digest: Sbeva+/SSgDw+vwb8fGfCaGsdW4=
+
+Name: .api_description
+SHA1-Digest: tqWRzglik1dttQsggRd59NgJSPI=
+
+Name: templates/packager/packaging.properties
+SHA1-Digest: vtFL0V2RKXrpAMwiftMEsxc9WSo=
+
+Name: data/30/fragment/fragment.xml
+SHA1-Digest: zwzOmFfCE2+ab7G9wkLU7ozpJPc=
+
+Name: about.html
+SHA1-Digest: NsqonTvTIooyUcpddXY8f055MmA=
+
+Name: templates/packager/customTargets.xml
+SHA1-Digest: cvpNR4xRYfhWx6708nI3/HdIawM=
+
+Name: data/21/plugin/plugin.xml
+SHA1-Digest: TpZd48Jmrj9/LTQDyuUubfQoi5w=
+
+Name: lib/pdebuild-ant.jar
+SHA1-Digest: ROs1CkXVZ/6nlW4Rj/dJHko5EaQ=
+
+Name: .options
+SHA1-Digest: jf17v6tebrVOy/2LizKC8hyG2EM=
+
+Name: scripts/productBuild/productBuild.xml
+SHA1-Digest: oW6j+uDQxDJrYO2HjRe41dC20cs=
+
+Name: templates/headless-build/build.properties
+SHA1-Digest: hn9JWP9CaFvWNX/JN3oTWNunyGQ=
+
+Name: templates/features/customBuildCallbacks.xml
+SHA1-Digest: NyC3o1nQkrV1sYrLIPJr89aqmcQ=
+
+Name: scripts/productBuild/allElements.xml
+SHA1-Digest: XQ6qftLqyFAkDlu2MTS22ncyfi0=
+
+Name: scripts/genericTargets.xml
+SHA1-Digest: SKR2rpErWLEPC3tyYxRZJjw2T9Q=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ff05e20
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/MANIFEST.MF
@@ -0,0 +1,137 @@
+Manifest-Version: 1.0
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-SymbolicName: org.eclipse.pde.build;singleton:=true
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/ecl
+ ipse:pde/build/org.eclipse.pde.build;tag=R36x_v20100823
+Bundle-Activator: org.eclipse.pde.internal.build.BuildActivator
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)
+ ",org.eclipse.ant.core;bundle-version="[3.1.100,4.0.0)",org.eclipse.c
+ ore.runtime.compatibility;bundle-version="[3.1.100,4.0.0)";resolution
+ :=optional,org.eclipse.osgi;bundle-version="[3.3.0,4.0.0)",org.eclips
+ e.equinox.p2.jarprocessor;bundle-version="[1.0.1,2.0.0)",org.eclipse.
+ equinox.p2.publisher;bundle-version="1.1.0";resolution:=optional,org.
+ eclipse.equinox.p2.repository.tools;bundle-version="[2.0.0,3.0.0)";re
+ solution:=optional,org.eclipse.equinox.p2.director.app;bundle-version
+ ="1.0.200"
+Export-Package: org.eclipse.pde.build,org.eclipse.pde.internal.build;x
+ -friends:="org.eclipse.pde.core,org.eclipse.pde.ui,org.eclipse.pde.la
+ unching",org.eclipse.pde.internal.build.ant;x-internal:=true,org.ecli
+ pse.pde.internal.build.builder;x-internal:=true,org.eclipse.pde.inter
+ nal.build.fetch;x-internal:=true,org.eclipse.pde.internal.build.packa
+ ger;x-friends:="org.eclipse.pde.core",org.eclipse.pde.internal.build.
+ properties;x-internal:=true,org.eclipse.pde.internal.build.site;x-fri
+ ends:="org.eclipse.pde.core,org.eclipse.pde.ui",org.eclipse.pde.inter
+ nal.build.site.compatibility;x-internal:=true,org.eclipse.pde.interna
+ l.swt.tools;x-internal:=true
+Bundle-Version: 3.6.1.R36x_v20100823
+Bundle-ClassPath: pdebuild.jar
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-Name: %pluginName
+Import-Package: com.ibm.icu.util,org.eclipse.equinox.frameworkadmin;ve
+ rsion="[2.0.0,3.0.0)",org.eclipse.equinox.internal.p2.core.helpers,or
+ g.eclipse.equinox.internal.p2.engine,org.eclipse.equinox.internal.p2.
+ engine.phases,org.eclipse.equinox.internal.p2.metadata,org.eclipse.eq
+ uinox.internal.p2.updatesite;resolution:=optional,org.eclipse.equinox
+ .internal.provisional.frameworkadmin,org.eclipse.equinox.p2.core;vers
+ ion="[2.0.0,3.0.0)",org.eclipse.equinox.p2.engine;version="[2.0.0,3.0
+ .0)",org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",org.ecli
+ pse.equinox.p2.query;version="[2.0.0,3.0.0)",org.eclipse.equinox.p2.r
+ epository;version="[2.0.0,3.0.0)",org.eclipse.equinox.p2.repository.a
+ rtifact;version="[2.0.0,3.0.0)",org.eclipse.equinox.p2.repository.art
+ ifact.spi;version="[2.0.0,3.0.0)",org.eclipse.equinox.p2.repository.m
+ etadata;version="[2.0.0,3.0.0)",org.eclipse.equinox.simpleconfigurato
+ r.manipulator;version="[2.0.0,3.0.0)"
+Bundle-ManifestVersion: 2
+
+Name: about_files/LICENSE-2.0.txt
+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
+
+Name: templates/headless-build/allElements.xml
+SHA1-Digest: q2bBKYqmPHqOOoZ/KHGW27vpTrs=
+
+Name: pdebuild.jar
+SHA1-Digest: wXGeXGeBXNU5Ro1upSWgNcbfaH8=
+
+Name: data/30/plugin/plugin.xml
+SHA1-Digest: I0t+o6kXbySrxIY1bLaTaeai3Vc=
+
+Name: data/21/fragment/fragment.xml
+SHA1-Digest: AbavRQNBCu7bTM0Lc1H50zDiSYo=
+
+Name: plugin.properties
+SHA1-Digest: On4ECYWupC7e7IaidKlhX7JRmGE=
+
+Name: scripts/build.xml
+SHA1-Digest: ALT6mg0J2VkdlElO/DZKKircLUY=
+
+Name: data/30/plugin/META-INF/MANIFEST.MF
+SHA1-Digest: YY/Djivfu2eLXiPBR81hSqa2uJQ=
+
+Name: data/30/fragment/META-INF/MANIFEST.MF
+SHA1-Digest: Irr/y/I+zj9qi1W87gYOTMKdbY4=
+
+Name: data/env.properties
+SHA1-Digest: gGjz5VGccfah5Hgbh30na8FucKQ=
+
+Name: templates/headless-build/customTargets.xml
+SHA1-Digest: qI8yOyB+aPZiVEoZxeaf32T/OxI=
+
+Name: plugin.xml
+SHA1-Digest: xEwW46IdIE48Dqb+tpob/5bMinQ=
+
+Name: templates/plugins/customBuildCallbacks.xml
+SHA1-Digest: LJ6pFU49HSIl5sgRQD3RjkLzrAA=
+
+Name: templates/headless-build/customAssembly.xml
+SHA1-Digest: IUcaiBw6MaeE8jGxFgKLHIuKgkg=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: M1yh6ypEH7aiF3JiaBs2vAuNi54=
+
+Name: templates/packager/packager.properties
+SHA1-Digest: VJjIzaudmPvY//Co7uNLPpiYzug=
+
+Name: scripts/package.xml
+SHA1-Digest: SYAECf2gSUtms4UQv0C5kER28fk=
+
+Name: .api_description
+SHA1-Digest: EoqwGgH+YLK0O5w3bSWmF7LK9tw=
+
+Name: templates/packager/packaging.properties
+SHA1-Digest: uc2/3jWo6zkUYAPV7jDNSEXntfA=
+
+Name: data/30/fragment/fragment.xml
+SHA1-Digest: lyCvCPJfg+w2XjG/WSlLT9rJmxo=
+
+Name: about.html
+SHA1-Digest: PTYI3wCEbgadLnCeEqDFZO2n2Bk=
+
+Name: templates/packager/customTargets.xml
+SHA1-Digest: NdAmTAEHkbWLOPJOQj58nlgkgoE=
+
+Name: data/21/plugin/plugin.xml
+SHA1-Digest: TjrGjV+gDiv3p1mvjHOt/d8yOv4=
+
+Name: lib/pdebuild-ant.jar
+SHA1-Digest: kbExGPte6CXagCyPfooAY5No+Wo=
+
+Name: .options
+SHA1-Digest: 5rmPsLCzhc3+eEEnwq59tbx7+JM=
+
+Name: scripts/productBuild/productBuild.xml
+SHA1-Digest: DVR/5b8vHCrQlpFCG2J8XUvmay0=
+
+Name: templates/headless-build/build.properties
+SHA1-Digest: lb8aiUHEN+5e2pitX9hSE9hhKRo=
+
+Name: templates/features/customBuildCallbacks.xml
+SHA1-Digest: Ao54/q93oQ48bt2DqXbflVrwLRc=
+
+Name: scripts/productBuild/allElements.xml
+SHA1-Digest: bQlG+MHxu2RC8iu8mxTFarrNia8=
+
+Name: scripts/genericTargets.xml
+SHA1-Digest: vOxuJT4IwD0ws86A8Z6QHJp+eP0=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/eclipse.inf
new file mode 100644
index 0000000..6c1d31a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/META-INF/eclipse.inf
@@ -0,0 +1,4 @@
+#Processed using Jarprocessor
+jarprocessor.exclude.children = true
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about.html
new file mode 100644
index 0000000..5ac3da7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>February 08, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for
+terms and conditions of use.</p>
+
+<h4>OSGi Materials</h4>
+
+<p>The following file:</p>
+
+<ul>
+ <li>org/osgi/framework/Version</li>
+</ul>
+
+<p>shall be defined as a subset of the &quot;OSGi Materials.&quot; The OSGi Materials are:</p>
+
+<blockquote>
+Copyright (c) 2000, 2006
+<br /><br />
+OSGi Alliance
+Bishop Ranch 6<br/>
+2400 Camino Ramon, Suite 375<br/>
+San Ramon, CA 94583 USA
+<br /><br />
+All Rights Reserved.
+</blockquote>
+
+<p>The OSGi Materials are provided to you under the terms and conditions of the Apache License, Version 2.0. A copy of the license is contained
+in the file <a href="about_files/LICENSE-2.0.txt" target="_blank">LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p>
+
+<p>Implementation of certain elements of the OSGi Materials may be subject to third party intellectual property rights, including without limitation, patent rights (such a third party may
+or may not be a member of the OSGi Alliance). The OSGi Alliance and its members are not responsible and shall not be held responsible in any manner for identifying or failing to identify any or all such third party
+intellectual property rights.</p>
+
+<small>OSGi&trade; is a trademark, registered trademark, or service mark of The OSGi Alliance in the US and other countries. Java is a trademark,
+registered trademark, or service mark of Sun Microsystems, Inc. in the US and other countries. All other trademarks, registered trademarks, or
+service marks used in the Content are the property of their respective owners and are hereby recognized.</small>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about_files/LICENSE-2.0.txt b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about_files/LICENSE-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/about_files/LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/fragment/fragment.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/fragment/fragment.xml
new file mode 100644
index 0000000..8825e5d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/fragment/fragment.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fragment
+ id="FRAGMENT_ID"
+ name="%pluginName"
+ version="FRAGMENT_VERSION"
+ provider-name="%providerName"
+ plugin-id="PLUGIN_ID"
+ plugin-version="PLUGIN_VERSION">
+
+ <extension point = "org.eclipse.pde.core.source">
+ <location path="src" />
+ </extension>
+
+</fragment>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/plugin/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/plugin/plugin.xml
new file mode 100644
index 0000000..9ffda78
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/21/plugin/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin
+ name="%pluginName"
+ id="PLUGIN_ID"
+ version="PLUGIN_VERSION"
+ provider-name="%providerName">
+
+ <extension point = "org.eclipse.pde.core.source">
+ <location path="src" />
+ </extension>
+
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..68a0b23
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-Name: %pluginName
+Bundle-SymbolicName: FRAGMENT_ID; singleton=true
+Bundle-Version: FRAGMENT_VERSION
+Fragment-Host: PLUGIN_ID;bundle-version="PLUGIN_VERSION"
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Eclipse-PlatformFilter: PLATFORM_FILTER
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/fragment.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/fragment.xml
new file mode 100644
index 0000000..2bf4905
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/fragment/fragment.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<fragment>
+
+ <extension point = "org.eclipse.pde.core.source">
+ <location path="src" />
+ </extension>
+
+</fragment>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d8c86f9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-Name: %pluginName
+Bundle-SymbolicName: PLUGIN_ID; singleton=true
+Bundle-Version: PLUGIN_VERSION
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/plugin.xml
new file mode 100644
index 0000000..e665764
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/30/plugin/plugin.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+ <extension point = "org.eclipse.pde.core.source">
+ <location path="src" />
+ </extension>
+
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/env.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/env.properties
new file mode 100644
index 0000000..88799f5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/data/env.properties
@@ -0,0 +1,63 @@
+###############################################################################
+# Copyright (c) 2006, 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+CDC-1.0/Foundation-1.0.javacSource=1.3
+CDC-1.0/Foundation-1.0.javacTarget=1.1
+
+CDC-1.1/Foundation-1.1.javacSource=1.3
+CDC-1.1/Foundation-1.1.javacTarget=1.2
+
+OSGi/Minimum-1.0.javacSource=1.3
+OSGi/Minimum-1.0.javacTarget=1.1
+
+OSGi/Minimum-1.1.javacSource=1.3
+OSGi/Minimum-1.1.javacTarget=1.2
+
+OSGi/Minimum-1.2.javacSource=1.3
+OSGi/Minimum-1.2.javacTarget=1.2
+
+JRE-1.1.javacSource=1.1
+JRE-1.1.javacTarget=1.1
+
+J2SE-1.2.javacSource=1.2
+J2SE-1.2.javacTarget=1.1
+
+J2SE-1.3.javacSource=1.3
+J2SE-1.3.javacTarget=1.1
+
+J2SE-1.4.javacSource=1.3
+J2SE-1.4.javacTarget=1.2
+
+J2SE-1.5.javacSource=1.5
+J2SE-1.5.javacTarget=1.5
+
+JavaSE-1.6.javacSource=1.6
+JavaSE-1.6.javacTarget=1.6
+
+JavaSE-1.7.javacSource=1.7
+JavaSE-1.7.javacTarget=1.7
+
+PersonalJava-1.1.javacSource=1.1
+PersonalJava-1.1.javacTarget=1.1
+
+PersonalJava-1.2.javacSource=1.1
+PersonalJava-1.2.javacTarget=1.1
+
+CDC-1.0/PersonalBasis-1.0.javacSource=1.3
+CDC-1.0/PersonalBasis-1.0.javacTarget=1.1
+
+CDC-1.0/PersonalJava-1.0.javacSource=1.3
+CDC-1.0/PersonalJava-1.0.javacTarget=1.1
+
+CDC-1.1/PersonalBasis-1.1.javacSource=1.3
+CDC-1.1/PersonalBasis-1.1.javacTarget=1.2
+
+CDC-1.1/PersonalJava-1.1.javacSource=1.3
+CDC-1.1/PersonalJava-1.1.javacTarget=1.2
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/lib/pdebuild-ant.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/lib/pdebuild-ant.jar
new file mode 100644
index 0000000..146aef7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/lib/pdebuild-ant.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/pdebuild.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/pdebuild.jar
new file mode 100644
index 0000000..10e2119
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/pdebuild.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.properties
new file mode 100644
index 0000000..01218bc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2003, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Plug-in Development Environment Build Support
+providerName = Eclipse.org
+
+fetchFactories.name = Fetch Script Factories
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.xml
new file mode 100644
index 0000000..dfff868
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/plugin.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?><!--
+ Copyright (c) 2005, 2010 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+
+<plugin>
+ <extension-point id="fetchFactories" name="%fetchFactories.name" schema="schema/fetchFactories.exsd"/>
+<!-- Tasks -->
+ <extension
+ point="org.eclipse.ant.core.antTasks">
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.brand"
+ class="org.eclipse.pde.internal.build.tasks.BrandTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.brand.p2.artifacts"
+ class="org.eclipse.pde.internal.build.publisher.BrandP2Task">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.gatherBundle"
+ class="org.eclipse.pde.internal.build.publisher.GatherBundleTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.gatherFeature"
+ class="org.eclipse.pde.internal.build.publisher.GatherFeatureTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.fetch"
+ class="org.eclipse.pde.internal.build.tasks.FetchTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.buildScript"
+ class="org.eclipse.pde.internal.build.tasks.BuildScriptGeneratorTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.generateFeature"
+ class="org.eclipse.pde.internal.build.tasks.FeatureGeneratorTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.buildManifest"
+ class="org.eclipse.pde.internal.build.tasks.BuildManifestTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.assembler"
+ class="org.eclipse.pde.internal.build.tasks.PackagerTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.idReplacer"
+ class="org.eclipse.pde.internal.build.tasks.IdReplaceTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.jnlpGenerator"
+ class="org.eclipse.pde.internal.build.tasks.JNLPGeneratorTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.unzipperBuilder"
+ class="org.eclipse.pde.internal.build.tasks.UnzipperGeneratorTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.fetchFilesGenerator"
+ class="org.eclipse.pde.internal.build.tasks.FetchFileGeneratorTask">
+ </antTask>
+ <antTask
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.versionReplacer"
+ class="org.eclipse.pde.internal.build.tasks.GenericVersionReplacer">
+ </antTask>
+ <antTask
+ class="org.eclipse.pde.internal.build.publisher.FeaturesAndBundlesTask"
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.publish.featuresAndBundles">
+ </antTask>
+ <antTask
+ class="org.eclipse.pde.internal.build.tasks.CompileErrorTask"
+ library="lib/pdebuild-ant.jar"
+ name="eclipse.logCompileError">
+ </antTask>
+ <antTask
+ class="org.eclipse.pde.internal.build.generator.GeneratorTask"
+ library="lib/pdebuild-ant.jar"
+ name="p2.generator">
+ </antTask>
+
+ </extension>
+<!-- Extra Classpath -->
+ <extension
+ point="org.eclipse.ant.core.extraClasspathEntries">
+ <extraClasspathEntry
+ library="lib/pdebuild-ant.jar">
+ </extraClasspathEntry>
+ </extension>
+ <extension
+ id="buildtimesite"
+ point="org.eclipse.update.core.siteTypes">
+ <site-factory
+ class="org.eclipse.pde.internal.build.site.BuildTimeSiteFactory">
+ </site-factory>
+ </extension>
+ <extension
+ id="BuildTimeFeatureFactory"
+ point="org.eclipse.update.core.featureTypes">
+ <feature-factory
+ class="org.eclipse.pde.internal.build.site.BuildTimeFeatureFactory">
+ </feature-factory>
+ </extension>
+ <extension
+ id="Build"
+ point="org.eclipse.core.runtime.applications">
+ <application>
+ <run class="org.eclipse.pde.internal.build.BuildApplication"/>
+ </application>
+ </extension>
+
+ <extension
+ point="org.eclipse.pde.build.fetchFactories">
+ <factory
+ class="org.eclipse.pde.internal.build.fetch.CVSFetchTaskFactory"
+ id="CVS"/>
+ <factory
+ class="org.eclipse.pde.internal.build.fetch.COPYFetchTasksFactory"
+ id="COPY"/>
+ <factory
+ class="org.eclipse.pde.internal.build.fetch.GETFetchFactory"
+ id="GET"/>
+ <factory
+ class="org.eclipse.pde.internal.build.fetch.P2IUFetchFactory"
+ id="p2IU"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.ant.core.antProperties">
+ <antProperty
+ class="org.eclipse.pde.internal.build.properties.PDEProperties"
+ eclipseRuntime="false"
+ headless="true"
+ name="eclipse.pdebuild.home"/>
+ <antProperty
+ class="org.eclipse.pde.internal.build.properties.PDEProperties"
+ eclipseRuntime="false"
+ headless="true"
+ name="eclipse.pdebuild.scripts"/>
+ <antProperty
+ class="org.eclipse.pde.internal.build.properties.PDEProperties"
+ eclipseRuntime="false"
+ headless="true"
+ name="eclipse.pdebuild.templates"/>
+ </extension>
+
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/build.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/build.xml
new file mode 100644
index 0000000..a4dd68f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/build.xml
@@ -0,0 +1,153 @@
+<!--
+ Copyright (c) 2003, 2009 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+<project name="Build All Elements" default="main">
+
+<!-- ===================================================================== -->
+<!-- Global properties. See the build.properties for information on -->
+<!-- the properties which callers can control. -->
+<!-- ===================================================================== -->
+<property name="builder" location="${user.dir}"/>
+<property name="builderDirectory" location="${builder}"/>
+<property name="buildProperties" location="${builder}/build.properties"/>
+<property file="${buildProperties}"/>
+<available property="customTargets" file="${builder}/customTargets.xml" value="${builder}/customTargets.xml"/>
+<property name="customTargets" location="${eclipse.pdebuild.templates}/headless-build/customTargets.xml"/>
+<property name="genericTargets" location="${eclipse.pdebuild.scripts}/genericTargets.xml"/>
+
+<!-- ===================================================================== -->
+<!-- main entry point to setup, fetch, generate, build etc. Use -->
+<!-- the customTargets.xml to modify the build behaviour. -->
+<!-- ===================================================================== -->
+
+<!-- ******* add in the descriptions for each of the top level targets to teh target decl -->
+<target name="main" description="the main build target">
+ <antcall target="preBuild" />
+ <antcall target="processRepos"/>
+ <antcall target="fetch" />
+ <antcall target="generate" />
+ <antcall target="process" />
+ <antcall target="assemble" />
+ <antcall target="package" />
+ <antcall target="postBuild" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Steps to do before starting the build. Typical setup includes -->
+<!-- fetching the map files and building the directory. -->
+<!-- ===================================================================== -->
+<target name="preBuild">
+ <mkdir dir="${buildDirectory}" />
+ <ant antfile="${customTargets}" target="preSetup" />
+ <ant antfile="${customTargets}" target="getMapFiles" />
+ <concat destfile="${buildDirectory}/directory.txt" fixlastline="yes">
+ <fileset dir="${buildDirectory}" includes="maps/**/*.map"/>
+ </concat>
+ <ant antfile="${customTargets}" target="postSetup" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- This will transform the content of the repositories listed such that they -->
+<!-- are in a format against which PDE Build can succesfully build -->
+<!-- ===================================================================== -->
+<target name="processRepos" if="repoBaseLocation">
+ <subant target="preProcessRepos" failonerror="false" inheritAll="true" >
+ <fileset file="${customTargets}" />
+ </subant>
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="transformRepos" />
+ </ant>
+ <subant target="postProcessRepos" failonerror="false" inheritAll="true" >
+ <fileset file="${customTargets}" />
+ </subant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Fetch the elements identified in the customTargets -->
+<!-- ===================================================================== -->
+<target name="fetch" unless="skipFetch">
+ <ant antfile="${customTargets}" target="preFetch"/>
+ <!-- Generates and then execute the fetch scripts for each build element-->
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="fetchElement" />
+ </ant>
+
+ <ant antfile="${customTargets}" target="postFetch"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Generate the build scripts for each element identified in the customTargets -->
+<!-- ===================================================================== -->
+<target name="generate">
+ <ant antfile="${customTargets}" target="preGenerate"/>
+ <!-- Generate the build.xml for each build element-->
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="generateScript" />
+ </ant>
+ <ant antfile="${customTargets}" target="postGenerate"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Run the build scripts for each element identified in the customTargets -->
+<!-- ===================================================================== -->
+<target name="process">
+ <!-- Run custom tasks before processing, i.e. creating source build zip files -->
+ <ant antfile="${customTargets}" target="preProcess" />
+
+ <!-- Process all of the build elements-->
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="processElement" />
+ </ant>
+
+ <!-- Run custom tasks after compiling, i.e. reporting compile errors -->
+ <ant antfile="${customTargets}" target="postProcess" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Assemble the build elements into final distributions -->
+<!-- ===================================================================== -->
+<target name="assemble">
+ <ant antfile="${customTargets}" target="preAssemble"/>
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="assembleElement"/>
+ </ant>
+ <ant antfile="${customTargets}" target="postAssemble"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Package the build elements into final distributions -->
+<!-- ===================================================================== -->
+<target name="package" if="runPackager">
+ <ant antfile="${customTargets}" target="prePackage"/>
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="packageElement"/>
+ </ant>
+ <ant antfile="${customTargets}" target="postPackage"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Do any steps required after the build (e.g., posting, testing, ...) -->
+<!-- ===================================================================== -->
+<target name="postBuild">
+ <ant antfile="${customTargets}" target="postBuild" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Clean the build elements. This target is here as an entry -->
+<!-- point to the customTargets. It is not called directly in the normal -->
+<!-- course of events. -->
+<!-- ===================================================================== -->
+<target name="clean">
+ <ant antfile="${customTargets}" target="allElements">
+ <property name="target" value="cleanElement"/>
+ </ant>
+</target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/genericTargets.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/genericTargets.xml
new file mode 100644
index 0000000..351a026
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/genericTargets.xml
@@ -0,0 +1,242 @@
+<!--
+ Copyright (c) 2003, 2010 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+<project name="Generic Build Targets" default="noDefault">
+
+<!-- Properties that must be passed to this script:
+ buildDirectory
+ id
+ type
+ ignoreTagInfo
+ recursiveGeneration
+ workingDirectory
+ configInfo
+-->
+
+<!-- ===================================================================== -->
+<!-- Setup default values -->
+<!-- configs : by default build a platform-independent configuration -->
+<!-- fetchTag : by default use the CVS tags as spec'd in directory.txt -->
+<!-- ===================================================================== -->
+<property name="configs" value="*,*,*"/>
+<property name="fetchTag" value=""/>
+<property name="customEESources" value="" />
+<property name="transformedRepoLocation" value="" />
+<property name="buildingOSGi" value="true"/>
+<property name="generateJnlp" value="false"/>
+<property name="signJars" value="false"/>
+<property name="generateFeatureVersionSuffix" value="false" />
+<property name="generateVersionsLists" value="true" />
+<property name="groupConfigurations" value="false"/>
+<property name="pluginPath" value=""/>
+<property name="filteredDependencyCheck" value="false"/>
+<property name="filterP2Base" value="false"/>
+
+<!-- ===================================================================== -->
+<!-- Fetch a single element (feature, plugin, fragment) -->
+<!-- ===================================================================== -->
+<target name="fetchElement" description="Checking out source from repository..." depends="init">
+ <mkdir dir="${buildDirectory}/features"/>
+ <mkdir dir="${buildDirectory}/plugins"/>
+ <eclipse.fetch
+ elements="${type}@${id}"
+ buildDirectory="${buildDirectory}"
+ directory="${buildDirectory}/directory.txt"
+ fetchTag="${fetchTag}"
+ configInfo="${configs}"
+ baseLocation="${baseLocation}"
+ pluginPath="${transformedRepoLocation}${path.separator}${pluginPath}"
+ />
+
+ <!-- Run generated fetch script -->
+ <ant antfile="${buildDirectory}/fetch_${id}.xml">
+ <!-- ************ should not have to spec these *************** -->
+ <property name="featureOnly" value="true"/>
+ <property name="featureAndPlugins" value="true"/>
+ <property name="featuresRecursively" value="true"/>
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Clean previously built elements -->
+<!-- ===================================================================== -->
+<target name="cleanElement" description="Scrubbing features and plugins of old jars..." depends="init">
+<echo message="${elementPath}"/>
+ <ant antfile="build.xml" dir="${elementPath}" target="clean"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Generate a build.xml file for an element -->
+<!-- ===================================================================== -->
+<target name="generateScript" description="Generating build scripts..." depends="init">
+ <eclipse.buildScript
+ elements="${type}@${id}"
+ buildDirectory="${buildDirectory}"
+ configInfo="${configs}"
+ baseLocation="${baseLocation}"
+ buildingOSGi="${buildingOSGi}"
+ outputUpdateJars="${outputUpdateJars}"
+ archivesFormat="${archivesFormat}"
+ product="${product}"
+ forceContextQualifier="${forceContextQualifier}"
+ generateJnlp="${generateJnlp}"
+ signJars="${signJars}"
+ generateFeatureVersionSuffix="${generateFeatureVersionSuffix}"
+ significantVersionDigits="${significantVersionDigits}"
+ generatedVersionLength="${generatedVersionLength}"
+ generateVersionsLists="${generateVersionsLists}"
+ generateSourceReferences="${generateSourceReferences}"
+ groupConfiguration="${groupConfigurations}"
+ pluginPath="${transformedRepoLocation}${path.separator}${pluginPath}"
+ filteredDependencyCheck="${filteredDependencyCheck}"
+ platformProperties="${platformProperties}"
+ filterP2Base="${filterP2Base}"
+ flattenDependencies="${flattenDependencies}"
+ parallelCompilation="${parallelCompilation}"
+ parallelThreadCount="${parallelThreadCount}"
+ parallelThreadsPerProcessor="${parallelThreadsPerProcessor}"
+ customEESources="${customEESources}"
+ contextRepository="${transformedRepoLocation},${p2.context.repos}"
+ />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Run build.xml for a single element-->
+<!-- ===================================================================== -->
+<target name="processElement" description="Processing build scripts..." depends="init">
+ <antcall target="processViaFeature" />
+ <antcall target="processFlat" />
+</target>
+
+<target name="processViaFeature" unless="flattenDependencies" description="Compile in order of feature containment">
+ <ant antfile="build.xml" dir="${elementPath}" target="build.jars">
+ <property name="target" value="build.jars"/>
+ </ant>
+</target>
+
+<target name="processFlat" if="flattenDependencies" description="Compile in flattened dependency order">
+ <ant antfile="compile.${id}.xml" dir="${buildDirectory}"/>
+</target>
+
+<!-- **********************
+1) the gather targets do more than just gather. These are packaging targets.
+We need to continue ot separate the two concepts (gather and package) as
+the packaging is different if we wanted to create an update site packaging
+(for example). The gathers are commented out for now as the new generated
+scripts do not seem to have them.
+
+2) do we really need the ws and os properties? In all cases? Do they have to be
+set here?
+-->
+
+<!-- ===================================================================== -->
+<!-- Gather items listed in bin.includes -->
+<!-- ===================================================================== -->
+<target name="gatherBinaries" description="Gathering binary distribution..." depends="init">
+ <!-- ant antfile="build.xml" dir="${elementPath}" target="gather.bin.parts"/ -->
+ <ant antfile="build.xml" dir="${elementPath}" target="zip.distribution">
+ <property name="os" value="${os}" />
+ <property name="ws" value="${ws}" />
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Gather source for a build element -->
+<!-- ===================================================================== -->
+<target name="gatherSources" description="Gathering source distribution..." depends="init">
+ <!--suspect: this call is required to create the *.src.zip inside each plugin-->
+ <ant antfile="build.xml" dir="${elementPath}" target="build.sources">
+ <property name="os" value="${os}" />
+ <property name="ws" value="${ws}" />
+ </ant>
+ <ant antfile="build.xml" dir="${elementPath}" target="zip.sources">
+ <property name="os" value="${os}" />
+ <property name="ws" value="${ws}" />
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Gather log files for an element -->
+<!-- Suspect: We just unzip these right away -->
+<!-- ===================================================================== -->
+<target name="gatherLogs" description="Gathering build logs..." depends="init">
+ <ant antfile="build.xml" dir="${elementPath}" target="zip.logs" >
+ <property name="buildDirectory" value="${buildDirectory}" />
+ </ant>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Default target -->
+<!-- ===================================================================== -->
+<target name="noDefault">
+ <echo message="This file must be called with explicit targets" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Assemble one build element -->
+<!-- ===================================================================== -->
+<target name="assembleElement" description="Assembling the build..." depends="init">
+ <ant antfile="assemble.${id}.all.xml" dir="${buildDirectory}"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Package one build element -->
+<!-- ===================================================================== -->
+<target name="packageElement" description="Packaging the build..." depends="init">
+ <ant antfile="package.${id}.all.xml" dir="${buildDirectory}"/>
+</target>
+
+<!-- ===================================================================== -->
+<!-- Miscellaneous helper targets -->
+<!-- ===================================================================== -->
+<target name="init">
+ <condition property="elementPath" value="${buildDirectory}/plugins/${id}">
+ <equals arg1="${type}" arg2="fragment" />
+ </condition>
+ <property name="elementPath" value="${buildDirectory}/${type}s/${id}" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Invokes the p2 transformer to process all the repositories found in repoBaseLocation -->
+<!-- ===================================================================== -->
+<target name="transformRepos">
+ <property name="repoBaseLocation.excludes" value=".*" />
+ <p2.repo2runnable destination="${transformedRepoLocation}">
+ <source dir="${repoBaseLocation}/" includes="*" excludes="${repoBaseLocation.excludes}"/>
+ </p2.repo2runnable>
+</target>
+
+<!-- Invoke the p2 director to perform an install -->
+<target name="runDirector" >
+ <property name="p2.director.bundlepool" value="${p2.director.installPath}"/>
+ <property name="p2.director.dataArea" value="${p2.director.installPath}/p2"/>
+ <property name="p2.director.extraArgs" value="-profileProperties org.eclipse.update.install.features=true" />
+ <property name="p2.director.extraVMArgs" value="-Declipse.p2.MD5Check=false" />
+ <property name="p2.director.profile" value="profile" />
+ <property name="p2.director.version" value="" />
+
+ <p2.director
+ os="${os}" ws="${ws}" arch="${arch}"
+ flavor="${p2.flavor}"
+ roaming="true"
+ profile="${p2.director.profile}"
+ extraArguments="${p2.director.extraArgs}"
+ metadataRepository="${p2.repo}"
+ artifactRepository="${p2.repo}"
+ destination="${p2.director.installPath}"
+ bundlepool="${p2.director.bundlepool}"
+ agentLocation="${p2.director.dataArea}"
+ outputProperty="p2.director.java.output"
+ logFile="${p2.director.log}">
+ <iu id="${p2.director.iu}" version="${p2.director.version}" />
+ </p2.director>
+</target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/package.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/package.xml
new file mode 100644
index 0000000..c8e44dd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/package.xml
@@ -0,0 +1,98 @@
+<!--
+ Copyright (c) 2003, 2007 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+<project name="packager" default="main" basedir=".">
+ <target name="init">
+ <mkdir dir="${workingDirectory}"/>
+ <mkdir dir="${downloadDirectory}"/>
+ <mkdir dir="${tempDirectory}"/>
+ </target>
+
+ <target name="retrieveMapFiles" unless="skipMaps">
+ <available property="mapsFetched" file="${workingDirectory}/all.maps"/>
+ <ant antfile="${customTargets}" target="getMapFiles" />
+ <concat destfile="${workingDirectory}/all.maps">
+ <fileset dir="${downloadDirectory}" includes="**/*.map"/>
+ </concat>
+ </target>
+
+ <!-- take the content of all.maps, retrieve the files according to the filtering options (config, content),
+ and generate a directory.txt for the rest of the process using config as a key, and containing the name of the zip and the directory -->
+ <target name="retrieveFiles" unless="skipFetch">
+ <eclipse.fetchFilesGenerator map="${workingDirectory}/all.maps"
+ workingDirectory="${workingDirectory}"
+ configInfo="${config}"
+ contentFilter="${contentFilter}"
+ componentFilter="${componentFilter}"/>
+ <ant antfile="fetch.xml" dir="${workingDirectory}" />
+ </target>
+
+ <!-- Process the directory.txt to create unzipper.xml, and run unzipper.xml-->
+ <target name="prepareResources" unless="skipUnzip">
+ <eclipse.unzipperBuilder workingDirectory="${workingDirectory}"
+ configInfo="${config}"
+ packagePropertyFile="${packagingPropertyFile}"/>
+ <ant antfile="${workingDirectory}/unzipper.xml"/>
+ </target>
+
+ <!-- Generate an assemble script (assemble.xml) for the given features -->
+ <target name="generateAssembleScripts">
+ <echo message="${target}"/>
+ <eclipse.assembler featureList="${featureList}"
+ workingDirectory="${workingDirectory}"
+ configInfo="${config}"
+ baseLocation="${target}"
+ packagePropertyFile="${packagingPropertyFile}"
+ deltaPack="${deltaPack}"
+ archivesFormat="${archivesFormat}"
+ filteredDependencyCheck="${filteredDependencyCheck}"
+ normalize="${normalizeWhilePackaging}"/>
+ </target>
+
+ <!-- Call the assemble.xml script -->
+ <target name="callAssembleScripts">
+ <ant antfile="package.all.xml" dir="${workingDirectory}"/>
+ </target>
+
+ <target name="main" description="Start the packager for a given config">
+ <property file="${packagingInfo}/packager.properties" />
+ <property name="customTargets" location="${packagingInfo}/customTargets.xml" />
+ <property name="packagingPropertyFile" location="${packagingInfo}/${packagingProperties}" />
+
+ <condition property="skipMaps" value="true">
+ <isset property="prefilledTarget" />
+ </condition>
+ <condition property="skipFetch" value="true">
+ <isset property="prefilledTarget" />
+ </condition>
+ <condition property="skipUnzip" value="true">
+ <isset property="prefilledTarget" />
+ </condition>
+
+ <!-- Compatibility -->
+ <property name="filteredDependencyCheck" value="false"/>
+ <condition property="skipMaps" value="true">
+ <isset property="localMaps"/>
+ </condition>
+ <condition property="target" value="${tempDirectory}/${featurePaths}">
+ <isset property="featurePaths"/>
+ </condition>
+ <property name="normalizeWhilePackaging" value="true"/>
+
+ <!-- End of compatibility -->
+
+ <antcall target="init" />
+ <antcall target="retrieveMapFiles"/>
+ <antcall target="retrieveFiles"/>
+ <antcall target="prepareResources"/>
+ <antcall target="generateAssembleScripts"/>
+ <antcall target="callAssembleScripts"/>
+ </target>
+</project> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/allElements.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/allElements.xml
new file mode 100644
index 0000000..1c2033f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/allElements.xml
@@ -0,0 +1,142 @@
+<!--
+ Copyright (c) 2006, 2008 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+<project name="Product Build allElements Delegator">
+ <property name="defaultAssemblyEnabled" value="true" />
+ <property name="archiveNamePrefix" value="${buildId}"/>
+
+ <!-- ===================================================================== -->
+ <!-- Run a given ${target} on all elements being built -->
+ <!-- Add on <ant> task for each top level element being built. -->
+ <!-- ===================================================================== -->
+ <target name="allElementsDelegator">
+ <ant antfile="${genericTargets}" target="${target}">
+ <property name="type" value="feature" />
+ <property name="id" value="org.eclipse.pde.build.container.feature" />
+ </ant>
+ </target>
+
+ <!-- ====================================================================== -->
+ <!-- The default assemble target, this will be called to assemble each -->
+ <!-- config if a custom assemble target is not defined. -->
+ <!-- The following properties will be defined: -->
+ <!-- config : The configuration being assembled eg "win32.win32.x86" -->
+ <!-- element: The element being assembled eg "org.eclipse.sdk" -->
+ <!-- assembleScriptName: The assemble script to be called -->
+ <!-- ====================================================================== -->
+ <target name="defaultAssemble">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-${config}.zip"/>
+ </ant>
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Targets to assemble the built elements for particular configurations -->
+ <!-- These generally call the generated assemble scripts (named in -->
+ <!-- ${assembleScriptName}) but may also add pre and post processing -->
+ <!-- Add one target for each root element and each configuration -->
+ <!-- ===================================================================== -->
+ <target name="assemble.org.eclipse.pde.build.container.feature">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.win32.win32.x86" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.win32.win32.x86">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-win32.win32.x86.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.win32.win32.x86_64" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.win32.win32.x86_64">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-win32.win32.x86_64.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.ppc" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.ppc">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.ppc.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86_64" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86_64">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86_64.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.linux.motif.x86" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.linux.motif.x86">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-linux.motif.x86.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.solaris.motif.sparc" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.solaris.motif.sparc">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-solaris.motif.sparc.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.solaris.gtk.sparc" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.solaris.gtk.sparc">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-solaris.gtk.sparc.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.aix.motif.ppc" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.aix.motif.ppc">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-aix.motif.ppc.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.hpux.motif.PA_RISC" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.hpux.motif.PA_RISC">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-hpux.motif.PA_RISC.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.ppc" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.ppc">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.ppc.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.x86" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.x86">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.x86.zip"/>
+ </ant>
+ </target>
+
+ <property name="assemble.org.eclipse.pde.build.container.feature.group.group.group" value="true" />
+ <target name="assemble.org.eclipse.pde.build.container.feature.group.group.group">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
+ <property name="archiveName" value="${archiveNamePrefix}-group.zip"/>
+ </ant>
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/productBuild.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/productBuild.xml
new file mode 100644
index 0000000..12131e4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/productBuild/productBuild.xml
@@ -0,0 +1,73 @@
+<!--
+ Copyright (c) 2006, 2010 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ IBM Corporation - initial API and implementation
+ -->
+<project name="Build a Product" default="main">
+
+<!-- ===================================================================== -->
+<!-- Global properties. See the build.properties for information on -->
+<!-- the properties which callers can control. -->
+<!-- ===================================================================== -->
+<property name="allElementsFile" value="${eclipse.pdebuild.scripts}/productBuild/allElements.xml"/>
+<import file="${eclipse.pdebuild.scripts}/build.xml"/>
+<property name="pluginPath" value=""/>
+<property name="pluginList" value=""/>
+<property name="featureList" value=""/>
+<property name="includeLaunchers" value="true"/>
+<property name="generatedBuildProperties" value=""/>
+<condition property="nestedInclusions" value="true">
+ <istrue value="${p2.gathering}" />
+</condition>
+
+<!-- ===================================================================== -->
+<!-- main entry point to setup, fetch, generate, build etc. Use -->
+<!-- the customTargets.xml to modify the build behaviour. -->
+<!-- ===================================================================== -->
+<target name="main" description="the main build target">
+ <antcall target="preBuild" />
+ <antcall target="processRepos"/>
+ <antcall target="generateFeature"> <!-- Generate the feature to drive the fetch -->
+ <param name="verify" value="false"/>
+ </antcall>
+ <antcall target="fetch" />
+ <antcall target="generateFeature"> <!-- We are calling generate feature a second time so that we can get the pack / unpack clause fixed -->
+ <param name="verify" value="true"/>
+ </antcall>
+ <antcall target="generate" />
+ <antcall target="process" />
+ <antcall target="assemble" />
+ <antcall target="package" />
+ <antcall target="postBuild" />
+</target>
+
+<!-- ===================================================================== -->
+<!-- Generate a container feature based on the product file -->
+<!-- The plugin or feature containing the .product file will need to exist -->
+<!-- already, use preSetup or postSetup to fetch it if necessary -->
+<!-- ===================================================================== -->
+<target name="generateFeature">
+ <eclipse.generateFeature
+ featureId="org.eclipse.pde.build.container.feature"
+ buildDirectory="${buildDirectory}"
+ baseLocation="${baseLocation}"
+ productFile="${product}"
+ verify="${verify}"
+ pluginPath="${transformedRepoLocation}${path.separator}${pluginPath}"
+ configInfo="${configs}"
+ pluginList="${pluginList}"
+ featureList="${featureList}"
+ includeLaunchers="${includeLaunchers}"
+ buildPropertiesFile="${generatedBuildProperties}"
+ nestedInclusions="${nestedInclusions}"
+ filterP2Base="${filterP2Base}"
+ />
+</target>
+
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/features/customBuildCallbacks.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/features/customBuildCallbacks.xml
new file mode 100644
index 0000000..246aa79
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/features/customBuildCallbacks.xml
@@ -0,0 +1,32 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+ <!-- ===================================================================== -->
+ <!-- Default target -->
+ <!-- ===================================================================== -->
+ <target name="noDefault">
+ <echo message="This file must be called with explicit targets" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - the directory plugins will be collected to -->
+ <!-- feature.directory - the directory containing the resulting feature -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - the directory plugins will be collected to -->
+ <!-- feature.directory - the directory containing the resulting feature -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.bin.parts">
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/allElements.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/allElements.xml
new file mode 100644
index 0000000..0bb5016
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/allElements.xml
@@ -0,0 +1,52 @@
+<project name="allElements Delegator">
+ <property name="defaultAssemblyEnabled" value="true" />
+
+ <!-- ===================================================================== -->
+ <!-- Run a given ${target} on all elements being built -->
+ <!-- By default ${topLevelElementType} and ${topLevelElementId} should be -->
+ <!-- defined in the builder's build.properties file. You can customize by -->
+ <!-- setting the type/id values directly here. -->
+ <!-- You can add additional calls to ${genericTargets} to build more top -->
+ <!-- level elements. -->
+ <!-- -->
+ <!-- The top level must exist in the ${buildDirectory}, ${baseLocation} or -->
+ <!-- ${pluginPath} locations. -->
+ <!-- ===================================================================== -->
+ <target name="allElementsDelegator">
+ <ant antfile="${genericTargets}" target="${target}">
+ <property name="type" value="${topLevelElementType}" />
+ <property name="id" value="${topLevelElementId}" />
+ </ant>
+ </target>
+
+ <!-- ====================================================================== -->
+ <!-- The default assemble target, this will be called to assemble each -->
+ <!-- config if a custom assemble target is not defined. -->
+ <!-- The following properties will be defined: -->
+ <!-- config : The configuration being assembled eg "win32.win32.x86" -->
+ <!-- element: The element being assembled eg "org.eclipse.sdk" -->
+ <!-- assembleScriptName: The assemble script to be called -->
+ <!-- ====================================================================== -->
+ <target name="defaultAssemble">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Custom targets to assemble the built elements for particular -->
+ <!-- configurations. These generally call the generated assemble scripts -->
+ <!-- (named in ${assembleScriptName}) but may also add pre and post -->
+ <!-- processing -->
+ <!-- Add one target for each root element and each configuration for which -->
+ <!-- custom processing is desired. Replace element.id with the id of the -->
+ <!-- top level element being built. A property with a matching name must -->
+ <!-- be defined for this custom target to be called instead of the -->
+ <!-- defaultAssemble target above. -->
+ <!-- Example: name="assemble.org.eclipse.sdk" -->
+ <!-- Example: name="assemble.org.eclipse.sdk.win32.win32.x86" -->
+ <!-- ====================================================================== -->
+ <property name="assemble.element.id[.config.spec]" value="true" />
+ <target name="assemble.element.id[.config.spec]">
+ <ant antfile="${assembleScriptName}" dir="${buildDirectory}"/>
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/build.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/build.properties
new file mode 100644
index 0000000..45a1813
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/build.properties
@@ -0,0 +1,255 @@
+###############################################################################
+# Copyright (c) 2003, 2009 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+#####################
+# Parameters describing how and where to execute the build.
+# Typical users need only update the following properties:
+# baseLocation - where things you are building against are installed
+# bootclasspath - The base jars to compile against (typicaly rt.jar)
+# configs - the list of {os, ws, arch} configurations to build.
+#
+# Of course any of the settings here can be overridden by spec'ing
+# them on the command line (e.g., -DbaseLocation=d:/eclipse
+
+#The type of the top level element we are building, generally "feature"
+topLevelElementType = feature
+#The id of the top level element we are building
+topLevelElementId = org.foo.bar
+
+############# PRODUCT/PACKAGING CONTROL #############
+product=/plugin or feature id/path/to/.product
+runPackager=true
+
+#Set the name of the archive that will result from the product build.
+#archiveNamePrefix=
+
+# The prefix that will be used in the generated archive.
+archivePrefix=eclipse
+
+# The location underwhich all of the build output will be collected.
+collectingFolder=${archivePrefix}
+
+# The list of {os, ws, arch} configurations to build. This
+# value is a '&' separated list of ',' separate triples. For example,
+# configs=win32,win32,x86 & linux,motif,x86
+# By default the value is *,*,*
+configs = *, *, *
+#configs=win32, win32, x86 & \
+# win32,win32,x86_64 & \
+# win32,win32,wpf & \
+# linux, gtk, ppc & \
+# linux, gtk, x86 & \
+# linux, gtk, x86_64 & \
+# linux, motif, x86 & \
+# solaris, motif, sparc & \
+# solaris, gtk, sparc & \
+# aix, motif, ppc & \
+# hpux, motif, ia64_32 & \
+# macosx, carbon, ppc & \
+# macosx, carbon, x86 & \
+# macosx, cocoa, ppc & \
+# macosx, cocoa, x86 & \
+# macosx, cocoa, x86_64
+
+# By default PDE creates one archive (result) per entry listed in the configs property.
+# Setting this value to true will cause PDE to only create one output containing all
+# artifacts for all the platforms listed in the configs property.
+# To control the output format for the group, add a "group, group, group - <format>" entry to the
+# archivesFormat.
+#groupConfigurations=true
+
+#The format of the archive. By default a zip is created using antZip.
+#The list can only contain the configuration for which the desired format is different than zip.
+#archivesFormat=win32, win32, x86 - antZip& \
+# linux, gtk, ppc - antZip &\
+# linux, gtk, x86 - antZip& \
+# linux, gtk, x86_64 - antZip& \
+# linux, motif, x86 - antZip& \
+# solaris, motif, sparc - antZip& \
+# solaris, gtk, sparc - antZip& \
+# aix, motif, ppc - antZip& \
+# hpux, motif, PA_RISC - antZip& \
+# macosx, carbon, ppc - antZip
+
+#Allow cycles involving at most one bundle that needs to be compiled with the rest being binary bundles.
+allowBinaryCycles = true
+
+#Sort bundles depenedencies across all features instead of just within a given feature.
+#flattenDependencies = true
+
+#Parallel compilation, requires flattenedDependencies=true
+#parallelCompilation=true
+#parallelThreadCount=
+#parallelThreadsPerProcessor=
+
+#Set to true if you want the output to be ready for an update jar (no site.xml generated)
+#outputUpdateJars = false
+
+#Set to true for Jnlp generation
+#codebase should be a URL that will be used as the root of all relative URLs in the output.
+#generateJnlp=false
+#jnlp.codebase=<codebase url>
+#jnlp.j2se=<j2se version>
+#jnlp.locale=<a locale>
+#jnlp.generateOfflineAllowed=true or false generate <offlineAllowed/> attribute in the generated features
+#jnlp.configs=${configs} #uncomment to filter the content of the generated jnlp files based on the configuration being built
+
+#Set to true if you want to sign jars
+#signJars=false
+#sign.alias=<alias>
+#sign.keystore=<keystore location>
+#sign.storepass=<keystore password>
+#sign.keypass=<key password>
+
+#Arguments to send to the zip executable
+zipargs=
+
+#Arguments to send to the tar executable
+tarargs=
+
+#Control the creation of a file containing the version included in each configuration - on by default
+#generateVersionsLists=false
+
+############## BUILD NAMING CONTROL ################
+# The directory into which the build elements are fetched and where
+# the build takes place.
+buildDirectory=${user.home}/eclipse.build
+
+# Type of build. Used in naming the build output. Typically this value is
+# one of I, N, M, S, ...
+buildType=I
+
+# ID of the build. Used in naming the build output.
+buildId=TestBuild
+
+# Label for the build. Used in naming the build output
+buildLabel=${buildType}.${buildId}
+
+# Timestamp for the build. Used in naming the build output
+timestamp=007
+
+#The value to be used for the qualifier of a plugin or feature when you want to override the value computed by pde.
+#The value will only be applied to plugin or features indicating build.properties, qualifier = context
+#forceContextQualifier=<the value for the qualifier>
+
+#Enable / disable the generation of a suffix for the features that use .qualifier.
+#The generated suffix is computed according to the content of the feature
+#generateFeatureVersionSuffix=true
+
+############# BASE CONTROL #############
+# Settings for the base Eclipse components and Java class libraries
+# against which you are building.
+# Base location for anything the build needs to compile against. For example,
+# in most RCP app or a plug-in, the baseLocation should be the location of a previously
+# installed Eclipse against which the application or plug-in code will be compiled and the RCP delta pack.
+
+base=<path/to/parent/of/eclipse>
+baseLocation=${base}/eclipse
+
+#Folder containing repositories whose content is needed to compile against
+#repoBaseLocation=${base}/repos
+#Folder where the content of the repositories from ${repoBaseLocation} will be made available as a form suitable to be compiled against
+#transformedRepoLocation=${base}/transformedRepos
+
+#Os/Ws/Arch/nl of the eclipse specified by baseLocation
+baseos=win32
+basews=win32
+basearch=x86
+
+#this property indicates whether you want the set of plug-ins and features to be considered during the build to be limited to the ones reachable from the features / plugins being built
+filteredDependencyCheck=false
+
+#this property indicates whether the resolution should be done in development mode (i.e. ignore multiple bundles with singletons)
+resolution.devMode=false
+
+#pluginPath is a list of locations in which to find plugins and features. This list is separated by the platform file separator (; or :)
+#a location is one of:
+#- the location of the jar or folder that is the plugin or feature : /path/to/foo.jar or /path/to/foo
+#- a directory that contains a /plugins or /features subdirectory
+#- the location of a feature.xml, or for 2.1 style plugins, the plugin.xml or fragment.xml
+#pluginPath=
+
+skipBase=true
+eclipseURL=<url for eclipse download site>
+eclipseBuildId=<Id of Eclipse build to get>
+eclipseBaseURL=${eclipseURL}/eclipse-platform-${eclipseBuildId}-win32.zip
+
+
+############# MAP FILE CONTROL ################
+# This section defines CVS tags to use when fetching the map files from the repository.
+# If you want to fetch the map file from repository / location, change the getMapFiles target in the customTargets.xml
+
+skipMaps=true
+mapsRepo=:pserver:anonymous@example.com/path/to/repo
+mapsRoot=path/to/maps
+mapsCheckoutTag=HEAD
+
+#tagMaps=true
+mapsTagTag=v${buildId}
+
+
+############ REPOSITORY CONTROL ###############
+# This section defines properties parameterizing the repositories where plugins, fragments
+# bundles and features are being obtained from.
+
+# The tags to use when fetching elements to build.
+# By default thebuilder will use whatever is in the maps.
+# This value takes the form of a comma separated list of repository identifier (like used in the map files) and the
+# overriding value
+# For example fetchTag=CVS=HEAD, SVN=v20050101
+# fetchTag=HEAD
+skipFetch=true
+
+
+############# JAVA COMPILER OPTIONS ##############
+# The location of the Java jars to compile against. Typically the rt.jar for your JDK/JRE
+#bootclasspath=${java.home}/lib/rt.jar
+
+# specific JRE locations to compile against. These values are used to compile bundles specifying a
+# Bundle-RequiredExecutionEnvironment. Uncomment and set values for environments that you support
+#CDC-1.0/Foundation-1.0= /path/to/rt.jar
+#CDC-1.1/Foundation-1.1=
+#OSGi/Minimum-1.0=
+#OSGi/Minimum-1.1=
+#JRE-1.1=
+#J2SE-1.2=
+#J2SE-1.3=
+#J2SE-1.4=
+#J2SE-1.5=
+#JavaSE-1.6=
+#PersonalJava-1.1=
+#PersonalJava-1.2=
+#CDC-1.0/PersonalBasis-1.0=
+#CDC-1.0/PersonalJava-1.0=
+#CDC-1.1/PersonalBasis-1.1=
+#CDC-1.1/PersonalJava-1.1=
+
+# Specify the output format of the compiler log when eclipse jdt is used
+logExtension=.log
+
+# Whether or not to include debug info in the output jars
+javacDebugInfo=false
+
+# Whether or not to fail the build if there are compiler errors
+javacFailOnError=true
+
+# Enable or disable verbose mode of the compiler
+javacVerbose=true
+
+# Extra arguments for the compiler. These are specific to the java compiler being used.
+#compilerArg=
+
+# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacSource in build.properties
+#javacSource=1.3
+
+# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
+#javacTarget=1.1
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customAssembly.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customAssembly.xml
new file mode 100644
index 0000000..b7dd814
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customAssembly.xml
@@ -0,0 +1,66 @@
+<project name="Build specific targets and properties" default="noDefault">
+
+ <!-- =====================================================================
+
+ The Following Properties are available in all targets:
+ - eclipse.base : the base folder everything will be collected into
+ - eclipse.plugins : the plugins folder
+ - eclipse.features: the features folder
+ - archiveFullPath : the full path of the final archive once it is created
+
+ ===================================================================== -->
+
+ <!-- ===================================================================== -->
+ <!-- Called after each invocation of the gather.bin.parts target on the -->
+ <!-- individual plugins and features. -->
+ <!-- Available properties are: -->
+ <!-- projectLocation: location of the project being gathered -->
+ <!-- projectName: symbolic name with version (org.eclipse.foo_1.0.0.v123) -->
+ <!-- target.folder: the destination, eclipse/plugins or eclipse/features -->
+ <!-- -->
+ <!-- The generated pattern is that plugins/features are gathered into the -->
+ <!-- folder ${target.folder}/${projectName} -->
+ <!-- ===================================================================== -->
+ <target name="gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Called after invoking the gather.bin.parts targets for all plugins -->
+ <!-- and features. Results exist as folders and have not yet been jarred. -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Called just prior to signing a jar -->
+ <!-- In addititon to the properties listed above: -->
+ <!-- - source : plugins or features directory -->
+ <!-- - elementName: element being signed without .jar -->
+ <!-- (eg "org.eclipse.foo_1.0.0" -->
+ <!-- ===================================================================== -->
+ <target name="pre.jarSigning">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Called after all plugins and features have been jarred -->
+ <!-- (and potentially signed) -->
+ <!-- ===================================================================== -->
+ <target name="post.jarUp">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Called just before the archive file is built -->
+ <!-- In addititon to the properties listed above: -->
+ <!-- - rootFolder : the folder containing the root files -->
+ <!-- ===================================================================== -->
+ <target name="pre.archive">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Default target -->
+ <!-- ===================================================================== -->
+ <target name="noDefault">
+ <echo message="You must specify a target when invoking this file" />
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customTargets.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customTargets.xml
new file mode 100644
index 0000000..e0b6bc5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/headless-build/customTargets.xml
@@ -0,0 +1,175 @@
+<project name="Build specific targets and properties" default="noDefault">
+
+ <!-- ===================================================================== -->
+ <!-- Run a given ${target} on all elements being built -->
+ <!-- Add on <ant> task for each top level element being built. -->
+ <!-- ===================================================================== -->
+ <available property="allElementsFile" file="${builder}/allElements.xml" value="${builder}/allElements.xml"/>
+ <property name="allElementsFile" location="${eclipse.pdebuild.templates}/headless-build/allElements.xml"/>
+
+ <import file="${allElementsFile}" />
+ <target name="allElements">
+ <antcall target="allElementsDelegator" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- ===================================================================== -->
+ <target name="getBaseComponents" depends="checkLocalBase" unless="skipBase">
+ <get src="${eclipseBaseURL}" dest="${buildDirectory}/../temp-base.zip" />
+ <unzip dest="${base}" overwrite="true" src="${buildDirectory}/../temp-base.zip" />
+ </target>
+
+ <target name="checkLocalBase">
+ <available file="${base}" property="skipBase" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Check out map files from correct repository -->
+ <!-- Replace values for mapsCheckoutTag as desired. -->
+ <!-- ===================================================================== -->
+ <target name="getMapFiles" depends="checkLocalMaps" unless="skipMaps">
+ <property name="mapsCheckoutTag" value="HEAD" />
+ <cvs cvsRoot="${mapsRepo}" package="${mapsRoot}" dest="${buildDirectory}/maps" tag="${mapsCheckoutTag}" />
+ </target>
+
+ <target name="checkLocalMaps">
+ <available property="skipMaps" file="${buildDirectory}/maps" />
+ </target>
+
+ <target name="tagMapFiles" if="tagMaps">
+ <cvs dest="${buildDirectory}/maps/${mapsRoot}" command="tag ${mapsTagTag}" />
+ </target>
+
+ <!-- ===================================================================== -->
+
+ <target name="clean" unless="noclean">
+ <antcall target="allElements">
+ <param name="target" value="cleanElement" />
+ </antcall>
+ </target>
+
+ <target name="gatherLogs">
+ <mkdir dir="${buildDirectory}/${buildLabel}/compilelogs" />
+ <antcall target="allElements">
+ <param name="target" value="gatherLogs" />
+ </antcall>
+ <unzip dest="${buildDirectory}/${buildLabel}/compilelogs" overwrite="true">
+ <fileset dir="${buildDirectory}/features">
+ <include name="**/*.log.zip" />
+ </fileset>
+ </unzip>
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before setup -->
+ <!-- ===================================================================== -->
+ <target name="preSetup">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after setup but before starting the build proper -->
+ <!-- ===================================================================== -->
+ <target name="postSetup">
+ <antcall target="getBaseComponents" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before fetching the build elements -->
+ <!-- ===================================================================== -->
+ <target name="preFetch">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after fetching the build elements -->
+ <!-- ===================================================================== -->
+ <target name="postFetch">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the repositories are being processed -->
+ <!-- ===================================================================== -->
+ <target name="preProcessRepos">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the repositories have been processed -->
+ <!-- ===================================================================== -->
+ <target name="postProcessRepos">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before generating the build scripts. -->
+ <!-- ===================================================================== -->
+ <target name="preGenerate">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after generating the build scripts. -->
+ <!-- ===================================================================== -->
+ <target name="postGenerate">
+ <antcall target="clean" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before running the build.xmls for the elements being built. -->
+ <!-- ===================================================================== -->
+ <target name="preProcess">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after running the build.xmls for the elements being built. -->
+ <!-- ===================================================================== -->
+ <target name="postProcess">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before running assemble. -->
+ <!-- ===================================================================== -->
+ <target name="preAssemble">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after running assemble. -->
+ <!-- ===================================================================== -->
+ <target name="postAssemble">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before running package. -->
+ <!-- ===================================================================== -->
+ <target name="prePackage">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after running package. -->
+ <!-- ===================================================================== -->
+ <target name="postPackage">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the build is done. -->
+ <!-- ===================================================================== -->
+ <target name="postBuild">
+ <antcall target="gatherLogs" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do to test the build results -->
+ <!-- ===================================================================== -->
+ <target name="test">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do to publish the build results -->
+ <!-- ===================================================================== -->
+ <target name="publish">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Default target -->
+ <!-- ===================================================================== -->
+ <target name="noDefault">
+ <echo message="You must specify a target when invoking this file" />
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/customTargets.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/customTargets.xml
new file mode 100644
index 0000000..eac9576
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/customTargets.xml
@@ -0,0 +1,81 @@
+<project name="Custom Targets MyTest" default="noDefault">
+
+ <target name="noDefault" />
+
+ <!-- This goal of this target is to get the packaging map files of the things you care for
+ The files must be fetched into the downloadDirectory folder -->
+ <target name="getMapFiles" unless="localMaps">
+ <get src="${packagerMapURL}" dest="${downloadDirectory}/initial.map" usetimestamp="true"/>
+ </target>
+
+ <target name="init">
+ <property name="archiveNamePrefix" value="${buildId}"/>
+ </target>
+
+ <target name="assemble.win32.win32.x86.xml" depends="init">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-win32.win32.win32.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.linux.gtk.x86.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.linux.gtk.ppc.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.ppc.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.linux.gtk.x86_64.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86_64.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.linux.motif.x86.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-linux.motif.x86.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.solaris.motif.sparc.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-solaris.motif.sparc.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.solaris.gtk.sparc.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-solaris.gtk.sparc.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.aix.motif.ppc.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-aix.motif.ppc.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.hpux.motif.PA_RISC.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-hpux.motif.PA_RISC.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.macosx.carbon.ppc.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.ppc.zip"/>
+ </ant>
+ </target>
+
+ <target name="assemble.macosx.carbon.x86.xml">
+ <ant antfile="${assembleScriptName}" >
+ <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.x86.zip"/>
+ </ant>
+ </target>
+
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packager.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packager.properties
new file mode 100644
index 0000000..84aa87e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packager.properties
@@ -0,0 +1,110 @@
+
+#The directory used as a base for the all process
+baseDirectory = <folder>
+
+#Setting this to true will cause the dependency analysis to only be done on the features and plugins reachble from the ${featureList}.
+filteredDependencyCheck=false
+
+# A comma separated list of feature ids that will be part of the archive.
+featureList = <featuresToGather>
+
+# The list of {os, ws, arch} configurations to build. This
+# value is a '&' separated list of ',' separate triples.
+# By default the value is *,*,* which is platform independant
+#config=win32, win32, x86 & \
+# linux, gtk, ppc &\
+# linux, gtk, x86 & \
+# linux, gtk, x86_64 & \
+# linux, motif, x86 & \
+# solaris, motif, sparc & \
+# solaris, gtk, sparc & \
+# aix, motif, ppc & \
+# hpux, motif, PA_RISC & \
+# macosx, carbon, ppc
+
+#Set this variable to normalize plug-in and feature names while packaging
+normalizeWhilePackaging=true
+
+################ DOWNLOAD ############################
+#Skip any download and unzipping work because the things to be packaged are already available in ${target}
+#Comment the property if you want the download and unzip to occur.
+prefilledTarget = true
+
+
+#Don't download packager map files, they should already exist in ${downloadDirectory}
+#comment out this property to download the map file from packagerMapURL
+#skipMaps = true
+#The URL from which to download the packager map file. If more than one file needs to be downloaded, edit the getMapFiles target in your customTargets.xml
+#packagerMapURL =
+
+#Don't download the archives.
+#skipFetch = true
+
+# A comma seperated list of the component from which the features listed in featureList can be found
+# This is used as a optimization to avoid unnecessary downloads.
+# * should be specified if you don't know
+componentFilter=*
+
+# A comma separated list of filters used to optimize the download of archives.
+#Values in this filter should match the
+contentFilter=sdk
+
+
+################ FOLDERS ############################
+# The place in which all the scripts will be contained
+workingDirectory = ${baseDirectory}/workingPlace
+buildDirectory = ${workingDirectory}
+
+# The folder in which all the zips will be downloaded
+downloadDirectory = ${baseDirectory}/toPackage
+
+# The folder where all the operations are being done
+tempDirectory = ${baseDirectory}/temp
+
+# The place in which the zips are located
+sourceFolder = ${downloadDirectory}
+
+################# SOURCES ###########################
+# A comma separated lists of places where plugins and features will be looked for
+target = ${tempDirectory}/eclipse
+
+################## MISC ##########################
+# This controls the build id in the default name of the archive
+buildId=MyProduct
+
+# Type of build. Used in naming the build output. Typically this value is
+# one of I, N, M, S, ...
+buildType=I
+
+#Set the name of the archive that will result from the product build.
+#archiveNamePrefix =
+
+# Label for the build. Used in naming the build output
+buildLabel=${buildType}.${buildId}
+
+#The format of the archive. By default a zip is created using antZip.
+#archivesFormat=win32, win32, x86 - antZip& \
+# linux, gtk, ppc - antZip &\
+# linux, gtk, x86 - antZip& \
+# linux, gtk, x86_64 - antZip& \
+# linux, motif, x86 - antZip& \
+# solaris, motif, sparc - antZip& \
+# solaris, gtk, sparc - antZip& \
+# aix, motif, ppc - antZip& \
+# hpux, motif, PA_RISC - antZip& \
+# macosx, carbon, ppc - antZip
+
+# extra arguments to be passed to zip / unzip (-y is usually used on unix for zip)
+zipargs=
+unzipArgs=
+
+# the prefix in the archive
+archivePrefix=eclipse
+
+# the folder in which the files that will be added to the archive will be placed
+collectingFolder=eclipse
+
+
+############### PACKAGING.PROPERTIES #############################
+# a relative path to the file containing the properties for element to package
+packagingProperties = packaging.properties
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packaging.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packaging.properties
new file mode 100644
index 0000000..98ffbb2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/packager/packaging.properties
@@ -0,0 +1,28 @@
+###############################################################################
+# Copyright (c) 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# The chmod and links must indicate a path relative to the root directory.
+
+# List the files and folders to be copied into the root of eclipse for all platform
+# configurations
+root=epl-v10.html, notice.html, configuration/, startup.jar, .eclipseproduct, eclipse.ini, readme/
+root.permissions.755=eclipse,*.so*
+root.macosx.carbon.ppc.permissions.755=Eclipse.app/Contents/MacOS/eclipse
+
+root.win32.win32.x86=eclipse.exe, eclipsec.exe
+root.linux.motif.x86=eclipse,libcairo-swt.so,libXm.so.2,about_files/,about.html,icon.xpm
+root.linux.gtk.x86=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
+root.linux.gtk.x86_64=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
+root.linux.gtk.ppc=eclipse
+root.macosx.carbon.ppc=eclipse,Eclipse.app/
+root.macosx.carbon.ppc.link=Eclipse.app/Contents/MacOS/eclipse,eclipse,../../../MacOS,Eclipse.app/Contents/Resources/Splash.app/Contents/MacOS
+root.aix.motif.ppc=eclipse
+root.hpux.motif.PA_RISC=eclipse
+root.solaris.gtk.sparc=eclipse,Eclipse.l.pm,Eclipse.m.pm,Eclipse.s.pm,Eclipse.t.pm
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/plugins/customBuildCallbacks.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/plugins/customBuildCallbacks.xml
new file mode 100644
index 0000000..db9b2e1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.build_3.6.1.R36x_v20100823/templates/plugins/customBuildCallbacks.xml
@@ -0,0 +1,158 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+ <!-- ===================================================================== -->
+ <!-- Default target -->
+ <!-- ===================================================================== -->
+ <target name="noDefault">
+ <echo message="This file must be called with explicit targets" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target build.jars -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="pre.build.jars">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target build.jars -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="post.build.jars">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target build.sources -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="pre.build.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target build.sources -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="post.build.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the compilation target <name> -->
+ <!-- Substitute "name" with the name of the compilation target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- source.foldern : n = 1 ... N, the source folders -->
+ <!-- target.folder : where the results of the compilation go -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="pre.name">
+ </target>
+
+ <target name="pre.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do during the compilation target <name>, after the compile -->
+ <!-- but before jaring. Substitute "name" with the name of the compilation-->
+ <!-- target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- source.foldern : n = 1 ... N, the source folders -->
+ <!-- target.folder : where the results of the compilation go -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="post.compile.name">
+ </target>
+
+ <target name="post.compile.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the compilation target <name> -->
+ <!-- Substitute "name" with the name of the compilation target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- jar.Location - the location of the compilation results -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="post.name">
+ </target>
+
+ <target name="post.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder containing the build results -->
+ <!-- target.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder containing the build results -->
+ <!-- target.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.sources -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.sources -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.logs -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.logs">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.logs -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.logs">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target clean -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.clean">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target clean -->
+ <!-- Available parameters : -->
+ <!-- plugin.destination - final destination of the build -->
+ <!-- build.result.folder - results of the compilation -->
+ <!-- temp.folder - temporary folder -->
+ <!-- ===================================================================== -->
+ <target name="post.clean">
+ </target>
+</project>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.core_3.6.1.v20100902_r361.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.core_3.6.1.v20100902_r361.jar
new file mode 100644
index 0000000..ef4f3f2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.pde.core_3.6.1.v20100902_r361.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.gtk.linux.x86_3.6.1.v3657a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.gtk.linux.x86_3.6.1.v3657a.jar
new file mode 100644
index 0000000..9dee985
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.gtk.linux.x86_3.6.1.v3657a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.win32.win32.x86_3.6.1.v3657a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.win32.win32.x86_3.6.1.v3657a.jar
new file mode 100644
index 0000000..8ba448f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt.win32.win32.x86_3.6.1.v3657a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt_3.6.1.v3657a.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt_3.6.1.v3657a.jar
new file mode 100644
index 0000000..f731572
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.swt_3.6.1.v3657a.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.team.core_3.5.100.R36x_v20100825-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.team.core_3.5.100.R36x_v20100825-0800.jar
new file mode 100644
index 0000000..c6bd5ea
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.team.core_3.5.100.R36x_v20100825-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.classpath b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.classpath
new file mode 100644
index 0000000..4c3abc5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="src"/>
+</classpath>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.project b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.project
new file mode 100644
index 0000000..47525f5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.test.performance.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0d00e40
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.test.performance.ui; singleton:=true
+Bundle-Version: 3.6.0.qualifier
+Bundle-ClassPath: performanceui.jar
+Bundle-Activator: org.eclipse.test.performance.ui.UiPlugin
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.swt,
+ org.apache.derby;resolution:=optional,
+ Cloudscape;resolution:=optional,
+ org.eclipse.test.performance.derby;bundle-version="10.4.2";resolution:=optional,
+ org.junit,
+ org.eclipse.ui.views;bundle-version="3.4.0";resolution:=optional,
+ org.eclipse.test.performance;bundle-version="3.6.0",
+ org.eclipse.ui;bundle-version="3.5.0";resolution:=optional,
+ org.eclipse.ui.ide;bundle-version="3.5.0";resolution:=optional,
+ org.eclipse.core.resources;bundle-version="3.5.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Export-Package: org.eclipse.test.internal.performance.results.db,
+ org.eclipse.test.internal.performance.results.model,
+ org.eclipse.test.internal.performance.results.ui,
+ org.eclipse.test.internal.performance.results.utils,
+ org.eclipse.test.performance.ui
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/about.html
new file mode 100644
index 0000000..e336131
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/about.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>February 24, 2005</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/build.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/build.properties
new file mode 100644
index 0000000..07c50a4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/build.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# Copyright (c) 2003, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+
+bin.includes = about.html,\
+ META-INF/,\
+ images/,\
+ plugin.xml,\
+ readme.html,\
+ scripts/,\
+ icons/,\
+ html/,\
+ performanceui.jar,\
+ toc.xml,\
+ contexts.xml,\
+ doc/
+source.performanceui.jar = src/
+jars.compile.order = performanceui.jar
+src.includes = src/
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/contexts.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/contexts.xml
new file mode 100644
index 0000000..c205f96
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/contexts.xml
@@ -0,0 +1,30 @@
+<contexts>
+ <context id="components" title="Components View">
+ <description>This view shows the performance results in a hierarchical tree:
+Component
+ + Scenario
+ + Test machine
+ + Build
+ + Performance numbers
+
+Typically, the Eclipse builder runs performance tests for each component after the build is made on several performance test machines. Each component defines one or several specific performance test suites made of several test (aka scenario). Several performance numbers (e.g. Elapsed Process Time and CPU Time) are stored for each scenario and all build results are available in the performance results database.
+
+This structure is roughly the same than the one used to generate performance results, hence make it easy to match the numbers in the corresponding page HTML page.</description>
+ </context>
+ <context id="builds" title="Builds view">
+ <description>This view shows the list of all the builds contained in the connected database or in the local data files if no database is connected.
+
+Different fonts are used to display build names depending on the level of knowledge about the corresponding build:
+ - gray+italic: connected to a database but no available local data
+ - gray: connected to a database and local data do not contain any information for this build
+ - black: local data contain information about this build</description>
+ </context>
+ <context id="results" title="Component Results view">
+ <description>This view show for each of the performance machine the entire results since the beginning.
+
+Each tab of this view represent a performance machine (also named config).
+The name of the machine is the name of the tab. The results are displayed in
+a table where each column represents a scenario and each line a build.
+The lines are ordered in descending order (from the most recent to the oldest build).</description>
+ </context>
+</contexts>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/help.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/help.html
new file mode 100644
index 0000000..74a75e6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/help.html
@@ -0,0 +1,108 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<style type="text/css">p, table, td, th { font-family: arial, helvetica, geneva; font-size: 10pt}
+pre { font-family: "Courier New", Courier, mono; font-size: 10pt}
+h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}
+code { font-family: "Courier New", Courier, mono; font-size: 10pt}
+sup { font-family: arial,helvetica,geneva; font-size: 10px}
+h3 { font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}
+li { font-family: arial, helvetica, geneva; font-size: 10pt}
+h1 { font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}
+body { font-family: arial, helvetica, geneva; font-size: 10pt; clip: rect( ); margin-top: 5mm; margin-left: 3mm}
+.indextop { font-size: x-large;; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold}
+.indexsub { font-size: xx-small;; font-family: Arial, Helvetica, sans-serif; color: #8080FF}
+</style>
+<body>
+<p>
+<h1>Table of contents</h1>
+<ul>
+<li><a href="#scales">Scales</a>
+<ul>
+<li><a href="#percent">Percentage</a></li>
+<li><a href="#time">Time linear</a></li>
+<li><a href="#time">Time logarithmic</a></li>
+</ul>
+</li>
+<li><a href="#tips">Tips for time scales</a></li>
+</ul>
+</p>
+<h1><a name="scales">Scales</h1>
+Since 3.5, it's possible to see results in fingerprints with three different
+kinds of scale.
+<h3><a name="percent">Percentage scale</h3>
+<p>The X axis represents percentage of the variation vs. the given baseline</p>
+<p>This is the way fingerprints were displayed since the beginning:
+<p><img src="images/percentage.png">
+<ul>
+<li>Red bar means a regression, even if it's less than the 10% threshold.</li>
+<li>Green bar means an improvement</li>
+<li>Gray bar means an 'explained' regression.</li>
+</ul>
+</p>
+<h3><a name="time">Linear and logarithmic time scales</h3>
+<p>For these scales, the X axis represents the duration time of the test.<br>
+The colors meanings are the same than for the percentage scale.<br>
+These kind of graphs give a better idea of time duration for each test.</p>
+<p>Typically use linear scale if you want to see the tests relativeness for all the component tests:</p>
+<p><img src="images/linear.png">
+<p>But the logarithmic scale is more appropriate when there are a strong duration differences between tests, hence makes short duration tests easier to survey:</p>
+<p><img src="images/log.png">
+<p>Each test have two bars: the former is white and shows the baseline result, the latter is colored (red, green or gray) and shows the current build result.<br>
+The variation between the baseline and the build is displayed as a percentage on top of both bars.</p>
+<h1><a name="tips">Tips for time scales</h1>
+<p>Tips are almost the same for linear and logarithmic scales:</p>
+<table border="0">
+ <tr>
+ <td valign="top"><img src="../images/light.gif"></td>
+ <td><b>Flying over a bar displays its time value<b>:</td></tr>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_time_baseline.png"></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_time_current.png"></td>
+ </tr>
+ <tr><td><br></td></tr>
+ <tr>
+ <td valign="top"><img src="../images/light.gif"></td>
+ <td><b>For <u>linear scale only</u>, when the error on the time result is noticeable,
+ then the measurement uncertainty is shown in yellow at the end of the bar<b>:</td></tr>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_time_error.png"></td>
+ </tr>
+ <tr><td><br></td></tr>
+ <tr>
+ <td valign="top"><img src="../images/light.gif"></td>
+ <td><b>A performance regression may sometimes have a known good reason</b>.<br>
+ In this case, the current build bar is grayed and flying over it also shows the given explanation:</td></tr>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_explained_regression.png"></td>
+ </tr>
+ <tr><td><br></td></tr>
+ <tr>
+ <td valign="top"><img src="../images/light.gif"></td>
+ <td><b>Test result may have big error which can make the test result not fully reliable</b>.<br>
+ In this case, a warning icon is shown after the variation value and flying over it gives the offending error value:</td></tr>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_error_warning.png"></td>
+ </tr>
+ <tr><td><br></td></tr>
+ <tr>
+ <td valign="top"><img src="../images/light.gif"></td>
+ <td><b>Test may have no result for the used baseline, hence the first available build is used as a reference</b>.<br>
+ In this case, a warning icon is shown after the scenario title and flying over it gives the build ID used to compute the variation:</td></tr>
+ </tr>
+ <tr>
+ <td></td>
+ <td><img src="images/help_no_baseline.png"></td>
+ </tr>
+</table>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_error_warning.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_error_warning.png
new file mode 100644
index 0000000..399acaf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_error_warning.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_explained_regression.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_explained_regression.png
new file mode 100644
index 0000000..a7b7c84
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_explained_regression.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_no_baseline.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_no_baseline.png
new file mode 100644
index 0000000..f06762e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_no_baseline.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_baseline.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_baseline.png
new file mode 100644
index 0000000..594fdf2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_baseline.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_current.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_current.png
new file mode 100644
index 0000000..5e913cb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_current.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_error.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_error.png
new file mode 100644
index 0000000..2ce272d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/help_time_error.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/linear.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/linear.png
new file mode 100644
index 0000000..cd276a9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/linear.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/log.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/log.png
new file mode 100644
index 0000000..7f2e84a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/log.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/percentage.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/percentage.png
new file mode 100644
index 0000000..6f965da
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/doc/images/percentage.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/builds.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/builds.html
new file mode 100644
index 0000000..e0dcf60
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/builds.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Builds view</title>
+</head>
+
+<body>
+<h1>Builds view</h1>
+<p>
+This view shows the list of all the builds contained in the connected database
+or in the local data files if no database is connected.
+</p>
+
+<h2>Information status</h2>
+<p>
+When starting the tool for the first time, this view is empty as no data has been
+populated, neither from the <a href="local_data.html">local data</a> files
+nor from the performance results database.
+</p><p>
+The typical usage of the performance tools is to read local data files copied
+from the server (see <a href="local_data.html">local data</a>). When this has
+been done, build names are displayed in this view using normal black color.
+</p>
+Some or all build names of the list may be displayed in a different font when
+a performance results database is connected:
+<ul>
+<li>
+<i><font color="#888888">gray and italic</font></i>: no local data files
+were read
+<p><img src="images/builds-nolocaldata.png" alt="Builds view with no local data"/></p>
+</li>
+<li>
+<font color="#888888">gray</font></i>: the local data files were read but contain
+no information about this build (typically new performance tests ran but the local
+data files were not copied since then):
+<p><img src="images/builds-missinglocaldata.png" alt="Builds view with missing local data"/></p>
+In this case it's possible to update those builds using the popup-menu:
+<p><img src="images/builds-update.png" alt="Update local data builds"/></p>
+It's also possible to rewrite the local data files from the database contents
+in one shot using the toolbar pull-up menu:
+<p><img src="images/builds-updateall.png" alt="Update all local data"/></p>
+</li>
+</ul>
+
+<h2>Generate</h2>
+<p>
+From this view, it is also possible to generate HTML pages using the generate
+command accessible from the popup-menu:
+<p><img src="images/builds-generate-menu.png" alt="Generate results: menu item"/></p>
+<p>
+After having selected the directory where to put the generated files, it's possible
+to choose the baseline to compare with:
+<p><img src="images/builds-generate-baseline.png" alt="Generate results: baseline selection"/></p>
+<p>
+And also whether you only want to generate the fingerprints or all the data:
+<p><img src="images/builds-generate-fingerprints.png" alt="Generate results: fingerprints"/></p>
+<p>
+After the generation ends, there should be in the specified directory similar
+files than the one generated on eclipsebuildserv.
+</p><p>
+<i>Note that a PHP server is neeeded to be able to read these files as it's done on
+eclipsebuildserv or fullmoon...</i>
+</p>
+
+<h2>Filters</h2>
+<p>
+There are several possible filters in this view.
+
+<h3>Builds filters</h3>
+<ul>
+<li>Baseline: hide the baselines (starting with R-3.x)</li>
+<li>Nightly: hide the nightly builds (starting with 'N')</li>
+<li>Old: hide all builds before last milestone except earlier milestones</li>
+</ul>
+<p>
+In this view baselines filter is not activated by default. It's because it may
+be interesting to know which baselines have results in the DB.
+Note that this filter is not synchronized with the one in Components view.
+</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/components.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/components.html
new file mode 100644
index 0000000..be5b75d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/components.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Components view</title>
+</head>
+
+<body>
+<h1>Components view</h1>
+<p>
+This view shows the performance results in similar way than the one used to generate
+the performance results, hence make it easy to match the numbers in the corresponding
+page HTML page.
+</p><p>
+When starting the tool for the first time, this view is empty as no data has been
+populated, neither from the <a href="local_data.html">local data</a> files
+nor from the performance results database.
+</p>
+
+
+<h2>Hierarchical tree</h2>
+<p>
+Typically, the Eclipse builder runs performance tests for each component after
+the build is made on several performance test machines. Each component defines one
+or several specific performance test suites made of several test (aka scenario).
+</p><p>
+Several performance numbers (e.g. Elapsed Process Time and CPU Time) are stored
+for each scenario and all build results are available in the performance results
+database.
+</p><p>
+Hence the tree structure is made as follow:
+<pre>
+Component
+ + Scenario
+ + Test machine
+ + Build
+ + Performance numbers
+</pre>
+and may look as follow:
+<p><img src="images/components.png" alt="Components view"/></p>
+
+<h2>Icons</h2>
+<p>
+Several icons are displayed on tree element, here are their meaning.
+</p><p>
+The red cross means that there's at least one scenario on one machine for
+the last build with a failure (i.e. a regression over 10%).
+</p><p>
+The warning icon means that some warnings occur for some results. The current possible warning are:
+<ul>
+<li>error over the 3% threshold on test(s)</li>
+<li>unreliable test(s): the deviation through the test(s) history is over 20%</li>
+<li>unstable test(s): the deviation through the test(s) history is between 10 and 20%</li>
+<li>no baseline for test(s)</li>
+<li>only one run on test(s)</li>
+</ul>
+</p><p>
+The information icon gives some other interesting information:
+<ul>
+<li>the Student T-test fails on test(s)</li>
+<li>the test(s) value or its delta is less than 100ms</li>
+</ul>
+</p><p>
+Note that for component and scenario level, the status is the aggregation of
+the children status. That means that as soon as one scenario is in error then
+the component is also flagged in error. And of course the higher severity is
+displayed masking lower possible icons.
+</p>
+
+<h2>Filters</h2>
+<p>
+There are several possible filters in this view:
+
+<h3>Builds filters</h3>
+<ul>
+<li>Baseline: hide the baselines (starting with R-3.x)</li>
+<li>Nightly: hide the nightly builds (starting with 'N')</li>
+<li>Old: hide all builds before last milestone except earlier milestones</li>
+</ul>
+
+<h3>Scenarios filter</h3>
+<ul>
+<li>Advanced scenarios: hide the scenarios which are not in the fingerprints</li>
+</ul>
+<p>
+As baselines results are not really useful for the survey, the filter is activated
+by default in this view. Currently the survey only concerns the fingerprints
+scenario, hence the corresponding filter is also activated by default.
+</p>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-baseline.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-baseline.png
new file mode 100644
index 0000000..42af1f4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-baseline.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-fingerprints.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-fingerprints.png
new file mode 100644
index 0000000..5a746ca
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-fingerprints.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-menu.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-menu.png
new file mode 100644
index 0000000..c2d8a62
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-generate-menu.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-missinglocaldata.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-missinglocaldata.png
new file mode 100644
index 0000000..c49239c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-missinglocaldata.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-nolocaldata.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-nolocaldata.png
new file mode 100644
index 0000000..a745a51
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-nolocaldata.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-update.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-update.png
new file mode 100644
index 0000000..d3935e5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-update.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-updateall.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-updateall.png
new file mode 100644
index 0000000..7740942
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/builds-updateall.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/components.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/components.png
new file mode 100644
index 0000000..5a41cc7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/components.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/perspective.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/perspective.png
new file mode 100644
index 0000000..a010ac4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/perspective.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/preferences.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/preferences.png
new file mode 100644
index 0000000..321ba22
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/preferences.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-survey-comment.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-survey-comment.png
new file mode 100644
index 0000000..71255cb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-survey-comment.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-warnings.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-warnings.png
new file mode 100644
index 0000000..9954107
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/properties-warnings.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-comment.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-comment.png
new file mode 100644
index 0000000..7594237
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-comment.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-components.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-components.png
new file mode 100644
index 0000000..2369c2e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-components.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-failures.png b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-failures.png
new file mode 100644
index 0000000..7c739c4
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/images/verification-failures.png
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/local_data.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/local_data.html
new file mode 100644
index 0000000..1d55a69
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/local_data.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Local data</title>
+</head>
+
+<body>
+<h1>Local data</h1>
+<p>
+As the connection to the server database is too slow, local files containing
+all necessary information are written while generating performance results on
+the server.
+</p><p>
+The performance results tool then can read these files to avoid long distance
+access to data information. Of course, it's first necessary to copy these files
+on a location easily accessible from the machine where the tool is launched.
+</p><p>
+<i>Notes
+<ul>
+<li>these files are accessible for some authorized users onto
+<b>ottcvs1.ottawa.ibm.com</b> at <b>/home/users/ecperf</b> directory</li>
+<li>SFTP is necessary to copy these files from that location</li>
+</ul>
+</i>
+</p><p>
+To read the local files, select the <b>Local data -> Read...</b> menu item and
+chose the directory where the files have been copied.
+</p><p>
+<i>Notes
+<ul>
+<li>this manual read action only has to be done once, as it will be automatically
+done at the next start of the tool</li>
+<li>no verification is currently done that the local files matches
+the connected DB (if any). Mixing them should give unpredictable results!</li>
+</ul>
+</i>
+</p>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/overview.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/overview.html
new file mode 100644
index 0000000..45001b0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/overview.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Overview</title>
+</head>
+
+<body>
+<h1>Overview</h1>
+The performance results tool provide an easy way to look at results collected
+while running performance tests on a build. It is accessible using the <b>Performance Results</b>
+perspective:
+<p><img src="images/perspective.png" alt="Performance Results perspective"/></p>
+<p>
+There are 4 views in this perspective:
+<ul>
+<li><a href="components.html">Components view</a>: This is the view to see
+the results in details for each components</li>
+<li><a href="builds.html">Builds view</a>: This is the view to see all builds,
+update local data and generate results when necessary</li>
+<li><a href="results.html">Components Results view</a>: This is the view to
+see whole results for each machine in a single table</li>
+<li><a href="properties.html">Properties view</a>: Display element properties
+(typically results numbers and other database information)</li>
+</ul>
+</p><p>
+The goal of this tool is both to look at performance results database numbers
+and to verify whether a build result may have scenario showing performance regression.
+</p><p>
+The view to use to look at performance results number is the <a href="components.html">Components view</a>.
+In this results are displayed in a hierarchical tree which have a similar structure
+than the generated HTML pages (e.g.
+<a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/performance/performance.php">Eclipse 3.5.0</a>).
+The complete performance results information is provided on each element of the tree in the
+<a href="properties.html">Properties view</a>. This is typically useful when a scenario
+results looks weird to have the ability to verify that the numbers looks correct
+or not.
+</p><p>
+The view to verify whether a regression occurs is the <a href="results.html">Components Results view</a>.
+All results for one component are shown in a single table which also provides
+all necessary information to decide whether a noticed regression could be confirmed
+or not.
+</p>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/preferences.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/preferences.html
new file mode 100644
index 0000000..ead8fd6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/preferences.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Preferences</title>
+</head>
+
+<body>
+<h1>Preferences</h1>
+<p>
+The tool have some preferences which may be configured by advanced users.
+This must be done carefully otherwise, either no data could be read by the tool
+and/or generated results could be puzzled.
+</p><p>
+Here's what the page looks like:
+<p><img src="images/preferences.png" alt="Preferences"/></p>
+
+<h2>Database</h2>
+<p>
+By default the tool does not connect to any performance results database as common
+users might not have enough rights to access it. However, users having these
+rights may want to look at the database contents and update the local data files
+with it. Hence, it is possible to configure the tool to connect to a database
+which may be either local or on the releng server (<code><b>minsky</b></code>).
+</p>
+
+<h2>Milestones</h2>
+<p>
+These are the list of the version milestones. Each milestone is a date string
+using the <b>yyyymmddHHMM</b> format. When a new milestone is shipped, then a new
+date must be added to this preference to let the tool to identify it in the builds
+list and emphasize it...
+</p>
+
+<h2>Default dimension</h2>
+<p>
+This is the dimension used to compute delta and make the verification. Currently
+this is the <b>Elapsed Process Time</b> dimension.
+</p><p>
+<i>Note that the default dimension must belong to the <b>Results dimensions</b>
+described below, hence a new selected dimensions will always be automatically
+added to the list...</i>
+</p>
+
+<h2>Results dimensions</h2>
+<p>
+These are dimensions displayed in the scenario data HTML pages. Currently there
+are the <b>Elapsed Process Time</b> and the <b>CPU Time</b>. Having these dimensions
+configurable may be interesting to display others dimensions and see whether their
+numbers may be relevant or not (e.g. <b>Used Hava Heap</b>).
+</p><p>
+<i>Note that the default dimension described above must belong to the selected
+dimensions, hence it will always be automatically added to the new selected list...</i>
+</p>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/properties.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/properties.html
new file mode 100644
index 0000000..6470322
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/properties.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Properties view</title>
+</head>
+
+<body>
+<h1>Properties view</h1>
+<p>
+Properties view contents is different for each select element of the component hierarchy.
+But they all have three sections:
+<ul>
+<li>Results: Performances results information</li>
+<li>Status: Various severity messages</li>
+<li>Survey: Comment added while surveying</li>
+</ul>
+<p>
+Note that the status may have multiple warning messages. So, this property is
+in fact a combo-box, to display all the messages, click on the drop-down button:
+<p><img src="images/properties-warnings.png" alt="Properties warnings"/></p>
+<p>
+It's also possible to add a text into the survey comment on each properties:
+<p><img src="images/properties-survey-comment.png" alt="Properties survey comment"/></p>
+<p>
+This allow to remember what was the conclusion of the last survey concerning an element of the tree...
+</p>
+
+<h2>Component properties</h2>
+TODO
+
+<h2>Scenario properties</h2>
+TODO
+
+<h2>Config properties</h2>
+TODO
+
+<h2>Build properties</h2>
+TODO
+
+<h2>Dimension properties</h2>
+TODO
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/results.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/results.html
new file mode 100644
index 0000000..fd9e98e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/results.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Components Results view</title>
+</head>
+
+<body>
+<h1>Components Results view</h1>
+<p>
+This view show for each of the performance machine the entire results since the beginning.
+</p>
+
+<h2>Config tab</h2>
+<p>
+Each tab of this view represent a performance machine (also named config).
+The name of the machine is the name of the tab. The results are displayed in
+a table where each column represents a scenario and each line a build.
+The lines are ordered in descending order (from the most recent to the oldest build).
+</p><p>
+Here are some tips about this view:
+<ul>
+<li>when old builds are not filtered, the milestone build are highlighted in bold
++ blueref color background</li>
+<li>results color depends on the diff of the delta with the baseline:
+<ul>
+<li>red: <code>diff &lt;= -5%</code></li>
+<li>magenta: <code>-5% &lt; diff &lt; 0%</code></li>
+<li>black: <code>0% &lt;= diff &lt; +10%</code></li>
+<li>blue: <code>+10% &lt;= diff &lt; +25%</code></li>
+<li>green: <code>diff &gt;= +25%</code></li>
+</ul></li>
+<li>icons have the same meaning than in the Components view</li>
+<li>more information are available in the cell tooltip when either there's a
+warning/information icon and/or when the result is in displayed italic</li>
+</ul>
+
+<h2>Filters</h2>
+<p>
+There are 3 possible filters in this view:
+</p>
+<h3>Builds filters</h3>
+<ul>
+<li>Nightly: hide the nightly builds (starting with 'N')</li>
+<li>Old: hide all builds before last milestone except earlier milestones</li>
+</ul>
+
+<h3>Scenarios filter</h3>
+<ul>
+<li>Advanced scenarios: hide the scenarios which are not in the fingerprints</li>
+</ul>
+<p>
+These filters are synchronized with the Components view, hence have the same default.
+</p>
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/verification.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/verification.html
new file mode 100644
index 0000000..70f2c0b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/html/verification.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Verification</title>
+</head>
+
+<body>
+<h1>Verification</h1>
+<p>
+While verifying a build results, the first thing to do is to look for failures.
+The tool helps to know rapidly which components have failure showing a red-cross
+icon in the <a href="components.html">Components view</a>:
+<p><img src="images/verification-components.png" alt="Verification: failing components"/></p>
+</p><p>
+When clicking on one of the component having error(s), the tool automatically
+selects the first configuration (i.e. test machine) which has an error in its
+last build results. Then, flying over the failures may give a first indication
+whether the regressions are confirmed or not.
+</p><p>
+In the following example, a tool tip is displayed saying that the deviation has
+a small value and may be not enough important to report a bug:
+<p><img src="images/verification-failures.png" alt="Verification: failing test"/></p>
+<p>
+Then this analyze can be stored to see whether this scenario will still have
+a similar error on the next build performance run:
+<p><img src="images/verification-comment.png" alt="Verification: failure comment"/></p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/builds.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/builds.gif
new file mode 100644
index 0000000..cb55e33
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/builds.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/components.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/components.gif
new file mode 100644
index 0000000..2344861
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/components.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/perfs.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/perfs.gif
new file mode 100644
index 0000000..3bd4e36
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/perfs.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/results.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/results.gif
new file mode 100644
index 0000000..0193dbe
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/results.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/sample.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/icons/sample.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL.gif
new file mode 100644
index 0000000..c65be5a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_caution.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_caution.gif
new file mode 100644
index 0000000..d2680d7
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_caution.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_greyed.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_greyed.gif
new file mode 100644
index 0000000..1d80a8d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/FAIL_greyed.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK.gif
new file mode 100644
index 0000000..be6df8d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK_caution.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK_caution.gif
new file mode 100644
index 0000000..b5af61f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/OK_caution.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/Unknown.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/Unknown.gif
new file mode 100644
index 0000000..1f69b55
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/Unknown.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/descriptions.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/descriptions.html
new file mode 100644
index 0000000..dc9db05
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/descriptions.html
@@ -0,0 +1,18 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Descriptions</title>
+ </head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<p><a name="fp"></a><font size="+2"><b>Fingerprint Example</b></font></p>
+<p><img src="fp.bmp"> </p>
+<p>&nbsp;</p><hr>
+<p><a name="sst"></a><font size="+2"><b>Scenario Status Table Example</b></font></p>
+<p><img src="sst.bmp"></p>
+<p>&nbsp;</p><hr>
+<p><a name="sr"></a><b><font size="+2">Scenario Results Example</font></b></p>
+<p><img src="sr.bmp"></p>
+</body>
+</html>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/fp.bmp b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/fp.bmp
new file mode 100644
index 0000000..1d7863e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/fp.bmp
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/light.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/light.gif
new file mode 100644
index 0000000..542dddc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/light.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sr.bmp b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sr.bmp
new file mode 100644
index 0000000..2c063f0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sr.bmp
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sst.bmp b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sst.bmp
new file mode 100644
index 0000000..8f36cf6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/sst.bmp
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/warning_obj.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/warning_obj.gif
new file mode 100644
index 0000000..2b2e50f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/images/warning_obj.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/performanceui.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/performanceui.jar
new file mode 100644
index 0000000..3623103
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/performanceui.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.properties
new file mode 100644
index 0000000..0b19a7b
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+Bundle-Name= Ui Performance Test Framework Plug-in
+Bundle-Vendor= Eclipse.org
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.xml
new file mode 100644
index 0000000..491cb79
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/plugin.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+<!-- Applications -->
+ <extension
+ id="resultGenerator"
+ point="org.eclipse.core.runtime.applications">
+ <application>
+ <run
+ class="org.eclipse.test.performance.ui.Main">
+ </run>
+ </application>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.eclipse.test.internal.performance.results.ui.PerformanceResultsPreferencePage"
+ id="org.eclipse.test.performance.ui.prpp"
+ name="Performances">
+ </page>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.views">
+ <category
+ name="Performances"
+ id="Performances">
+ </category>
+ <view
+ category="Performances"
+ class="org.eclipse.test.internal.performance.results.ui.ComponentsView"
+ icon="icons/components.gif"
+ id="org.eclipse.test.internal.performance.results.ui.ComponentsView"
+ name="Components">
+ </view>
+ <view
+ category="Performances"
+ class="org.eclipse.test.internal.performance.results.ui.BuildsView"
+ icon="icons/builds.gif"
+ id="org.eclipse.test.internal.performance.results.ui.BuildsView"
+ name="Builds">
+ </view>
+ <view
+ category="Performances"
+ class="org.eclipse.test.internal.performance.results.ui.ComponentResultsView"
+ icon="icons/results.gif"
+ id="org.eclipse.test.internal.performance.results.ui.ComponentsResultsView"
+ name="Component Results"
+ restorable="true">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.preferences">
+ <initializer
+ class="org.eclipse.test.internal.performance.results.ui.PerformanceResultsPreferenceInitializer">
+ </initializer>
+ </extension>
+ <extension
+ point="org.eclipse.ui.perspectives">
+ <perspective
+ class="org.eclipse.test.internal.performance.results.ui.PerformanceResultsPerspective"
+ icon="icons/perfs.gif"
+ id="org.eclipse.test.performance.ui.perspectives.PerformanceResultsPerspective"
+ name="Performances Results">
+ <description>
+ Perspective to survey the performances of the Eclipse components
+ </description>
+ </perspective>
+ </extension>
+ <extension
+ point="org.eclipse.help.contexts">
+ <contexts
+ file="contexts.xml">
+ </contexts>
+ </extension>
+ <extension
+ point="org.eclipse.help.toc">
+ <toc
+ file="toc.xml"
+ primary="true">
+ </toc>
+ </extension>
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/readme.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/readme.html
new file mode 100644
index 0000000..f4cb0cc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/readme.html
@@ -0,0 +1,77 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>org.eclipse.test.performance.ui readme</title>
+ </head>
+
+<p><b><font size="+2">README</font></b><br> </p><p>last updated: October 26, 2005<br>
+</p><p><b>Introduction</b><br> <br> This readme describes how to create performance
+charts and tables similar to those available on the eclipse platform download
+pages using the stand-alone java program <b>org.eclipse.test.performance.ui.Main</b>
+stored in this project. Although the program is currently geared to generating
+results for the Eclipse Platform builds, the program may work for you given the
+following conditions:</p><ul> <li>The &quot;eclipse.perf.config&quot; system property
+used to run tests used three keys config, build and jvm <ul> <li>for example,
+"eclipse.perf.config=config=relengbuildwin2;build=I20050219-1500;jvm=sun1.4.2_06".
+<br> <br> </li></ul></li><li>Values for the "build" key begin with either an 'I'
+or 'N' with the exception of the reference builds (for example, 3.0). <ul> <li>The
+line graphs plot the reference build, all builds starting with 'I' and the seven
+'N' builds preceding the current build.</li><li>This can be overriden with the use of the &quot;-current.prefix&quot; parameter where you can specify a comma-separated list of prefixes for build ids to include in the main line graph.<br> <br> </li></ul></li><li>Scenario names
+all contain a prefix &quot;&lt;component&gt;.test&quot; <ul> <li>For example,
+it is assumed that the scenario &quot;org.eclipse.help.tests.performance.appserver.TestAppserver#testAppserverCycle()&quot;
+belongs to the &quot;org.eclipse.help&quot; component. </li><li>Unique scenario
+prefixes are derived from all the scenarios in the database and are used to group
+results.</li></ul></li></ul><p><br> For purposes of this document, the term &quot;<a href="images/descriptions.html#fp">fingerprint</a>&quot;
+will be used to refer to a bar graph which represents the performance summary
+at a global or component level for each test configuration.<br> <br> The term
+&quot;<a href="images/descriptions.html#sst">scenario status table</a>&quot; will
+be used to refer to a table of scenarios with green checks and red x indicators
+below a component fingerprint. This table gives an overall view of the status
+for all scenarios for a component for all configurations.<br> </p><p>The term
+&quot;<a href="images/descriptions.html#sr">scenario results</a>&quot; will be
+used to refer to a web page comparing current performance measurements to the
+baseline measurements for one scenario on one configuration. The web page displays
+the raw data for the current and baseline measurements and also displays line
+graphs showing the measured values over the course of builds between the current
+and baseline.</p><p><br> <b>Requirements</b> </p><ul> <li>Windows or Linux (x86)
+operating system</li><li>Cloudscape or Derby plug-in</li><li>org.eclipse.releng.basebuilder</li><li>1.4
+level jvm installed and on path</li></ul><p><b>Setup</b><br> </p><ul> <li>Checkout
+org.eclipse.releng.basebuilder from cvs repository dev.eclipse.org:/home/eclipse
+(HEAD should be fine).</li><li>Create a Cloudscape or derby plug-in as described
+<A HREF="http://dev.eclipse.org/viewcvs/index.cgi/*checkout*/org.eclipse.test.performance/doc/Performance%20Tests%20HowTo.html?rev=HEAD&content-type=text/html#cloudscape">here</A>.</li><li>Set
+the environment variable &quot;dbloc&quot; to the location of the database containing
+the performance data<br> For example:<br> <ul> <li> export dbloc=net://minsky.ottawa.ibm.com
+(Linux)</li><li>set dbloc==net://minsky.ottawa.ibm.com (Windows)<br> </li></ul></li></ul><p><b>Running
+the program</b></p><p>From a terminal or dos prompt,<br> </p><OL><LI>Set the environment
+variable &quot;dbloc&quot; to the location of the database containing the performance
+data<BR> For example:<UL><LI>export dbloc=net://minsky.ottawa.ibm.com (Linux)</LI><LI>set
+dbloc==net://minsky.ottawa.ibm.com (Windows)<BR><BR></LI></UL></LI><LI>cd
+to org.eclipse.releng.basebuilder\plugins\org.eclipse.test.performance.ui\scripts<BR></LI><LI>If
+running on Linux, execute &quot;chmod 755 genresults&quot;</LI><LI>Execute the
+following command:<b><br> <br> genresults -baseline &lt;baseline build id&gt;
+-current &lt;current build id&gt; -config &lt;comma-separated list of configs&gt;
+-jvm &lt;jvm name&gt; -output &lt;output dir&gt; [-config.properties &lt;properties&gt;]
+[highlight &lt;buildid patterns&gt;] [scenario.pattern &lt;scenario prefix
+patterns&gt;] [-fingerprints][-scenarioresults][-current.prefix &lt;comma-separated list of build id prefixes&gt;][-baseline.prefix &lt;comma-separated list of build id prefixes&gt;]</b></LI></OL><br> Parameter descriptions:
+<blockquote> <p>-baseline &lt;baseline build id. A previous value used in the
+&quot;build&quot; key in the eclipse.perf.config system property or the eclipse.perf.assertAgainst
+property. &gt; <br> -current &lt;current build id. The value used in the &quot;build&quot;
+key in the eclipse.perf.config system property.&gt;<br> -config &lt;a comma-separated
+list of names of configurations for which to produce results. The values used
+should be the same as values specified for the &quot;config&quot; key in the eclipse.perf.config
+system property.&gt;<br> -jvm &lt;jvm description. The value used in the &quot;jvm&quot;
+key in the eclipse.perf.config system property.&gt;<br> -output &lt;path to an
+output directory for fingerprints and scenarios for each configuration specified
+in -config parameter. Fingerprint gifs and html files are generated in the directory
+specified, configuration specific subdirectories are created to store scenario
+results and line graphs.&gt;</p></blockquote><p><br> Optional arguments:</p><blockquote>
+<p>-config.properties &lt;semi-colon separated list of: config, alternate config
+description. The value should be quoted if there are spaces in the value.&gt;<BR>of builds which match any prefix in this list. When omitted, a magenta line is draw on the graph which represents the baseline value specified in the -baseline parameter.&gt;<br> -highlight &lt;Comma-separated
+list of build Id prefixes(excluding 'I' and 'N'), which are used to add and highlight
+the most recent matching buildId on line graphs.&quot;&gt;<br> -scenario.pattern
+&lt;Scenario prefix pattern used to query performance results database. Can be
+used to generate results for a single component or subset of scenarios.&gt;<br>
+-fingerprints or -scenarioresults &lt;use one or the other to generate fingerprints
+or scenario results only. Not specifying either will execute both.&gt;<BR>-baseline.prefix &lt;semi-colon separated list of: build id prefixes used in eclipse.perf.assertAgainst property or eclipse.perf.config system property. Values used to generate a second line graph representing changes in repeated baseline test runs&gt;.<BR>-current.prefix &lt;semi-colon separated list of: build id prefixes used in eclipse.perf.config system property. Values here used to override default of &quot;N,I&quot;. Used to select build id's to include in main line graph.&gt;</p></blockquote>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/Fingerprints.js b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/Fingerprints.js
new file mode 100644
index 0000000..d1914e9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/Fingerprints.js
@@ -0,0 +1,32 @@
+function toggleFingerprints() {
+ var formSelect=document.forms[0].elements[0];
+ var type=formSelect.selectedIndex;
+ var idx=document.URL.indexOf("php?");
+ if (idx==-1) {
+ window.open(document.URL+"?fp_type="+type, "_self");
+ } else {
+ window.open(document.URL.substring(0,idx)+"php?fp_type="+type, "_self");
+ }
+}
+
+function setFingerprintsType() {
+ var idx=document.URL.indexOf("?");
+ var type=0;
+ if (idx != -1) {
+ var typeStr=document.URL.substring(idx+1, document.URL.length);
+ idx=typeStr.indexOf("=");
+ if (idx != -1) {
+ var ch=typeStr.substring(idx+1, idx+2)
+ switch (ch) {
+ case '1':
+ type=1;
+ break;
+ case '2':
+ type=2;
+ break;
+ }
+ }
+ }
+ var formSelect=document.forms[0].elements[0];
+ formSelect.selectedIndex=type;
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.css b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.css
new file mode 100644
index 0000000..d9114d2
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.css
@@ -0,0 +1,34 @@
+
+.hidden_tooltip {
+ display:none;
+}
+
+span.visible_tooltip {
+ display:block;
+ position:absolute;
+ top:10px;
+ left:21px;
+ width:300px;
+ font-size:9px;;
+ padding-left:5px;
+ padding-right:5px;
+ border:1px solid black;
+ background-color:#FFFFCC;
+ text-decoration:none;
+ color:#000000;
+ z-index:10;
+}
+
+a{
+ text-decoration:none;
+}
+span {
+z-index=100;
+}
+img, table{
+z-index:1;
+}
+
+.tooltipSource {
+ position:relative;
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.js b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.js
new file mode 100644
index 0000000..98008cc
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/ToolTip.js
@@ -0,0 +1,23 @@
+// General purpose functions.
+
+function hide_element(elementId) {
+ element = document.getElementById(elementId);
+ if(element != null) {
+ currentClass = element.className;
+ if(currentClass =='visible_tooltip') {
+ element.className = 'hidden_tooltip';
+ }
+ }
+}
+
+function show_element(elementId) {
+ element = document.getElementById(elementId);
+ if(element != null) {
+ currentClass = element.className;
+ if(currentClass == 'hidden_tooltip') {
+ element.className = 'visible_tooltip';
+ }
+ }
+}
+
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults
new file mode 100644
index 0000000..8dfb7de
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults
@@ -0,0 +1,7 @@
+# !/bin/sh
+
+#export dbloc=net://minsky.ottawa.ibm.com
+#required when running on Linux Motif
+export LD_LIBRARY_PATH=./../../..
+
+java -Declipse.perf.dbloc=$dbloc -jar ./../../../plugins/org.eclipse.equinox.launcher.jar -application org.eclipse.test.performance.ui.resultGenerator $*
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults.bat b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults.bat
new file mode 100644
index 0000000..fcc1b37
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/genresults.bat
@@ -0,0 +1,6 @@
+@echo off
+
+REM set dbloc=net://minsky.ottawa.ibm.com
+
+java -Declipse.perf.dbloc=%dbloc% -jar .\..\..\..\plugins\org.eclipse.equinox.launcher.jar -application org.eclipse.test.performance.ui.resultGenerator %*
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/plugin.xml.template b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/plugin.xml.template
new file mode 100644
index 0000000..cf91a73
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/plugin.xml.template
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin
+ id="Cloudscape"
+ name="Cloudscape"
+ version="1.0.0">
+
+ <runtime>
+ <library name="db2jcc.jar">
+ <export name="*"/>
+ </library>
+ <library name="db2jcc_license_c.jar">
+ <export name="*"/>
+ </library>
+ <library name="cstools.jar">
+ <export name="*"/>
+ </library>
+ <library name="csnet.jar">
+ <export name="*"/>
+ </library>
+ <library name="cs.jar">
+ <export name="*"/>
+ </library>
+ </runtime>
+ <requires>
+ <import plugin="org.eclipse.osgi"/>
+ </requires>
+</plugin>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/results.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/results.properties
new file mode 100644
index 0000000..979c6bf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/scripts/results.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2005, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+args=\
+-baseline 3.0_200406251208_200505301645 \
+-baseline.prefix 3.0_ \
+-highlight 3.0.2_,2.1.3_,3.1M6_,3.1M7_ ,3.1RC1 \
+-current 3.1RC1_200505271300_200505301912 \
+-jvm sun1.4.2_08 \
+-output d:/m7perf \
+-config eclipseperfwin2 \
+-config.properties "eclipseperfwin1,Win XP Sun 1.4.2_08 (2 GHz 512 MB),win,d:/m7perf/win;eclipseperflnx1,RHEL 3.0 Sun 1.4.2_08 (2 GHz 512 MB),linux,d:/m7perf/linux;eclipseperfwin2,Win XP Sun 1.4.2_08 (3 GHz 2 GB),win2,d:/m7perf/win2;eclipseperflnx2,RHEL 3.0 Sun 1.4.2_08 (3 GHz 2 GB),linux2,d:/m7perf/linux2" \
+-scenario.pattern org.eclipse.ant
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/AbstractResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/AbstractResults.java
new file mode 100644
index 0000000..679bf42
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/AbstractResults.java
@@ -0,0 +1,255 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+
+/**
+ * Abstract class to store performance results.
+ *
+ * Each results gives access to specific children depending on model.
+ */
+public abstract class AbstractResults implements Comparable {
+
+ public static final double[] INVALID_RESULTS = new double[] {2};
+ public static final double[] NO_BUILD_RESULTS = new double[0];
+ public static final int BUILD_VALUE_INDEX = 0;
+ public static final int BASELINE_VALUE_INDEX = 1;
+ public static final int DELTA_VALUE_INDEX = 2;
+ public static final int DELTA_ERROR_INDEX = 3;
+ public static final int BUILD_ERROR_INDEX = 4;
+ public static final int BASELINE_ERROR_INDEX = 5;
+ public static final int NUMBERS_LENGTH = 6;
+
+ AbstractResults parent;
+ int id = -1;
+ String name;
+ List children;
+ private static boolean NEW_LINE = true;
+ PrintStream printStream = null;
+
+AbstractResults(AbstractResults parent, String name) {
+ this.parent = parent;
+ this.children = new ArrayList();
+ this.name = name;
+}
+
+AbstractResults(AbstractResults parent, int id) {
+ this.parent = parent;
+ this.children = new ArrayList();
+ this.id = id;
+}
+
+/*
+ * Add a child to current results, using specific sort
+ * order if specified.
+ */
+void addChild(Comparable child, boolean sort) {
+ if (sort) {
+ int size = this.children.size();
+ for (int i=0; i<size; i++) {
+ Object results = this.children.get(i);
+ if (child.compareTo(results) < 0) {
+ this.children.add(i, child);
+ return;
+ }
+ }
+ }
+ this.children.add(child);
+}
+
+/**
+ * Compare the results to the given one using the name.
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+public int compareTo(Object obj) {
+ if (obj instanceof AbstractResults) {
+ AbstractResults res = (AbstractResults) obj;
+ return getName().compareTo(res.getName());
+ }
+ return -1;
+}
+
+/**
+ * Returns whether two results are equals using the name
+ * to compare them.
+ *
+ * @param obj The results to compare with
+ * @return <code>true</code> if the name are equals,
+ * <code>false</code> otherwise
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+public boolean equals(Object obj) {
+ if (obj instanceof AbstractResults) {
+ return this.name.equals(((AbstractResults)obj).getName());
+ }
+ return super.equals(obj);
+}
+
+/**
+ * Return an array built on the current results children list.
+ *
+ * @return An array of the children list
+ */
+public AbstractResults[] getChildren() {
+ AbstractResults[] elements = new AbstractResults[size()];
+ this.children.toArray(elements);
+ return elements;
+}
+
+ComponentResults getComponentResults() {
+ if (this.parent != null) {
+ return this.parent.getComponentResults();
+ }
+ return null;
+}
+
+int getId() {
+ return this.id;
+}
+
+/**
+ * Returns the name of the results object.
+ *
+ * @return The name of the results
+ */
+public String getName() {
+ return this.name;
+}
+
+/**
+ * Returns the parent
+ *
+ * @return The parent
+ */
+public AbstractResults getParent() {
+ return this.parent;
+}
+
+PerformanceResults getPerformance() {
+ if (this.parent != null) {
+ return this.parent.getPerformance();
+ }
+ return null;
+}
+
+String getPath() {
+ String path = this.parent==null || this.parent.parent==null ? "" : this.parent.getPath() + ">"; //$NON-NLS-1$ //$NON-NLS-2$
+ return path+this.name;
+}
+
+/**
+ * Return the children list of the current results.
+ *
+ * @return An iterator on the children list
+ */
+public Iterator getResults() {
+ return this.children.iterator();
+}
+
+AbstractResults getResults(String resultName) {
+ int size = this.children.size();
+ for (int i=0; i<size; i++) {
+ AbstractResults searchedResults = (AbstractResults) this.children.get(i);
+ if (searchedResults.getName().equals(resultName)) {
+ return searchedResults;
+ }
+ }
+ return null;
+}
+
+AbstractResults getResults(int searchedId) {
+ int size = this.children.size();
+ for (int i=0; i<size; i++) {
+ AbstractResults searchedResults = (AbstractResults) this.children.get(i);
+ if (searchedResults.id == searchedId) {
+ return searchedResults;
+ }
+ }
+ return null;
+}
+
+public int hashCode() {
+ return this.name.hashCode();
+}
+
+void printTab() {
+ if (this.parent != null) {
+ if (this.printStream != null) this.printStream.print("\t"); //$NON-NLS-1$
+ this.parent.printTab();
+ }
+}
+void print(String text) {
+ if (this.printStream != null) {
+ if (NEW_LINE) printTab();
+ this.printStream.print(text);
+ NEW_LINE = false;
+ }
+}
+
+void printGlobalTime(long start) {
+ printGlobalTime(start, null);
+}
+
+void printGlobalTime(long start, String end) {
+ long time = System.currentTimeMillis();
+ String resultsName = getName();
+ StringBuffer buffer;
+ if (resultsName == null) {
+ buffer = new StringBuffer(" => time spent was "); //$NON-NLS-1$
+ } else {
+ buffer = new StringBuffer(" => time spent in '"); //$NON-NLS-1$
+ buffer.append(resultsName);
+ buffer.append("' was "); //$NON-NLS-1$
+ }
+ buffer.append(Util.timeString(time-start));
+ if (end != null) {
+ buffer.append(". "); //$NON-NLS-1$
+ buffer.append(end.trim());
+ }
+ println(buffer);
+}
+
+void println() {
+ if (this.printStream != null) {
+ this.printStream.println();
+ NEW_LINE = true;
+ }
+}
+
+void println(String text) {
+ if (this.printStream != null) {
+ if (NEW_LINE) printTab();
+ this.printStream.println(text);
+ NEW_LINE = true;
+ }
+}
+
+void println(StringBuffer buffer) {
+ println(buffer.toString());
+}
+
+public int size() {
+ return this.children == null ? 0 : this.children.size();
+}
+
+public String toString() {
+ return getPath();
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/BuildResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/BuildResults.java
new file mode 100644
index 0000000..21e3021
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/BuildResults.java
@@ -0,0 +1,588 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.StringTokenizer;
+
+import org.eclipse.test.internal.performance.InternalPerformanceMeter;
+import org.eclipse.test.internal.performance.PerformanceTestPlugin;
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Class providing numbers of a scenario running on a specific configuration
+ * at a specific time (for example 'I20070615-1200').
+ */
+public class BuildResults extends AbstractResults {
+
+ private static final double IMPOSSIBLE_VALUE = -1E6;
+
+ // Build information
+ String date;
+ String comment;
+ int summaryKind = -1;
+
+ // Dimensions information
+ Dim[] dimensions;
+ double[] average, stddev;
+ long[] count;
+ double[][] values;
+ boolean hadValues = false;
+ private int defaultDimIndex = -1;
+
+ // Comparison information
+ boolean baseline;
+ String failure;
+
+BuildResults(AbstractResults parent) {
+ super(parent, -1);
+}
+
+BuildResults(AbstractResults parent, int id) {
+ super(parent, id);
+ this.name = DB_Results.getBuildName(id);
+ this.baseline = this.name.startsWith(DB_Results.getDbBaselinePrefix());
+}
+
+/*
+ * Clean values when several measures has been done for the same build.
+ */
+void cleanValues() {
+ int length = this.values.length;
+ for (int dim_id=0; dim_id<length; dim_id++) {
+ int vLength = this.values[dim_id].length;
+ /* Log clean operation
+ if (dim_id == 0) {
+ IStatus status = new Status(IStatus.WARNING, PerformanceTestPlugin.PLUGIN_ID, "Clean "+vLength+" values for "+this.parent+">"+this.name+" ("+this.count[dim_id]+" measures)..."); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$ //$NON-NLS-5$
+ PerformanceTestPlugin.log(status);
+ }
+ */
+ this.average[dim_id] = 0;
+ for (int i=0; i<vLength; i++) {
+ this.average[dim_id] += this.values[dim_id][i];
+ }
+ this.average[dim_id] /= vLength;
+ double squaredDeviations= 0;
+ for (int i=0; i<vLength; i++) {
+ double deviation= this.average[dim_id] - this.values[dim_id][i];
+ squaredDeviations += deviation * deviation;
+ }
+ this.stddev[dim_id] = Math.sqrt(squaredDeviations / (this.count[dim_id] - 1)); // unbiased sample stdev
+ this.values[dim_id] = null;
+ }
+ for (int i=0; i<length; i++) {
+ if (this.values[i] != null) {
+ return;
+ }
+ }
+ this.values = null;
+ this.hadValues = true;
+}
+
+/**
+ * Compare build results using the date of the build.
+ *
+ * @see Comparable#compareTo(Object)
+ */
+public int compareTo(Object obj) {
+ if (obj instanceof BuildResults) {
+ BuildResults res = (BuildResults) obj;
+ return getDate().compareTo(res.getDate());
+ }
+ return -1;
+}
+
+/**
+ * Returns the most recent baseline build results.
+ *
+ * @return The {@link BuildResults baseline build results}.
+ * @see BuildResults
+ */
+public BuildResults getBaselineBuildResults() {
+ return ((ConfigResults)this.parent).getBaselineBuildResults();
+}
+
+/**
+ * Returns the comment associated with the scenario for the current build.
+ *
+ * @return The comment associated with the scenario for the current build
+ * or <code>null</code> if no comment was stored for it.
+ */
+public String getComment() {
+ return this.comment;
+}
+
+/**
+ * Return the number of stored values for the default dimension
+ *
+ * @return the number of stored values for the default dimension
+ */
+public long getCount() {
+ if (this.defaultDimIndex < 0) {
+ this.defaultDimIndex = DB_Results.getDefaultDimensionIndex();
+ }
+ return this.count[this.defaultDimIndex];
+}
+
+/**
+ * Return the number of stored values for the given dimension.
+ *
+ * @param dim_id The id of the dimension (see {@link Dim#getId()})
+ * @return the number of stored values for the given dimension
+ *
+ */
+public long getCount(int dim_id) {
+ return this.count[getDimIndex(dim_id)];
+}
+
+/**
+ * Returns the date of the build which is a part of its name.
+ *
+ * @return The date of the build as yyyyMMddHHmm
+ */
+public String getDate() {
+ if (this.date == null) {
+ if (this.baseline) {
+ int length = this.name.length();
+ this.date = this.name.substring(length-12, length);
+ } else {
+ char first = this.name.charAt(0);
+ if (first == 'N' || first == 'I' || first == 'M') { // TODO (frederic) should be buildIdPrefixes...
+ if (this.name.length() == 14) {
+ this.date = this.name.substring(1, 9)+this.name.substring(10, 14);
+ } else {
+ this.date = this.name.substring(1);
+ }
+ } else {
+ int length = this.name.length() - 12 /* length of date */;
+ for (int i=0; i<=length; i++) {
+ try {
+ String substring = i == 0 ? this.name : this.name.substring(i);
+ Util.DATE_FORMAT.parse(substring);
+ this.date = substring; // if no exception is raised then the substring has a correct date format => store it
+ break;
+ } catch(ParseException ex) {
+ // skip
+ }
+ }
+ }
+ }
+ }
+ return this.date;
+}
+
+/**
+ * Returns the standard deviation of the default dimension computed
+ * while running the scenario for the current build.
+ *
+ * @return The value of the standard deviation
+ */
+public double getDeviation() {
+ if (this.defaultDimIndex < 0) {
+ this.defaultDimIndex = DB_Results.getDefaultDimensionIndex();
+ }
+ return this.stddev[this.defaultDimIndex];
+}
+
+/**
+ * Returns the standard deviation of the given dimension computed
+ * while running the scenario for the current build.
+ *
+ * @param dim_id The id of the dimension (see {@link Dim#getId()})
+ * @return The value of the standard deviation
+ */
+public double getDeviation(int dim_id) {
+ final int dimIndex = getDimIndex(dim_id);
+ return dimIndex < 0 ? 0 : this.stddev[dimIndex];
+}
+
+/**
+ * Returns the dimensions supported for the current build.
+ *
+ * @return An array of dimensions.
+ */
+public Dim[] getDimensions() {
+ return this.dimensions;
+}
+
+/**
+ * Returns the kind of summary for the scenario of the current build.
+ *
+ * @return -1 if the scenario has no summary, 1 if it's a global summary, 0 otherwise.
+ */
+public int getSummaryKind() {
+ return this.summaryKind;
+}
+
+/**
+ * Returns whether the current build had several values stored in database.
+ *
+ * @return <code>true</code> if the measure was committed several times,
+ * <code>false</code> otherwise.
+ */
+public boolean hadValues() {
+ return this.hadValues;
+}
+
+/*
+ * Return the index of the dimension corresponding to the given
+ * dimension id (see {@link Dim#getId()})
+ */
+int getDimIndex(int dim_id) {
+ if (this.dimensions == null) return -1;
+ int length = this.dimensions.length;
+ for (int i=0; i<length; i++) {
+ if (this.dimensions[i] == null) break;
+ if (this.dimensions[i].getId() == dim_id) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Return the error computed while storing values for the default dimension
+ *
+ * @return the error of the measures stored for the default dimension
+ */
+public double getError() {
+ long n = getCount();
+ if (n == 1) return Double.NaN;
+ return getDeviation() / Math.sqrt(n);
+}
+
+/**
+ * Return the error computed while storing values for the given dimension.
+ *
+ * @param dim_id The id of the dimension (see {@link Dim#getId()})
+ * @return the error of the measures stored for the given dimension
+ */
+public double getError(int dim_id) {
+ long n = getCount(dim_id);
+ if (n == 1) return Double.NaN;
+ return getDeviation(dim_id) / Math.sqrt(n);
+}
+
+/**
+ * Return the failure message which may happened on this scenario
+ * while running the current build
+ *
+ * @return The failure message or <code>null</null> if the scenario passed.
+ */
+public String getFailure() {
+ return this.failure;
+}
+
+/**
+ * Return the value of the performance result stored
+ * for the given dimension of the current build.
+ *
+ * @param dim_id The id of the dimension (see {@link Dim#getId()})
+ * @return The value of the performance result
+ */
+public double getValue(int dim_id) {
+ int idx = getDimIndex(dim_id);
+ if (idx < 0) return Double.NaN;
+ return this.average[idx];
+}
+
+/**
+ * Return the value of the performance result stored
+ * for the default dimension of the current build.
+ *
+ * @return The value of the performance result
+ */
+public double getValue() {
+ if (this.defaultDimIndex < 0) {
+ this.defaultDimIndex = DB_Results.getDefaultDimensionIndex();
+ }
+ return this.average[this.defaultDimIndex];
+}
+
+/**
+ * Returns whether the build is a baseline build or not.
+ *
+ * @return <code>true</code> if the build name starts with the baseline prefix
+ * (see {@link PerformanceResults#getBaselinePrefix()} or <code>false</code>
+ * otherwise.
+ */
+public boolean isBaseline() {
+ return this.baseline;
+}
+
+/**
+ * Returns whether the build has a summary or not. Note that the summary
+ * may be global or not.
+ *
+ * @return <code>true</code> if the summary kind is equals to 0 or 1
+ * <code>false</code> otherwise.
+ */
+public boolean hasSummary() {
+ return this.summaryKind >= 0;
+}
+/**
+ * Returns whether the build has a global summary or not.
+ *
+ * @return <code>true</code> if the summary kind is equals to 1
+ * <code>false</code> otherwise.
+ */
+public boolean hasGlobalSummary() {
+ return this.summaryKind == 1;
+}
+
+/*
+ * Returns a given pattern match the build name or not.
+ */
+boolean match(String pattern) {
+ if (pattern.equals("*")) return true; //$NON-NLS-1$
+ if (pattern.indexOf('*') < 0 && pattern.indexOf('?') < 0) {
+ pattern += "*"; //$NON-NLS-1$
+ }
+ StringTokenizer tokenizer = new StringTokenizer(pattern, "*?", true); //$NON-NLS-1$
+ int start = 0;
+ String previous = ""; //$NON-NLS-1$
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (!token.equals("*") && !token.equals("?")) { //$NON-NLS-1$ //$NON-NLS-2$
+ if (previous.equals("*")) { //$NON-NLS-1$
+ int idx = this.name.substring(start).indexOf(token);
+ if (idx < 0) return false;
+ start += idx;
+ } else {
+ if (previous.equals("?")) start++; //$NON-NLS-1$
+ if (!this.name.substring(start).startsWith(token)) return false;
+ }
+ start += token.length();
+ }
+ previous = token;
+ }
+ if (previous.equals("*")) { //$NON-NLS-1$
+ return true;
+ } else if (previous.equals("?")) { //$NON-NLS-1$
+ return this.name.length() == start;
+ }
+ return this.name.endsWith(previous);
+}
+
+/*
+ * Read the build results data from the given stream.
+ */
+void readData(DataInputStream stream) throws IOException {
+ long timeBuild = stream.readLong();
+ this.date = new Long(timeBuild).toString();
+ byte kind = stream.readByte();
+ this.baseline = kind == 0;
+ if (this.baseline) {
+ this.name = getPerformance().baselinePrefix + '_' + this.date;
+ } else {
+ String suffix = this.date.substring(0, 8) + '-' + this.date.substring(8);
+ switch (kind) {
+ case 1:
+ this.name = "N" + suffix; //$NON-NLS-1$
+ break;
+ case 2:
+ this.name = "I" + suffix; //$NON-NLS-1$
+ break;
+ case 3:
+ this.name = "M" + suffix; //$NON-NLS-1$
+ break;
+ default:
+ this.name = stream.readUTF();
+ break;
+ }
+ }
+ int length = stream.readInt();
+ this.dimensions = new Dim[length];
+ this.average = new double[length];
+ this.stddev = new double[length];
+ this.count = new long[length];
+ for (int i=0; i<length; i++) {
+ int dimId = stream.readInt();
+ DB_Results.storeDimension(dimId);
+ this.dimensions[i] = (Dim) PerformanceTestPlugin.getDimension(dimId);
+ this.average[i] = stream.readLong();
+ this.count[i] = stream.readLong();
+ this.stddev[i] = stream.readDouble();
+ }
+ this.id = DB_Results.getBuildId(this.name);
+
+ // read summary
+ this.summaryKind = stream.readInt();
+
+ // read comment
+ String str = stream.readUTF();
+ if (str.length() > 0) {
+ this.comment = str;
+ }
+}
+
+/*
+ * Set the build summary and its associated comment.
+ */
+void setComment(String comment) {
+ if (comment != null && this.comment == null) {
+ this.comment = comment;
+ }
+}
+
+/*
+ * Set the build summary and its associated comment.
+ */
+void setSummary(int kind, String comment) {
+ this.comment = comment;
+ this.summaryKind = kind;
+}
+
+/*
+ * Set the build failure.
+ */
+void setFailure(String failure) {
+ this.failure = failure;
+}
+
+/*
+ * Set the build value from database information.
+ */
+void setValue(int dim_id, int step, long value) {
+ int length = DB_Results.getDimensions().length;
+ Dim dimension = (Dim) PerformanceTestPlugin.getDimension(dim_id);
+ int idx = 0;
+ if (this.dimensions == null){
+ this.dimensions = new Dim[length];
+ this.average = new double[length];
+ this.stddev = new double[length];
+ this.count = new long[length];
+ this.dimensions[0] = dimension;
+ for (int i=0; i<length; i++) {
+ // init average numbers with an impossible value
+ // to clearly identify whether it's already set or not
+ // when several measures are made for the same build
+ this.average[i] = IMPOSSIBLE_VALUE;
+ }
+ } else {
+ length = this.dimensions.length;
+ for (int i=0; i<length; i++) {
+ if (this.dimensions[i] == null) {
+ this.dimensions[i] = dimension;
+ idx = i;
+ break;
+ }
+ if (this.dimensions[i].getId() == dim_id) {
+ idx = i;
+ break;
+ }
+ }
+ }
+ switch (step) {
+ case InternalPerformanceMeter.AVERAGE:
+ if (this.average[idx] != IMPOSSIBLE_VALUE) {
+ if (this.values == null) {
+ this.values = new double[length][];
+ this.values[idx] = new double[2];
+ this.values[idx][0] = this.average[idx];
+ this.values[idx][1] = value;
+ this.average[idx] = IMPOSSIBLE_VALUE;
+ } else if (this.values[idx] == null) {
+ this.values[idx] = new double[2];
+ this.values[idx][0] = this.average[idx];
+ this.values[idx][1] = value;
+ this.average[idx] = IMPOSSIBLE_VALUE;
+ }
+ } else if (this.values != null && this.values[idx] != null) {
+ int vLength = this.values[idx].length;
+ System.arraycopy(this.values[idx], 0, this.values[idx] = new double[vLength+1], 0, vLength);
+ this.values[idx][vLength] = value;
+ } else {
+ this.average[idx] = value;
+ }
+ break;
+ case InternalPerformanceMeter.STDEV:
+ this.stddev[idx] += Double.longBitsToDouble(value);
+ break;
+ case InternalPerformanceMeter.SIZE:
+ this.count[idx] += value;
+ break;
+ }
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.AbstractResults#toString()
+ */
+public String toString() {
+ StringBuffer buffer = new StringBuffer(this.name);
+ buffer.append(": "); //$NON-NLS-1$
+ int length = this.dimensions.length;
+ for (int i=0; i<length; i++) {
+ if (i>0) buffer.append(", "); //$NON-NLS-1$
+ buffer.append('[');
+ buffer.append(this.dimensions[i].getId());
+ buffer.append("]="); //$NON-NLS-1$
+ buffer.append(this.average[i]);
+ buffer.append('/');
+ buffer.append(this.count[i]);
+ buffer.append('/');
+ buffer.append(Math.round(this.stddev[i]*1000)/1000.0);
+ }
+ return buffer.toString();
+}
+
+/*
+ * Write the build results data in the given stream.
+ */
+void write(DataOutputStream stream) throws IOException {
+ long timeBuild = -1;
+ try {
+ timeBuild = Long.parseLong(getDate());
+ } catch (NumberFormatException nfe) {
+ // do nothing
+ nfe.printStackTrace();
+ }
+ stream.writeLong(timeBuild);
+ byte kind = 0; // baseline
+ if (!this.baseline) {
+ switch (this.name.charAt(0)) {
+ case 'N':
+ kind = 1;
+ break;
+ case 'I':
+ kind = 2;
+ break;
+ case 'M':
+ kind = 3;
+ break;
+ default:
+ kind = 4;
+ break;
+ }
+ }
+ stream.writeByte(kind);
+ if (kind == 4) {
+ stream.writeUTF(this.name);
+ }
+ int length = this.dimensions == null ? 0 : this.dimensions.length;
+ stream.writeInt(length);
+ for (int i=0; i<length; i++) {
+ stream.writeInt(this.dimensions[i].getId());
+ stream.writeLong((long)this.average[i]) ;
+ stream.writeLong(this.count[i]);
+ stream.writeDouble(this.stddev[i]);
+ }
+
+ // Write extra infos (summary, failure and comment)
+ stream.writeInt(this.summaryKind);
+ stream.writeUTF(this.comment == null ? "" : this.comment) ; //$NON-NLS-1$
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ComponentResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ComponentResults.java
new file mode 100644
index 0000000..ca3e7fb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ComponentResults.java
@@ -0,0 +1,445 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Class to handle performance results of an eclipse component
+ * (for example 'org.eclipse.jdt.core').
+ *
+ * It gives access to results for each scenario run for this component.
+ *
+ * @see ScenarioResults
+ */
+public class ComponentResults extends AbstractResults {
+
+public ComponentResults(AbstractResults parent, String name) {
+ super(parent, name);
+ this.printStream = parent.printStream;
+}
+
+Set getAllBuildNames() {
+ Set buildNames = new HashSet();
+ int size = size();
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) this.children.get(i);
+ Set builds = scenarioResults.getAllBuildNames();
+ buildNames.addAll(builds);
+ }
+ return buildNames;
+}
+
+/**
+ * Return all the build names for this component sorted by ascending order.
+ *
+ * @return An array of names
+ */
+public String[] getAllSortedBuildNames() {
+ return getAllSortedBuildNames(false/*ascending order*/);
+}
+
+String[] getAllSortedBuildNames(final boolean reverse) {
+ Set allBuildNames = getAllBuildNames();
+ String[] sortedNames = new String[allBuildNames.size()];
+ allBuildNames.toArray(sortedNames);
+ Arrays.sort(sortedNames, new Comparator() {
+ public int compare(Object o1, Object o2) {
+ String s1 = (String) (reverse ? o2 : o1);
+ String s2 = (String) (reverse ? o1 : o2);
+ return Util.getBuildDate(s1).compareTo(Util.getBuildDate(s2));
+ }
+ });
+ return sortedNames;
+}
+
+ComponentResults getComponentResults() {
+ return this;
+}
+
+/**
+ * Get all results numbers for a given machine of the current component.
+ *
+ * @param configName The name of the configuration to get numbers
+ * @param fingerprints Set whether only fingerprints scenario should be taken into account
+ * @return A list of lines. Each line represent a build and is a list of either strings or values.
+ * Values are an array of double:
+ * <ul>
+ * <li>{@link #BUILD_VALUE_INDEX}: the build value in milliseconds</li>
+ * <li>{@link #BASELINE_VALUE_INDEX}: the baseline value in milliseconds</li>
+ * <li>{@link #DELTA_VALUE_INDEX}: the difference between the build value and its more recent baseline</li>
+ * <li>{@link #DELTA_ERROR_INDEX}: the error made while computing the difference</li>
+ * <li>{@link #BUILD_ERROR_INDEX}: the error made while measuring the build value</li>
+ * <li>{@link #BASELINE_ERROR_INDEX}: the error made while measuring the baseline value</li>
+ * </ul>
+*/
+public List getConfigNumbers(String configName, boolean fingerprints, List differences) {
+
+ // Initialize lists
+ AbstractResults[] scenarios = getChildren();
+ int length = scenarios.length;
+
+ // Print scenario names line
+ List firstLine = new ArrayList();
+ for (int i=0; i<length; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios[i];
+ if (!fingerprints || scenarioResults.hasSummary()) {
+ firstLine.add(scenarioResults.getName());
+ }
+ }
+
+ // Print each build line
+ String[] builds = getAllSortedBuildNames(true/*descending order*/);
+// int milestoneIndex = 0;
+// String milestoneDate = Util.getMilestoneDate(milestoneIndex);
+ String currentBuildName = null;
+ int buildsLength= builds.length;
+ firstLine.add(0, new Integer(buildsLength));
+ differences.add(firstLine);
+ for (int i=0; i<buildsLength; i++) {
+ List line = new ArrayList();
+ String buildName = builds[i];
+ line.add(buildName);
+ if (!buildName.startsWith(DB_Results.getDbBaselinePrefix())) {
+ for (int j=0; j<length; j++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios[j];
+ if (!fingerprints || scenarioResults.hasSummary()) {
+ ConfigResults configResults = scenarioResults.getConfigResults(configName);
+ BuildResults buildResults = configResults == null ? null : configResults.getBuildResults(buildName);
+ if (buildResults == null) {
+ // no result for this scenario in this build
+ line.add(NO_BUILD_RESULTS);
+ } else {
+ line.add(configResults.getNumbers(buildResults, configResults.getBaselineBuildResults(buildName)));
+ }
+ }
+ }
+ differences.add(line);
+ if (currentBuildName != null && currentBuildName.charAt(0) != 'N') {
+ }
+ currentBuildName = buildName;
+ }
+// if (milestoneDate != null) { // update previous builds
+// int dateComparison = milestoneDate.compareTo(Util.getBuildDate(buildName));
+// if (dateComparison <= 0) {
+// if (dateComparison == 0) {
+// }
+// if (++milestoneIndex == Util.MILESTONES.length) {
+// milestoneDate = null;
+// } else {
+// milestoneDate = Util.getMilestoneDate(milestoneIndex);
+// }
+// }
+// }
+ }
+
+ // Write differences lines
+ int last = buildsLength-1;
+ String lastBuildName = builds[last];
+ while (last > 0 && lastBuildName.startsWith(DB_Results.getDbBaselinePrefix())) {
+ lastBuildName = builds[--last];
+ }
+// appendDifferences(lastBuildName, configName, previousMilestoneName, differences, fingerprints);
+// appendDifferences(lastBuildName, configName, previousBuildName, differences, fingerprints);
+
+ // Return the computed differences
+ return differences;
+}
+
+/*
+double[] getConfigNumbers(BuildResults buildResults, BuildResults baselineResults) {
+ if (baselineResults == null) {
+ return INVALID_RESULTS;
+ }
+ double[] values = new double[NUMBERS_LENGTH];
+ for (int i=0 ;i<NUMBERS_LENGTH; i++) {
+ values[i] = Double.NaN;
+ }
+ double buildValue = buildResults.getValue();
+ values[BUILD_VALUE_INDEX] = buildValue;
+ double baselineValue = baselineResults.getValue();
+ values[BASELINE_VALUE_INDEX] = baselineValue;
+ double delta = (baselineValue - buildValue) / baselineValue;
+ values[DELTA_VALUE_INDEX] = delta;
+ if (Double.isNaN(delta)) {
+ return values;
+ }
+ long baselineCount = baselineResults.getCount();
+ long currentCount = buildResults.getCount();
+ if (baselineCount > 1 && currentCount > 1) {
+ double baselineError = baselineResults.getError();
+ double currentError = buildResults.getError();
+ values[BASELINE_ERROR_INDEX] = baselineError;
+ values[BUILD_ERROR_INDEX] = currentError;
+ values[DELTA_ERROR_INDEX] = Double.isNaN(baselineError)
+ ? currentError / baselineValue
+ : Math.sqrt(baselineError*baselineError + currentError*currentError) / baselineValue;
+ }
+ return values;
+}
+*/
+
+private ScenarioResults getScenarioResults(List scenarios, int searchedId) {
+ int size = scenarios.size();
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.get(i);
+ if (scenarioResults.id == searchedId) {
+ return scenarioResults;
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns a list of scenario results which have a summary
+ *
+ * @param global Indicates whether the summary must be global or not.
+ * @param config Configuration name
+ * @return A list of {@link ScenarioResults scenario results} which have a summary
+ */
+public List getSummaryScenarios(boolean global, String config) {
+ int size= size();
+ List scenarios = new ArrayList(size);
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) this.children.get(i);
+ ConfigResults configResults = scenarioResults.getConfigResults(config);
+ if (configResults != null) {
+ BuildResults buildResults = configResults.getCurrentBuildResults();
+ if ((global && buildResults.summaryKind == 1) || (!global && buildResults.summaryKind >= 0)) {
+ scenarios.add(scenarioResults);
+ }
+ }
+ }
+ return scenarios;
+}
+
+private String lastBuildName(int kind) {
+ String[] builds = getAllSortedBuildNames();
+ int idx = builds.length-1;
+ String lastBuildName = builds[idx--];
+ switch (kind) {
+ case 1: // no ref
+ while (lastBuildName.startsWith(DB_Results.getDbBaselinePrefix())) {
+ lastBuildName = builds[idx--];
+ }
+ break;
+ case 2: // only I-build or M-build
+ char ch = lastBuildName.charAt(0);
+ while (ch != 'I' && ch != 'M') {
+ lastBuildName = builds[idx--];
+ ch = lastBuildName.charAt(0);
+ }
+ break;
+ default:
+ break;
+ }
+ return lastBuildName;
+}
+
+/*
+ * Read local file contents and populate the results model with the collected
+ * information.
+ */
+String readLocalFile(File dir, List scenarios) throws FileNotFoundException {
+// if (!dir.exists()) return null;
+ File dataFile = new File(dir, getName()+".dat"); //$NON-NLS-1$
+ if (!dataFile.exists()) throw new FileNotFoundException();
+ DataInputStream stream = null;
+ try {
+ // Read local file info
+ stream = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
+ print(" - read local files info"); //$NON-NLS-1$
+ String lastBuildName = stream.readUTF(); // first string is the build name
+
+ // Next field is the number of scenarios for the component
+ int size = stream.readInt();
+
+ // Then follows all the scenario information
+ for (int i=0; i<size; i++) {
+ // ... which starts with the scenario id
+ int scenario_id = stream.readInt();
+ ScenarioResults scenarioResults = scenarios == null ? null : getScenarioResults(scenarios, scenario_id);
+ if (scenarioResults == null) {
+ // this can happen if scenario pattern does not cover all those stored in local data file
+ // hence, creates a fake scenario to read the numbers and skip to the next scenario
+ scenarioResults = new ScenarioResults(-1, null, null);
+// scenarioResults.parent = this;
+// scenarioResults.readData(stream);
+ // Should no longer occur as we get all scenarios from database now
+// throw new RuntimeException("Unexpected unfound scenario!"); //$NON-NLS-1$
+ }
+ scenarioResults.parent = this;
+ scenarioResults.printStream = this.printStream;
+ scenarioResults.readData(stream);
+ addChild(scenarioResults, true);
+ if (this.printStream != null) this.printStream.print('.');
+ }
+ println();
+ println(" => "+size+" scenarios data were read from file "+dataFile); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // Return last build name stored in the local files
+ return lastBuildName;
+ } catch (IOException ioe) {
+ println(" !!! "+dataFile+" should be deleted as it contained invalid data !!!"); //$NON-NLS-1$ //$NON-NLS-2$
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // nothing else to do!
+ }
+ }
+ return null;
+}
+
+/*
+ * Read the database values for a build name and a list of scenarios.
+ * The database is read only if the components does not already knows the
+ * given build (i.e. if it has not been already read) or if the force arguments is set.
+ */
+void updateBuild(String buildName, List scenarios, boolean force, File dataDir, SubMonitor subMonitor, PerformanceResults.RemainingTimeGuess timeGuess) {
+
+ // Read all variations
+ println("Component '"+this.name+"':"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // manage monitor
+ int size = scenarios.size();
+ subMonitor.setWorkRemaining(size+1);
+ StringBuffer buffer = new StringBuffer("Component "); //$NON-NLS-1$
+ buffer.append(this.name);
+ buffer.append("..."); //$NON-NLS-1$
+ String title = buffer.toString();
+ subMonitor.subTask(title+timeGuess.display());
+ timeGuess.count++;
+ subMonitor.worked(1);
+ if (subMonitor.isCanceled()) return;
+
+ // Read new values for the local result
+ boolean dirty = false;
+ long readTime = System.currentTimeMillis();
+ String log = " - read scenarios from DB:"; //$NON-NLS-1$
+ if (size > 0) {
+ for (int i=0; i<size; i++) {
+
+ // manage monitor
+ subMonitor.subTask(title+timeGuess.display());
+ timeGuess.count++;
+ if (log != null) {
+ println(log);
+ log = null;
+ }
+
+ // read results
+ ScenarioResults nextScenarioResults= (ScenarioResults) scenarios.get(i);
+ ScenarioResults scenarioResults = (ScenarioResults) getResults(nextScenarioResults.id);
+ if (scenarioResults == null) {
+ // Scenario is not known yet, force an update
+ scenarioResults = nextScenarioResults;
+ scenarioResults.parent = this;
+ scenarioResults.printStream = this.printStream;
+ scenarioResults.updateBuild(buildName, true);
+ dirty = true;
+ addChild(scenarioResults, true);
+ } else {
+ if (scenarioResults.updateBuild(buildName, force)) {
+ dirty = true;
+ }
+ }
+ if (dataDir != null && dirty && (System.currentTimeMillis() - readTime) > 300000) { // save every 5mn
+ writeData(buildName, dataDir, true, true);
+ dirty = false;
+ readTime = System.currentTimeMillis();
+ }
+
+ // manage monitor
+ subMonitor.worked(1);
+ if (subMonitor.isCanceled()) return;
+ }
+ }
+
+ // Write local files
+ if (dataDir != null) {
+ writeData(buildName, dataDir, false, dirty);
+ }
+
+ // Print global time
+ printGlobalTime(readTime);
+
+}
+
+/*
+ * Write the component results data to the file '<component name>.dat' in the given directory.
+ */
+void writeData(String buildName, File dir, boolean temp, boolean dirty) {
+// if (!dir.exists() && !dir.mkdirs()) {
+// System.err.println("can't create directory "+dir); //$NON-NLS-1$
+// }
+ File tmpFile = new File(dir, getName()+".tmp"); //$NON-NLS-1$
+ File dataFile = new File(dir, getName()+".dat"); //$NON-NLS-1$
+ if (!dirty) { // only possible on final write
+ if (tmpFile.exists()) {
+ if (dataFile.exists()) dataFile.delete();
+ tmpFile.renameTo(dataFile);
+ println(" => rename temporary file to "+dataFile); //$NON-NLS-1$
+ }
+ return;
+ }
+ if (tmpFile.exists()) {
+ tmpFile.delete();
+ }
+ File file;
+ if (temp) {
+ file = tmpFile;
+ } else {
+ if (dataFile.exists()) {
+ dataFile.delete();
+ }
+ file = dataFile;
+ }
+ try {
+ DataOutputStream stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
+ try {
+ int size = this.children.size();
+ stream.writeUTF(lastBuildName(0));
+ stream.writeInt(size);
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) this.children.get(i);
+ scenarioResults.write(stream);
+ }
+ }
+ finally {
+ stream.close();
+ println(" => extracted data "+(temp?"temporarily ":"")+"written in file "+file); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ } catch (FileNotFoundException e) {
+ System.err.println("can't create output file"+file); //$NON-NLS-1$
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ConfigResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ConfigResults.java
new file mode 100644
index 0000000..275555d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ConfigResults.java
@@ -0,0 +1,663 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.test.internal.performance.InternalDimensions;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Class to handle results for an Eclipse performance test box
+ * (called a <i>configuration</i>).
+ *
+ * It gives access to results for each build on which this configuration has been run.
+ *
+ * @see BuildResults
+ */
+public class ConfigResults extends AbstractResults {
+ BuildResults baseline, current;
+ boolean baselined = false, valid = false;
+ double delta, error;
+
+public ConfigResults(AbstractResults parent, int id) {
+ super(parent, id);
+ this.name = parent.getPerformance().sortedConfigNames[id];
+ this.printStream = parent.printStream;
+}
+
+/*
+ * Complete results with additional database information.
+ */
+void completeResults(String[] builds) {
+ /*if (this.baseline == null || this.current == null) */initialize();
+ ScenarioResults scenarioResults = (ScenarioResults) this.parent;
+ DB_Results.queryScenarioSummaries(scenarioResults, this.name, builds);
+}
+
+/**
+ * Returns the baseline build name used to compare results with.
+ *
+ * @return The name of the baseline build
+ * @see #getBaselineBuildResults()
+ */
+public String getBaselineBuildName() {
+ if (this.baseline == null) {
+ initialize();
+ }
+ return this.baseline.getName();
+}
+
+/**
+ * Returns the most recent baseline build results.
+ *
+ * @return The {@link BuildResults baseline build results}.
+ * @see BuildResults
+ */
+public BuildResults getBaselineBuildResults() {
+ if (this.baseline == null) {
+ initialize();
+ }
+ return this.baseline;
+}
+
+/**
+ * Return the baseline build results run just before the given build name.
+ *
+ * @param buildName The build name
+ * @return The {@link BuildResults baseline results} preceding the given build name
+ * or <code>null</code> if none was found.
+ */
+public BuildResults getBaselineBuildResults(String buildName) {
+ if (this.baseline == null) {
+ initialize();
+ }
+ int size = this.children.size();
+ String buildDate = Util.getBuildDate(buildName);
+ for (int i=size-1; i>=0; i--) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (buildResults.isBaseline() && buildResults.getDate().compareTo(buildDate) < 0) {
+ return buildResults;
+ }
+ }
+ return this.baseline;
+
+}
+
+/**
+ * Returns the most recent baseline build result value.
+ *
+ * @return The value of the most recent baseline build results.
+ */
+public double getBaselineBuildValue() {
+ if (this.baseline == null) {
+ initialize();
+ }
+ return this.baseline.getValue();
+}
+
+/**
+ * Returns the configuration description (currently the box name).
+ *
+ * @return The configuration description (currently the box name).
+ */
+public String getDescription() {
+ return getPerformance().sortedConfigDescriptions[this.id];
+}
+
+/**
+ * Return the results for the given build name.
+ *
+ * @param buildName The build name
+ * @return The {@link BuildResults results} for the given build name
+ * or <code>null</code> if none was found.
+ */
+public BuildResults getBuildResults(String buildName) {
+ return (BuildResults) getResults(buildName);
+}
+
+/**
+ * Returns the build results matching a given pattern.
+ *
+ * @param buildPattern The pattern of searched builds
+ * @return The list of the builds which names match the given pattern.
+ * The list is ordered by build results date.
+ */
+public List getBuilds(String buildPattern) {
+ List builds = new ArrayList();
+ int size = size();
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (buildPattern == null || buildResults.match(buildPattern)) {
+ builds.add(buildResults);
+ }
+ }
+ return builds;
+}
+
+/**
+ * Returns the build results before a given build name.
+ *
+ * @param buildName Name of the last build (included)
+ * @return The list of the builds which precedes the given build name.
+ */
+public List getBuildsBefore(String buildName) {
+ String buildDate = Util.getBuildDate(buildName);
+ List builds = new ArrayList();
+ int size = size();
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (buildName == null || buildResults.getDate().compareTo(buildDate) <= 0) {
+ builds.add(buildResults);
+ }
+ }
+ return builds;
+}
+
+/**
+ * Returns a list of build results which names starts with one of the given prefixes.
+ *
+ * @param prefixes List of expected prefixes
+ * @return A list of builds which names start with one of the given patterns.
+ */
+public List getBuildsMatchingPrefixes(List prefixes) {
+ List builds = new ArrayList();
+ int size = size();
+ int length = prefixes.size();
+ for (int i=0; i<size; i++) {
+ AbstractResults buildResults = (AbstractResults) this.children.get(i);
+ String buildName = buildResults.getName();
+ for (int j=0; j<length; j++) {
+ if (buildName.startsWith((String)prefixes.get(j))) {
+ builds.add(buildResults);
+ }
+ }
+ }
+ return builds;
+}
+
+/**
+ * Get all results numbers for the max last builds.
+ *
+ * @param max The number of last builds to get numbers.
+ * @return An 2 dimensions array of doubles. At the first level of the array each slot
+ * represents one build. That means that the dimension of the array matches
+ * the given numbers as soon as there are enough builds in the database.
+ * <p>
+ * The slots of the second level are the numbers values:
+ * <ul>
+ * <li>{@link #BUILD_VALUE_INDEX}: the build value in milliseconds</li>
+ * <li>{@link #BASELINE_VALUE_INDEX}: the baseline value in milliseconds</li>
+ * <li>{@link #DELTA_VALUE_INDEX}: the difference between the build value and its more recent baseline</li>
+ * <li>{@link #DELTA_ERROR_INDEX}: the error made while computing the difference</li>
+ * <li>{@link #BUILD_ERROR_INDEX}: the error made while measuring the build value</li>
+ * <li>{@link #BASELINE_ERROR_INDEX}: the error made while measuring the baseline value</li>
+ * </ul>
+*/
+public double[][] getLastNumbers(int max) {
+
+ // Return null if no previous builds are expected
+ if (max <= 0) return null;
+
+ // Add numbers for each previous build
+ int size = size();
+ double[][] numbers = new double[Math.min(max, size)][];
+ int n = 0;
+ for (int i=size-1; i>=0 && n<max; i--) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (!buildResults.isBaseline()) {
+ numbers[n] = getNumbers(buildResults, getBaselineBuildResults(buildResults.getName()));
+ n++;
+ }
+ }
+
+ // Return the numbers
+ return numbers;
+}
+
+/**
+ * Returns interesting numbers for the current configuration.
+ *
+ * @return Values in an array of double:
+ * <ul>
+ * <li>{@link AbstractResults#BUILD_VALUE_INDEX}: the build value in milliseconds</li>
+ * <li>{@link AbstractResults#BASELINE_VALUE_INDEX}: the baseline value in milliseconds</li>
+ * <li>{@link AbstractResults#DELTA_VALUE_INDEX}: the difference between the build value and its more recent baseline</li>
+ * <li>{@link AbstractResults#DELTA_ERROR_INDEX}: the error made while computing the difference</li>
+ * <li>{@link AbstractResults#BUILD_ERROR_INDEX}: the error made while measuring the build value</li>
+ * <li>{@link AbstractResults#BASELINE_ERROR_INDEX}: the error made while measuring the baseline value</li>
+ * </ul>
+ */
+double[] getNumbers(BuildResults buildResults, BuildResults baselineResults) {
+ if (baselineResults == null) {
+ return null;
+ }
+ double[] values = new double[NUMBERS_LENGTH];
+ for (int i=0 ;i<NUMBERS_LENGTH; i++) {
+ values[i] = Double.NaN;
+ }
+ double buildValue = buildResults.getValue();
+ values[BUILD_VALUE_INDEX] = buildValue;
+ double baselineValue = baselineResults.getValue();
+ values[BASELINE_VALUE_INDEX] = baselineValue;
+ double buildDelta = (baselineValue - buildValue) / baselineValue;
+ values[DELTA_VALUE_INDEX] = buildDelta;
+ if (Double.isNaN(buildDelta)) {
+ return values;
+ }
+ long baselineCount = baselineResults.getCount();
+ long currentCount = buildResults.getCount();
+ if (baselineCount > 1 && currentCount > 1) {
+ double baselineError = baselineResults.getError();
+ double currentError = buildResults.getError();
+ values[BASELINE_ERROR_INDEX] = baselineError;
+ values[BUILD_ERROR_INDEX] = currentError;
+ values[DELTA_ERROR_INDEX] = Double.isNaN(baselineError)
+ ? currentError / baselineValue
+ : Math.sqrt(baselineError*baselineError + currentError*currentError) / baselineValue;
+ }
+ return values;
+}
+
+/**
+ * Return the deviation value and its associated standard error for the default dimension
+ * (currently {@link InternalDimensions#ELAPSED_PROCESS}).
+ *
+ * @return an array of double. First number is the deviation itself and
+ * the second is the standard error.
+ */
+public double[] getCurrentBuildDeltaInfo() {
+ if (this.baseline == null || this.current == null) {
+ initialize();
+ }
+ return new double[] { this.delta, this.error };
+}
+
+/**
+ * Returns the error of the current build results
+ *
+ * @return the error made during the current build measure
+ */
+public double getCurrentBuildError() {
+ if (this.current == null) {
+ initialize();
+ }
+ return this.current.getError();
+}
+
+/**
+ * Returns the current build name.
+ *
+ * @return The name of the current build
+ * @see #getCurrentBuildResults()
+ */
+public String getCurrentBuildName() {
+ if (this.current == null) {
+ initialize();
+ }
+ return this.current.getName();
+}
+
+/**
+ * Returns the current build results.
+ * <p>
+ * This build is currently the last integration or nightly
+ * build which has performance results in the database.
+ * It may differ from the {@link PerformanceResults#getName()}.
+ *
+ * @return The current build results.
+ * @see BuildResults
+ */
+public BuildResults getCurrentBuildResults() {
+ if (this.current == null) {
+ initialize();
+ }
+ return this.current;
+}
+
+/**
+ * Returns the current build result value.
+ *
+ * @return The value of the current build results.
+ */
+public double getCurrentBuildValue() {
+ if (this.current == null) {
+ initialize();
+ }
+ return this.current.getValue();
+}
+
+/**
+ * Returns the delta between current and baseline builds results.
+ *
+ * @return the delta
+ */
+public double getDelta() {
+ if (this.baseline == null || this.current == null) {
+ initialize();
+ }
+ return this.delta;
+}
+
+/**
+ * Returns the standard error of the delta between current and baseline builds results.
+ *
+ * @return the delta
+ * @see #getDelta()
+ */
+public double getError() {
+ if (this.baseline == null || this.current == null) {
+ initialize();
+ }
+ return this.error;
+}
+
+/**
+ * Return the name of the machine associated with the current config.
+ *
+ * @return The name of the machine.
+ */
+public String getLabel() {
+ return this.parent.getPerformance().sortedConfigDescriptions[this.id];
+}
+
+/**
+ * Get all dimension builds default dimension statistics for all builds.
+ *
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+public double[] getStatistics() {
+ return getStatistics(Util.ALL_BUILD_PREFIXES, DB_Results.getDefaultDimension().getId());
+}
+
+/**
+ * Get all dimension builds default dimension statistics for a given list of build
+ * prefixes.
+ *
+ * @param prefixes List of prefixes to filter builds. If <code>null</code>
+ * then all the builds are taken to compute statistics.
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+public double[] getStatistics(List prefixes) {
+ return getStatistics(prefixes, DB_Results.getDefaultDimension().getId());
+}
+
+/**
+ * Get all dimension builds statistics for a given list of build prefixes
+ * and a given dimension.
+ *
+ * @param prefixes List of prefixes to filter builds. If <code>null</code>
+ * then all the builds are taken to compute statistics.
+ * @param dim_id The id of the dimension on which the statistics must be computed
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+public double[] getStatistics(List prefixes, int dim_id) {
+ int size = size();
+ int length = prefixes == null ? 0 : prefixes.size();
+ int count = 0;
+ double mean=0, stddev=0, variation=0;
+ double[] values = new double[size];
+ count = 0;
+ mean = 0.0;
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ String buildName = buildResults.getName();
+ if (isBuildConcerned(buildResults)) {
+ if (prefixes == null) {
+ double value = buildResults.getValue(dim_id);
+ values[count] = value;
+ mean += value;
+ count++;
+ } else {
+ for (int j=0; j<length; j++) {
+ if (buildName.startsWith((String)prefixes.get(j))) {
+ double value = buildResults.getValue(dim_id);
+ values[count] = value;
+ mean += value;
+ count++;
+ }
+ }
+ }
+ }
+ }
+ mean /= count;
+ for (int i=0; i<count; i++) {
+ stddev += Math.pow(values[i] - mean, 2);
+ }
+ stddev = Math.sqrt((stddev / (count - 1)));
+ variation = stddev / mean;
+ return new double[] { count, mean, stddev, variation };
+}
+
+private void initialize() {
+ reset();
+ // Get performance results builds name
+ PerformanceResults perfResults = getPerformance();
+ String baselineBuildName = perfResults.getBaselineName();
+ String baselineBuildDate = baselineBuildName == null ? null : Util.getBuildDate(baselineBuildName);
+ String currentBuildName = perfResults.name;
+ String currentBuildDate = currentBuildName == null ? null : Util.getBuildDate(currentBuildName);
+
+ // Set baseline and current builds
+ BuildResults lastBaseline = null;
+ int size = size();
+ if (size == 0) return;
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (buildResults.values != null) {
+ buildResults.cleanValues();
+ }
+ if (buildResults.isBaseline()) {
+ if (lastBaseline == null || baselineBuildDate == null || baselineBuildDate.compareTo(buildResults.getDate()) >= 0) {
+ lastBaseline = buildResults;
+ }
+ if (baselineBuildName != null && buildResults.getName().equals(baselineBuildName)) {
+ this.baseline = buildResults;
+ this.baselined = true;
+ }
+ } else if (currentBuildName == null || currentBuildDate == null || (this.current == null && buildResults.getDate().compareTo(currentBuildDate) >= 0)) {
+ this.current = buildResults;
+ this.valid = true;
+ }
+ }
+ if (this.baseline == null) {
+ this.baseline = (lastBaseline == null) ? (BuildResults) this.children.get(0) : lastBaseline;
+ }
+ if (this.current == null) {
+ int idx = size() - 1;
+ BuildResults previous = (BuildResults) this.children.get(idx--);
+ while (idx >= 0 && previous.isBaseline()) {
+ previous = (BuildResults) this.children.get(idx--);
+ }
+ this.current = previous;
+ }
+
+ // Set delta between current vs. baseline and the corresponding error
+ int dim_id = DB_Results.getDefaultDimension().getId();
+ double baselineValue = this.baseline.getValue();
+ double currentValue = this.current.getValue();
+ this.delta = (currentValue - baselineValue) / baselineValue;
+ if (Double.isNaN(this.delta)) {
+ this.error = Double.NaN;
+ } else {
+ long baselineCount = this.baseline.getCount(dim_id);
+ long currentCount = this.current.getCount(dim_id);
+ if (baselineCount == 1 || currentCount == 1) {
+ this.error = Double.NaN;
+ } else {
+ double baselineError = this.baseline.getError(dim_id);
+ double currentError = this.current.getError(dim_id);
+ this.error = Double.isNaN(baselineError)
+ ? currentError / baselineValue
+ : Math.sqrt(baselineError*baselineError + currentError*currentError) / baselineValue;
+ }
+ }
+
+ // Set the failure on the current build if necessary
+ int failure_threshold = getPerformance().failure_threshold;
+ if (this.delta >= (failure_threshold/100.0)) {
+ StringBuffer buffer = new StringBuffer("Performance criteria not met when compared to '"); //$NON-NLS-1$
+ buffer.append(this.baseline.getName());
+ buffer.append("': "); //$NON-NLS-1$
+ buffer.append(DB_Results.getDefaultDimension().getName());
+ buffer.append("= "); //$NON-NLS-1$
+ buffer.append(Util.timeString((long)this.current.getValue()));
+ buffer.append(" is not within [0%, "); //$NON-NLS-1$
+ buffer.append(100+failure_threshold);
+ buffer.append("'%] of "); //$NON-NLS-1$
+ buffer.append(Util.timeString((long)this.baseline.getValue()));
+ this.current.setFailure(buffer.toString());
+ }
+}
+
+/**
+ * Returns whether the configuration has results for the performance
+ * baseline build or not.
+ *
+ * @return <code>true</code> if the configuration has results
+ * for the performance baseline build, <code>false</code> otherwise.
+ */
+public boolean isBaselined() {
+ if (this.baseline == null || this.current == null) {
+ initialize();
+ }
+ return this.baselined;
+}
+
+boolean isBuildConcerned(BuildResults buildResults) {
+ String buildDate = buildResults.getDate();
+ String currentBuildDate = getCurrentBuildResults() == null ? null : getCurrentBuildResults().getDate();
+ String baselineBuildDate = getBaselineBuildResults() == null ? null : getBaselineBuildResults().getDate();
+ return ((currentBuildDate == null || buildDate.compareTo(currentBuildDate) <= 0) &&
+ (baselineBuildDate == null || buildDate.compareTo(baselineBuildDate) <= 0));
+}
+/**
+ * Returns whether the configuration has results for the performance
+ * current build or not.
+ *
+ * @return <code>true</code> if the configuration has results
+ * for the performance current build, <code>false</code> otherwise.
+ */
+public boolean isValid() {
+ if (this.baseline == null || this.current == null) {
+ initialize();
+ }
+ return this.valid;
+}
+
+/**
+ * Returns the 'n' last nightly build names.
+ *
+ * @param n Number of last nightly builds to return
+ * @return Last n nightly build names preceding current.
+ */
+public List lastNightlyBuildNames(int n) {
+ List labels = new ArrayList();
+ for (int i=size()-2; i>=0; i--) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ if (isBuildConcerned(buildResults)) {
+ String buildName = buildResults.getName();
+ if (buildName.startsWith("N")) { //$NON-NLS-1$
+ labels.add(buildName);
+ if (labels.size() >= n) {
+ break;
+ }
+ }
+ }
+ }
+ return labels;
+}
+
+/*
+ * Read all configuration builds results data from the given stream.
+ */
+void readData(DataInputStream stream) throws IOException {
+ int size = stream.readInt();
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = new BuildResults(this);
+ buildResults.readData(stream);
+ String lastBuildName = getPerformance().lastBuildName;
+ if (lastBuildName == null || buildResults.getDate().compareTo(Util.getBuildDate(lastBuildName)) <= 0) {
+ addChild(buildResults, true);
+ }
+ }
+}
+
+private void reset() {
+ this.current = null;
+ this.baseline = null;
+ this.baselined = false;
+ this.valid = false;
+ this.delta = 0;
+ this.error = -1;
+}
+
+/*
+ * Set the configuration value from database information
+ */
+void setInfos(int build_id, int summaryKind, String comment) {
+ BuildResults buildResults = (BuildResults) getResults(build_id);
+ if (buildResults == null) {
+ buildResults = new BuildResults(this, build_id);
+ addChild(buildResults, true);
+ }
+ buildResults.summaryKind = summaryKind;
+ buildResults.comment = comment;
+}
+
+/*
+ * Set the configuration value from database information
+ */
+void setValue(int build_id, int dim_id, int step, long value) {
+// reset();
+ BuildResults buildResults = (BuildResults) getResults(build_id);
+ if (buildResults == null) {
+ buildResults = new BuildResults(this, build_id);
+ addChild(buildResults, true);
+ }
+ buildResults.setValue(dim_id, step, value);
+}
+
+/*
+ * Write all configuration builds results data into the given stream.
+ */
+void write(DataOutputStream stream) throws IOException {
+ int size = size();
+ stream.writeInt(this.id);
+ stream.writeInt(size);
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) this.children.get(i);
+ buildResults.write(stream);
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/DB_Results.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/DB_Results.java
new file mode 100644
index 0000000..24a5939
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/DB_Results.java
@@ -0,0 +1,1299 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.test.internal.performance.PerformanceTestPlugin;
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.db.DB;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.test.performance.Dimension;
+
+/**
+ * Specific and private implementation of {@link org.eclipse.test.internal.performance.db.DB} class
+ * to get massive results from performance results database.
+ * TODO (frederic) Should be at least a subclass of {@link DB}...
+ */
+public class DB_Results {
+
+
+ private static final String DEFAULT_DB_BASELINE_PREFIX = "R-";
+ private static final Dim[] NO_DIMENSION = new Dim[0];
+ private static final String[] EMPTY_LIST = new String[0];
+ static final boolean DEBUG = false;
+ static final boolean LOG = false;
+
+ // the two supported DB types
+ private static final String DERBY= "derby"; //$NON-NLS-1$
+ private static final String CLOUDSCAPE= "cloudscape"; //$NON-NLS-1$
+
+ private static DB_Results fgDefault;
+
+ private Connection fConnection;
+ private SQL_Results fSQL;
+// private boolean fIsEmbedded;
+ private String fDBType; // either "derby" or "cloudscape"
+
+ // Preferences info
+ public static boolean DB_CONNECTION = false;
+ private static String DB_NAME;
+ private static String DB_LOCATION;
+ private static String DB_BASELINE_PREFIX = DEFAULT_DB_BASELINE_PREFIX;
+ private static String DB_VERSION;
+ private static String DB_VERSION_REF;
+
+ /**
+ * Get the name of the database.
+ *
+ * @return The name as a string.
+ */
+ public static String getDbName() {
+ if (DB_NAME == null) initDbContants();
+ return DB_NAME;
+ }
+
+ /**
+ * Set the name of the database.
+ *
+ * @param dbName The name as a string.
+ */
+ public static void setDbName(String dbName) {
+ Assert.isNotNull(dbName);
+ DB_NAME = dbName;
+ }
+
+ /**
+ * Get the location of the database.
+ *
+ * @return The location as a string.
+ */
+ public static String getDbLocation() {
+ if (!DB_CONNECTION) return null;
+ if (DB_LOCATION == null) initDbContants();
+ return DB_LOCATION;
+ }
+
+ /**
+ * Set the location of the database.
+ *
+ * @param dbLocation The location as a string.
+ */
+ public static void setDbLocation(String dbLocation) {
+ Assert.isNotNull(dbLocation);
+ DB_LOCATION = dbLocation;
+ }
+
+ /**
+ * Get the default baseline prefix.
+ *
+ * @return The prefix as a string.
+ */
+ public static String getDbBaselinePrefix() {
+ return DB_BASELINE_PREFIX;
+ }
+
+ /**
+ * Set the baseline prefix of the database.
+ *
+ * @param baselinePrefix The prefix as a string.
+ */
+ public static void setDbDefaultBaselinePrefix(String baselinePrefix) {
+ Assert.isNotNull(baselinePrefix);
+ Assert.isTrue(baselinePrefix.startsWith(DEFAULT_DB_BASELINE_PREFIX));
+ DB_BASELINE_PREFIX = baselinePrefix;
+ }
+
+ /**
+ * Get the baseline reference version of the database.
+ *
+ * @return The version as a string.
+ */
+ public static String getDbBaselineRefVersion() {
+ if (DB_VERSION_REF == null) initDbContants();
+ return DB_VERSION_REF;
+ }
+
+ /**
+ * Get the version of the database.
+ *
+ * @return The version as a string.
+ */
+ public static String getDbVersion() {
+ if (DB_VERSION == null) initDbContants();
+ return DB_VERSION;
+ }
+
+ /**
+ * Set the version of the database.
+ *
+ * @param version The version as a string.
+ */
+ public static void setDbVersion(String version) {
+ Assert.isNotNull(version);
+ Assert.isTrue(version.startsWith("v3"));
+ DB_VERSION = version;
+ }
+
+ /**
+ * Update the database constants from a new database location.
+ * @param connected Tells whether the database should be connected or not.
+ * @param databaseLocation The database location.
+ * May be a path to a local folder or a net address
+ * (see {@link IPerformancesConstants#NETWORK_DATABASE_LOCATION}).
+ */
+ public static boolean updateDbConstants(boolean connected, int eclipseVersion, String databaseLocation) {
+ if (DB_CONNECTION != connected || DB_LOCATION == null || DB_NAME == null ||
+ ((databaseLocation == null && !DB_LOCATION.equals(IPerformancesConstants.NETWORK_DATABASE_LOCATION)) ||
+ !DB_LOCATION.equals(databaseLocation)) ||
+ !DB_NAME.equals(IPerformancesConstants.DATABASE_NAME_PREFIX + eclipseVersion)) {
+ shutdown();
+ DB_CONNECTION = connected;
+ DB_LOCATION = databaseLocation == null ? IPerformancesConstants.NETWORK_DATABASE_LOCATION : databaseLocation;
+ DB_NAME = IPerformancesConstants.DATABASE_NAME_PREFIX + eclipseVersion;
+ DB_VERSION = "v" + eclipseVersion;
+ DB_VERSION_REF = "R-3." + (eclipseVersion % 10 - 1);
+ if (connected) {
+ return getDefault().fSQL != null;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns a title including DB version and name.
+ *
+ * @return A title as a string.
+ */
+ public static String getDbTitle() {
+ if (!DB_CONNECTION) return null;
+ String title = "Eclipse " + DB_VERSION + " - ";
+ if (DB_LOCATION.startsWith("net:")) {
+ title += " Network DB";
+ } else {
+ title += " Local DB";
+ }
+ return title;
+ }
+
+ /**
+ * The list of all the configurations (i.e. machine) stored in the database.
+ */
+ private static String[] CONFIGS;
+
+ /**
+ * The list of all the components stored in the database.
+ */
+ private static String[] COMPONENTS;
+
+ /**
+ * The list of all the builds stored in the database.
+ */
+ private static String[] BUILDS;
+
+ /**
+ * The list of all the dimensions stored in the database.
+ */
+ private static int[] DIMENSIONS;
+
+ /**
+ * The default dimension used to display results (typically in fingerprints).
+ */
+ private static Dim DEFAULT_DIM;
+ private static int DEFAULT_DIM_INDEX;
+
+ /**
+ * The list of all the dimensions displayed while generating results.
+ */
+ private static Dim[] RESULTS_DIMENSIONS;
+
+ /**
+ * The list of all the VMs stored in the database.
+ */
+ private static String[] VMS;
+
+ /**
+ * The list of possible test boxes.
+ * <p>
+ * Only used if no specific configurations are specified
+ * (see {@link PerformanceResults#readAll(String, String[][], String, File, int, org.eclipse.core.runtime.IProgressMonitor)}.
+ * </p>
+ * Note that this is a copy of the the property "eclipse.perf.config.descriptors"
+ * defined in org.eclipse.releng.eclipsebuilder/eclipse/helper.xml file
+ */
+ private static String[] CONFIG_DESCRIPTIONS;
+
+ /**
+ * The list of known Eclipse components.
+ */
+ private final static String[] ECLIPSE_COMPONENTS = {
+ "org.eclipse.ant", //$NON-NLS-1$
+ "org.eclipse.compare", //$NON-NLS-1$
+ "org.eclipse.core", //$NON-NLS-1$
+ "org.eclipse.help", //$NON-NLS-1$
+ "org.eclipse.jdt.core", //$NON-NLS-1$
+ "org.eclipse.jdt.debug", //$NON-NLS-1$
+ "org.eclipse.jdt.text", //$NON-NLS-1$
+ "org.eclipse.jdt.ui", //$NON-NLS-1$
+ "org.eclipse.jface", //$NON-NLS-1$
+ "org.eclipse.osgi", //$NON-NLS-1$
+ "org.eclipse.pde.api.tools", //$NON-NLS-1$
+ "org.eclipse.pde.ui", //$NON-NLS-1$
+ "org.eclipse.swt", //$NON-NLS-1$
+ "org.eclipse.team", //$NON-NLS-1$
+ "org.eclipse.ua", //$NON-NLS-1$
+ "org.eclipse.ui" //$NON-NLS-1$
+ };
+ private static String[] KNOWN_COMPONENTS = ECLIPSE_COMPONENTS;
+
+
+ // Store debug info
+ final static StringWriter DEBUG_STR_WRITER;
+ final static PrintWriter DEBUG_WRITER;
+ static {
+ if (DEBUG) {
+ DEBUG_STR_WRITER= new StringWriter();
+ DEBUG_WRITER= new PrintWriter(DEBUG_STR_WRITER);
+ } else {
+ DEBUG_STR_WRITER= null;
+ DEBUG_WRITER= null;
+ }
+ }
+
+ // Store log info
+ final static StringWriter LOG_STR_WRITER = new StringWriter();
+ final static LogWriter LOG_WRITER = new LogWriter();
+ static class LogWriter extends PrintWriter {
+ long[] starts = new long[10];
+ long[] times = new long[10];
+ StringBuffer[] buffers = new StringBuffer[10];
+ int depth = -1, max = -1;
+ public LogWriter() {
+ super(LOG_STR_WRITER);
+ }
+ void starts(String log) {
+ if (++this.depth >= this.buffers.length) {
+ System.arraycopy(this.times, 0, this.times = new long[this.depth+10], 0, this.depth);
+ System.arraycopy(this.buffers, 0, this.buffers= new StringBuffer[this.depth+10], 0, this.depth);
+ }
+ StringBuffer buffer = this.buffers[this.depth];
+ if (this.buffers[this.depth] == null) buffer = this.buffers[this.depth] = new StringBuffer();
+ buffer.append(log);
+ this.starts[this.depth] = System.currentTimeMillis();
+ if (this.depth > this.max) this.max = this.depth;
+ }
+ void ends(String log) {
+ if (this.depth < 0)
+ throw new RuntimeException("Invalid call to ends (missing corresponding starts call)!"); //$NON-NLS-1$
+ this.buffers[this.depth].append(log);
+ if (this.depth > 0) {
+ this.times[this.depth] += System.currentTimeMillis() - this.starts[this.depth];
+ this.depth--;
+ return;
+ }
+ for (int i=0; i<this.max; i++) {
+ print(this.buffers[i].toString());
+ print(" ( in "); //$NON-NLS-1$
+ print(this.times[this.depth]);
+ println("ms)"); //$NON-NLS-1$
+ }
+ this.depth = this.max = -1;
+ this.starts = new long[10];
+ this.times = new long[10];
+ this.buffers = new StringBuffer[10];
+ }
+ public String toString() {
+ return LOG_STR_WRITER.toString();
+ }
+ }
+
+ // Data storage from queries
+ static String LAST_CURRENT_BUILD, LAST_BASELINE_BUILD;
+ private static int BUILDS_LENGTH;
+ private static String[] SCENARII;
+ private static String[] COMMENTS;
+
+ //---- private implementation
+
+ /**
+ * Private constructor to block instance creation.
+ */
+ private DB_Results() {
+ // empty implementation
+ }
+
+ synchronized static DB_Results getDefault() {
+ if (fgDefault == null) {
+ fgDefault= new DB_Results();
+ fgDefault.connect();
+ if (PerformanceTestPlugin.getDefault() == null) {
+ // not started as plugin
+ Runtime.getRuntime().addShutdownHook(
+ new Thread() {
+ public void run() {
+ shutdown();
+ }
+ }
+ );
+ }
+ } else if (fgDefault.fSQL == null) {
+ fgDefault.connect();
+ }
+ return fgDefault;
+ }
+
+ public static void shutdown() {
+ if (fgDefault != null) {
+ fgDefault.disconnect();
+ fgDefault= null;
+ BUILDS = null;
+ LAST_BASELINE_BUILD = null;
+ LAST_CURRENT_BUILD = null;
+ DIMENSIONS = null;
+ CONFIGS = null;
+ COMPONENTS = null;
+ SCENARII = null;
+ COMMENTS = null;
+ DB_VERSION = null;
+ DB_VERSION_REF = null;
+ DEFAULT_DIM =null;
+ DEFAULT_DIM_INDEX = -1;
+ RESULTS_DIMENSIONS = null;
+ VMS = null;
+ CONFIG_DESCRIPTIONS = null;
+ KNOWN_COMPONENTS = ECLIPSE_COMPONENTS;
+ }
+ if (DEBUG) {
+ DEBUG_WRITER.println("DB.shutdown"); //$NON-NLS-1$
+ System.out.println(DEBUG_STR_WRITER.toString());
+ }
+ if (LOG) {
+ System.out.println(LOG_STR_WRITER.toString());
+ }
+ }
+
+/**
+ * Return the build id from a given name.
+ *
+ * @param name The build name (eg. I20070615-1200)
+ * @return The id of the build (ie. the index in the {@link #BUILDS} list)
+ */
+static int getBuildId(String name) {
+ if (BUILDS == null) return -1;
+ return Arrays.binarySearch(BUILDS, name, Util.BUILD_DATE_COMPARATOR);
+}
+
+/**
+ * Return the build name from a given id.
+ *
+ * @param id The build id
+ * @return The name of the build (eg. I20070615-1200)
+ */
+static String getBuildName(int id) {
+ if (BUILDS == null) return null;
+ return BUILDS[id];
+}
+
+/**
+ * Returns all the builds names read from the database.
+ *
+ * @return The list of all builds names matching the scenario pattern used while reading data
+ */
+public static String[] getBuilds() {
+ if (BUILDS == null) {
+ queryAllVariations("%"); //$NON-NLS-1$
+ }
+ if (BUILDS_LENGTH == 0) return EMPTY_LIST;
+ String[] builds = new String[BUILDS_LENGTH];
+ System.arraycopy(BUILDS, 0, builds, 0, BUILDS_LENGTH);
+ return builds;
+}
+
+/**
+ * Returns the number of builds stored int the database.
+ *
+ * @return The number of builds stored in the database.
+ */
+public static int getBuildsNumber() {
+ if (BUILDS == null) {
+ queryAllVariations("%"); //$NON-NLS-1$
+ }
+ return BUILDS_LENGTH;
+}
+
+/**
+ * Get component name from a scenario.
+ *
+ * @param scenarioName The name of the scenario
+ * @return The component name
+ */
+static String getComponentNameFromScenario(String scenarioName) {
+ int length = KNOWN_COMPONENTS.length;
+ for (int i=0; i<length; i++) {
+ if (scenarioName.startsWith(KNOWN_COMPONENTS[i])) {
+ return KNOWN_COMPONENTS[i];
+ }
+ }
+ StringTokenizer tokenizer = new StringTokenizer(scenarioName, ".");
+ StringBuffer buffer = new StringBuffer(tokenizer.nextToken());
+ if (tokenizer.hasMoreTokens()) {
+ buffer.append('.');
+ buffer.append(tokenizer.nextToken());
+ if (tokenizer.hasMoreTokens()) {
+ buffer.append('.');
+ buffer.append(tokenizer.nextToken());
+ }
+ }
+ String componentName = buffer.toString();
+ System.err.println(scenarioName+" does not belongs to a known Eclipse component. So use scenario prefix "+componentName+" as component name by default and add it to the know components"); //$NON-NLS-1$
+ System.arraycopy(KNOWN_COMPONENTS, 0, KNOWN_COMPONENTS = new String[length+1], 0, length);
+ KNOWN_COMPONENTS[length] = componentName;
+ return componentName;
+}
+
+/**
+ * Get all components read from database.
+ *
+ * @return A list of component names matching the given pattern
+ */
+public static String[] getComponents() {
+ if (COMPONENTS == null) return EMPTY_LIST;
+ int length = COMPONENTS.length;
+ String[] components = new String[length];
+ System.arraycopy(COMPONENTS, 0, components, 0, length);
+ return components;
+}
+
+/**
+ * Return the name of the configuration from the given id.
+ *
+ * @param id The index of the configuration in the stored list.
+ * @return The name of the configuration (eg. eclipseperflnx1_R3.3)
+ */
+static String getConfig(int id) {
+ return CONFIGS[id];
+}
+
+/**
+ * Get all configurations read from the database.
+ *
+ * @return A list of configuration names
+ */
+public static String[] getConfigs() {
+ if (CONFIGS == null) return EMPTY_LIST;
+ int length = CONFIGS.length;
+ String[] configs = new String[length];
+ System.arraycopy(CONFIGS, 0, configs, 0, length);
+ return configs;
+}
+
+/**
+ * Set the default dimension used for performance results.
+ */
+public static void setConfigs(String[] configs) {
+ CONFIGS = configs;
+}
+
+/**
+ * Get all configurations read from the database.
+ *
+ * @return A list of configuration names
+ */
+public static String[] getConfigDescriptions() {
+ if (CONFIG_DESCRIPTIONS == null) {
+ if (CONFIGS == null) return null;
+ int length = CONFIGS.length;
+ CONFIG_DESCRIPTIONS = new String[length];
+ String[][] configDescriptors = PerformanceTestPlugin.getConfigDescriptors();
+ int cdLength = configDescriptors.length;
+ for (int i = 0; i < length; i++) {
+ boolean found = false;
+ for (int j = 0; j < cdLength; j++) {
+ if (configDescriptors[j][0].equals(CONFIGS[i])) {
+ CONFIG_DESCRIPTIONS[i] = configDescriptors[j][1];
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ String kind = CONFIGS[i].indexOf("epwin") < 0 ? "Linux" : "Win XP";
+ CONFIG_DESCRIPTIONS[i] = kind+" perf test box "+CONFIGS[i].substring(5);
+ }
+ }
+ }
+ int length = CONFIG_DESCRIPTIONS.length;
+ String[] descriptions = new String[length];
+ System.arraycopy(CONFIG_DESCRIPTIONS, 0, descriptions, 0, length);
+ return descriptions;
+}
+
+/**
+ * Set the default dimension used for performance results.
+ */
+public static void setConfigDescriptions(String[] descriptions) {
+ CONFIG_DESCRIPTIONS = descriptions;
+}
+
+/**
+ * Get all dimensions read from the database.
+ *
+ * @return A list of dimensions.
+ */
+public static Dim[] getDimensions() {
+ if (DIMENSIONS == null) return NO_DIMENSION;
+ int length = DIMENSIONS.length;
+ Dim[] dimensions = new Dim[length];
+ for (int i = 0; i < length; i++) {
+ Dimension dimension = PerformanceTestPlugin.getDimension(DIMENSIONS[i]);
+ if (dimension == null) {
+ throw new RuntimeException("There is an unsupported dimension stored in the database: " +DIMENSIONS[i]);
+ }
+ dimensions[i] = (Dim) dimension;
+ }
+ return dimensions;
+}
+
+/**
+ * Return the default dimension used for performance results.
+ *
+ * @return The {@link Dim default dimension}.
+ */
+public static Dim getDefaultDimension() {
+ if (DEFAULT_DIM == null) {
+ DEFAULT_DIM = (Dim) PerformanceTestPlugin.getDefaultDimension();
+ }
+ return DEFAULT_DIM;
+}
+
+/**
+ * Set the default dimension used for performance results.
+ */
+public static void setDefaultDimension(String dim) {
+ DEFAULT_DIM = (Dim) PerformanceTestPlugin.getDimension(dim);
+ if (DIMENSIONS != null) {
+ DEFAULT_DIM_INDEX = Arrays.binarySearch(DIMENSIONS, DEFAULT_DIM.getId());
+ }
+}
+
+public static Dim[] getResultsDimensions() {
+ if (RESULTS_DIMENSIONS == null) {
+ Dimension[] resultsDimensions = PerformanceTestPlugin.getResultsDimensions();
+ int length = resultsDimensions.length;
+ RESULTS_DIMENSIONS = new Dim[length];
+ for (int i = 0; i < length; i++) {
+ RESULTS_DIMENSIONS[i] = (Dim) resultsDimensions[i];
+ }
+ }
+ return RESULTS_DIMENSIONS;
+}
+
+/**
+ * Set the default dimension used for performance results.
+ */
+public static void setResultsDimensions(String[] dimensions) {
+ int length = dimensions.length;
+ RESULTS_DIMENSIONS = new Dim[length];
+ for (int i = 0; i < length; i++) {
+ RESULTS_DIMENSIONS[i] = (Dim) PerformanceTestPlugin.getDimension(dimensions[i]);
+ }
+}
+
+/**
+ * Return the default dimension used for performance results.
+ *
+ * @return The {@link Dim default dimension}.
+ */
+public static int getDefaultDimensionIndex() {
+ if (DEFAULT_DIM == null || DEFAULT_DIM_INDEX == -1) {
+ getDefaultDimension(); // init default dimension
+ getDimensions(); // init dimensions
+ DEFAULT_DIM_INDEX = Arrays.binarySearch(DIMENSIONS, DEFAULT_DIM.getId());
+ }
+ return DEFAULT_DIM_INDEX;
+}
+
+/**
+ * Return the ID of the last baseline build before the given date.
+ *
+ * @param date The date the baseline must be run before. If <code>null</code>
+ * return the last baseline build stored in the DB.
+ *
+ * @return the ID of the last baseline build before the given date or
+ * <code>null</code> if none was run before it...
+ */
+public static String getLastBaselineBuild(String date) {
+ if (BUILDS == null) {
+ queryAllVariations("%"); //$NON-NLS-1$
+ }
+ if (date == null) {
+ if (LAST_BASELINE_BUILD == null) {
+ return BUILDS[0];
+ }
+ return LAST_BASELINE_BUILD;
+ }
+ String lastBaselineBuild = null;
+ for (int i=0; i<BUILDS_LENGTH; i++) {
+ String build = BUILDS[i];
+ if (build.startsWith(DB_VERSION_REF)) {
+ String buildDate = build.substring(build.indexOf('_')+1);
+ if (buildDate.compareTo(date) < 0) {
+ if (lastBaselineBuild == null || build.compareTo(lastBaselineBuild) > 0) {
+ lastBaselineBuild = build;
+ }
+ }
+ }
+ }
+ if (lastBaselineBuild == null) {
+ return BUILDS[0];
+ }
+ return lastBaselineBuild;
+}
+
+/**
+ * Return the ID of the last baseline build.
+ *
+ * @return the ID of the last baseline build.
+ */
+public static String getLastCurrentBuild() {
+ if (BUILDS == null) {
+ queryAllVariations("%"); //$NON-NLS-1$
+ }
+ return LAST_CURRENT_BUILD;
+}
+
+/**
+ * Returns all the scenarios names read from the database.
+ *
+ * @return The list of all scenarios matching the pattern for a given build.
+ * @see #internalQueryBuildScenarios(String, String)
+ */
+public static List getScenarios() {
+ return Arrays.asList(SCENARII);
+}
+
+/**
+ * Init the constants if necessary.
+ */
+public static void initDbContants() {
+ if (DB_LOCATION == null) {
+ DB_LOCATION = PerformanceTestPlugin.getDBLocation();
+ if (DB_LOCATION == null) {
+ new RuntimeException("Cannot connect to the DB without a location!");
+ }
+ }
+ if (DB_NAME == null) {
+ DB_NAME = PerformanceTestPlugin.getDBName();
+ if (DB_NAME == null) {
+ new RuntimeException("Cannot connect to the DB without a name!");
+ }
+ }
+ if (DB_VERSION == null) {
+ DB_VERSION = "v" + DB_NAME.substring(DB_NAME.length()-2);
+ DB_VERSION_REF = "R-3."+(Character.digit(DB_NAME.charAt(DB_NAME.length()-1), 10)-1);
+ }
+}
+
+/**
+ * Get all scenarios read from database.
+ *
+ * @return A list of all scenario names matching the default pattern
+ */
+public static Map queryAllScenarios() {
+ return getDefault().internalQueryBuildScenarios("%", null); //$NON-NLS-1$
+}
+
+/**
+ * Get all scenarios read from database matching a given pattern.
+ * Note that all scenarios are returned if the pattern is <code>null</code>.
+ *
+ * @param scenarioPattern The pattern of the requested scenarios
+ * @return A map of all scenarios matching the given pattern.
+ * The map keys are component names and values are the scenarios list for
+ * each component.
+ */
+static Map queryAllScenarios(String scenarioPattern) {
+ String pattern = scenarioPattern==null ? "%" : scenarioPattern; //$NON-NLS-1$
+ return getDefault().internalQueryBuildScenarios(pattern, null);
+}
+
+/**
+ * Get all scenarios read from database matching a given pattern.
+ * Note that all scenarios are returned if the pattern is <code>null</code>.
+ *
+ * @param scenarioPattern The pattern of the requested scenarios
+ * @param buildName The build name
+ * @return A list of scenario names matching the given pattern
+ */
+static Map queryAllScenarios(String scenarioPattern, String buildName) {
+ return getDefault().internalQueryBuildScenarios(scenarioPattern, buildName);
+}
+
+/**
+ * Get all variations read from database matching a given configuration pattern.
+ *
+ * @param configPattern The pattern of the requested configurations
+ */
+static void queryAllVariations(String configPattern) {
+ getDefault().internalQueryAllVariations(configPattern);
+}
+
+/**
+ * Get all summaries from DB for a given scenario and configuration pattern
+ *
+ * @param scenarioResults The scenario results where to store data
+ * @param configPattern The configuration pattern concerned by the query
+ * @param builds All builds to get summaries, if <code>null</code>, then all DB
+ * builds will be concerned.
+ */
+static void queryScenarioSummaries(ScenarioResults scenarioResults, String configPattern, String[] builds) {
+ getDefault().internalQueryScenarioSummaries(scenarioResults, configPattern, builds);
+}
+
+/**
+ * Query and store all values for given scenario results
+ *
+ * @param scenarioResults The scenario results where the values has to be put
+ * @param configPattern The pattern of the configuration concerned by the query
+ * @param buildName Name of the last build on which data were stored locally
+ *
+*/
+static void queryScenarioValues(ScenarioResults scenarioResults, String configPattern, String buildName) {
+ getDefault().internalQueryScenarioValues(scenarioResults, configPattern, buildName);
+}
+
+/**
+ * dbloc= embed in home directory
+ * dbloc=/tmp/performance embed given location
+ * dbloc=net://localhost connect to local server
+ * dbloc=net://www.eclipse.org connect to remove server
+ */
+private void connect() {
+
+ if (this.fConnection != null || !DB_CONNECTION)
+ return;
+
+ if (DEBUG) DriverManager.setLogWriter(new PrintWriter(System.out));
+
+ // Init DB location and name if not already done
+ if (DB_LOCATION == null) {
+ initDbContants();
+ }
+
+ String url = null;
+ java.util.Properties info = new java.util.Properties();
+
+ if (DEBUG) {
+ DEBUG_WRITER.println();
+ DEBUG_WRITER.println("==========================================================="); //$NON-NLS-1$
+ DEBUG_WRITER.println("Database debug information stored while processing"); //$NON-NLS-1$
+ }
+ if (LOG) {
+ LOG_WRITER.println();
+ LOG_WRITER.println("==========================================================="); //$NON-NLS-1$
+ LOG_WRITER.println("Database log information stored while processing"); //$NON-NLS-1$
+ }
+
+ this.fDBType = DERBY; // assume we are using Derby
+ try {
+ if (DB_LOCATION.startsWith("net://")) { //$NON-NLS-1$
+ // remote
+// fIsEmbedded = false;
+ // connect over network
+ if (DEBUG)
+ DEBUG_WRITER.println("Trying to connect over network..."); //$NON-NLS-1$
+ Class.forName("com.ibm.db2.jcc.DB2Driver"); //$NON-NLS-1$
+ info.put("user", PerformanceTestPlugin.getDBUser()); //$NON-NLS-1$
+ info.put("password", PerformanceTestPlugin.getDBPassword()); //$NON-NLS-1$
+ info.put("retrieveMessagesFromServerOnGetMessage", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+ info.put("create", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+ url = DB_LOCATION + '/' + DB_NAME;
+ } else if (DB_LOCATION.startsWith("//")) { //$NON-NLS-1$
+ // remote
+// fIsEmbedded = false;
+ // connect over network
+ if (DEBUG)
+ DEBUG_WRITER.println("Trying to connect over network..."); //$NON-NLS-1$
+ Class.forName("org.apache.derby.jdbc.ClientDriver"); //$NON-NLS-1$
+ info.put("user", PerformanceTestPlugin.getDBUser()); //$NON-NLS-1$
+ info.put("password", PerformanceTestPlugin.getDBPassword()); //$NON-NLS-1$
+ info.put("create", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+ url = DB_LOCATION + '/' + DB_NAME;
+ } else {
+ // workaround for Derby issue:
+ // http://nagoya.apache.org/jira/browse/DERBY-1
+ if ("Mac OS X".equals(System.getProperty("os.name"))) //$NON-NLS-1$//$NON-NLS-2$
+ System.setProperty("derby.storage.fileSyncTransactionLog", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // embedded
+ try {
+ Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); //$NON-NLS-1$
+// fIsEmbedded = true;
+ } catch (ClassNotFoundException e) {
+ Class.forName("com.ihost.cs.jdbc.CloudscapeDriver"); //$NON-NLS-1$
+ this.fDBType = CLOUDSCAPE;
+ }
+ if (DEBUG)
+ DEBUG_WRITER.println("Loaded embedded " + this.fDBType); //$NON-NLS-1$
+ File f;
+ if (DB_LOCATION.length() == 0) {
+ String user_home = System.getProperty("user.home"); //$NON-NLS-1$
+ if (user_home == null)
+ return;
+ f = new File(user_home, this.fDBType);
+ } else
+ f = new File(DB_LOCATION);
+ url = new File(f, DB_NAME).getAbsolutePath();
+ info.put("user", PerformanceTestPlugin.getDBUser()); //$NON-NLS-1$
+ info.put("password", PerformanceTestPlugin.getDBPassword()); //$NON-NLS-1$
+ info.put("create", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ try {
+ this.fConnection = DriverManager.getConnection("jdbc:" + this.fDBType + ":" + url, info); //$NON-NLS-1$ //$NON-NLS-2$
+ } catch (SQLException e) {
+ if ("08001".equals(e.getSQLState()) && DERBY.equals(this.fDBType)) { //$NON-NLS-1$
+ if (DEBUG)
+ DEBUG_WRITER.println("DriverManager.getConnection failed; retrying for cloudscape"); //$NON-NLS-1$
+ // try Cloudscape
+ this.fDBType = CLOUDSCAPE;
+ this.fConnection = DriverManager.getConnection("jdbc:" + this.fDBType + ":" + url, info); //$NON-NLS-1$ //$NON-NLS-2$
+ } else
+ throw e;
+ }
+ if (DEBUG)
+ DEBUG_WRITER.println("connect succeeded!"); //$NON-NLS-1$
+
+ this.fConnection.setAutoCommit(false);
+ this.fSQL = new SQL_Results(this.fConnection);
+ this.fConnection.commit();
+
+ } catch (SQLException ex) {
+ PerformanceTestPlugin.logError(ex.getMessage());
+
+ } catch (ClassNotFoundException e) {
+ PerformanceTestPlugin.log(e);
+ }
+}
+
+private void disconnect() {
+ if (DEBUG)
+ DEBUG_WRITER.println("disconnecting from DB"); //$NON-NLS-1$
+ if (this.fSQL != null) {
+ try {
+ this.fSQL.dispose();
+ } catch (SQLException e1) {
+ PerformanceTestPlugin.log(e1);
+ }
+ this.fSQL = null;
+ }
+ if (this.fConnection != null) {
+ try {
+ this.fConnection.commit();
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ }
+ try {
+ this.fConnection.close();
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ }
+ this.fConnection = null;
+ }
+
+ /*
+ if (fIsEmbedded) {
+ try {
+ DriverManager.getConnection("jdbc:" + fDBType + ":;shutdown=true"); //$NON-NLS-1$ //$NON-NLS-2$
+ } catch (SQLException e) {
+ String message = e.getMessage();
+ if (message.indexOf("system shutdown.") < 0) //$NON-NLS-1$
+ e.printStackTrace();
+ }
+ }
+ */
+}
+
+/*
+ * Return the index of the given configuration in the stored list.
+ */
+private int getConfigId(String config) {
+ if (CONFIGS == null) return -1;
+ return Arrays.binarySearch(CONFIGS, config);
+}
+
+SQL_Results getSQL() {
+ return this.fSQL;
+}
+
+/*
+ * Query all comments from database
+ */
+private void internalQueryAllComments() {
+ if (this.fSQL == null) return;
+ if (COMMENTS != null) return;
+ long start = System.currentTimeMillis();
+ if (DEBUG) DEBUG_WRITER.print(" [DB query all comments..."); //$NON-NLS-1$
+ ResultSet result = null;
+ try {
+ String[] comments = null;
+ result = this.fSQL.queryAllComments();
+ while (result.next()) {
+ int commentID = result.getInt(1);
+ // Ignore kind as there's only one
+ // int commentKind = result.getInt(2);
+ String comment = result.getString(3);
+ if (comments == null) {
+ comments = new String[commentID+10];
+ } else if (commentID >= comments.length) {
+ int length = comments.length;
+ System.arraycopy(comments, 0, comments = new String[commentID+10], 0, length);
+ }
+ comments[commentID] = comment;
+ }
+ COMMENTS = comments;
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ } finally {
+ if (result != null) {
+ try {
+ result.close();
+ } catch (SQLException e1) {
+ // ignored
+ }
+ }
+ if (DEBUG) DEBUG_WRITER.println("done in " + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
+
+/*
+ * Query all variations. This method stores all config and build names.
+ */
+private void internalQueryAllVariations(String configPattern) {
+ if (this.fSQL == null) return;
+ if (BUILDS != null) return;
+ long start = System.currentTimeMillis();
+ if (DEBUG) {
+ DEBUG_WRITER.print(" - DB query all variations for configuration pattern: "+configPattern); //$NON-NLS-1$
+ DEBUG_WRITER.print("..."); //$NON-NLS-1$
+ }
+ ResultSet result = null;
+ try {
+ CONFIGS = null;
+ BUILDS = null;
+ BUILDS_LENGTH = 0;
+ result = this.fSQL.queryAllVariations(configPattern);
+ while (result.next()) {
+ String variation = result.getString(1); // something like "||build=I20070615-1200||config=eclipseperfwin2_R3.3||jvm=sun|"
+ StringTokenizer tokenizer = new StringTokenizer(variation, "=|"); //$NON-NLS-1$
+ tokenizer.nextToken(); // 'build'
+ storeBuildName(tokenizer.nextToken()); // 'I20070615-1200'
+ tokenizer.nextToken(); // 'config'
+ storeConfig(tokenizer.nextToken()); // 'eclipseperfwin2_R3.3'
+ tokenizer.nextToken(); // 'jvm'
+ storeVm(tokenizer.nextToken()); // 'sun'
+ }
+ if (BUILDS_LENGTH == 0) {
+ BUILDS = EMPTY_LIST;
+ }
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ } finally {
+ if (result != null) {
+ try {
+ result.close();
+ } catch (SQLException e1) {
+ // ignored
+ }
+ }
+ if (DEBUG) DEBUG_WRITER.println("done in " + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
+
+private Map internalQueryBuildScenarios(String scenarioPattern, String buildName) {
+ if (this.fSQL == null) return null;
+ long start = System.currentTimeMillis();
+ if (DEBUG) {
+ DEBUG_WRITER.print(" - DB query all scenarios"); //$NON-NLS-1$
+ if (scenarioPattern != null) DEBUG_WRITER.print(" with pattern "+scenarioPattern); //$NON-NLS-1$
+ if (buildName != null) DEBUG_WRITER.print(" for build: "+buildName); //$NON-NLS-1$
+ }
+ ResultSet result = null;
+ Map allScenarios = new HashMap();
+ try {
+ if (buildName == null) {
+ result = this.fSQL.queryBuildAllScenarios(scenarioPattern);
+ } else {
+ result = this.fSQL.queryBuildScenarios(scenarioPattern, buildName);
+ }
+ int previousId = -1;
+ List scenarios = null;
+ List scenariosNames = new ArrayList();
+ for (int i = 0; result.next(); i++) {
+ int id = result.getInt(1);
+ String name = result.getString(2);
+ scenariosNames.add(name);
+ String shortName = result.getString(3);
+ int component_id = storeComponent(getComponentNameFromScenario(name));
+ if (component_id != previousId) {
+ allScenarios.put(COMPONENTS[component_id], scenarios = new ArrayList());
+ previousId = component_id;
+ }
+ scenarios.add(new ScenarioResults(id, name, shortName));
+ }
+ SCENARII = new String[scenariosNames.size()];
+ scenariosNames.toArray(SCENARII);
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ } finally {
+ if (result != null) {
+ try {
+ result.close();
+ } catch (SQLException e1) { // ignored
+ }
+ }
+ if (DEBUG) DEBUG_WRITER.println("done in " + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return allScenarios;
+}
+
+private void internalQueryScenarioValues(ScenarioResults scenarioResults, String configPattern, String buildName) {
+ if (this.fSQL == null) return;
+ if (DEBUG) {
+ DEBUG_WRITER.print(" - DB query all data points for config pattern: "+configPattern+" for scenario: " + scenarioResults.getShortName()); //$NON-NLS-1$ //$NON-NLS-2$
+ if (buildName != null) DEBUG_WRITER.print(" for build: "+buildName); //$NON-NLS-1$
+ }
+ internalQueryAllVariations(configPattern); // need to read all variations to have all build names
+ ResultSet result = null;
+ try {
+ int count = 0;
+
+ result = buildName == null
+ ? this.fSQL.queryScenarioDataPoints(configPattern, scenarioResults.getId())
+ : this.fSQL.queryScenarioBuildDataPoints(configPattern, scenarioResults.getId(), buildName);
+ while (result.next()) {
+ int dp_id = result.getInt(1);
+ int step = result.getInt(2);
+ String variation = result.getString(3); // something like "|build=I20070615-1200||config=eclipseperfwin2_R3.3||jvm=sun|"
+ StringTokenizer tokenizer = new StringTokenizer(variation, "=|"); //$NON-NLS-1$
+ tokenizer.nextToken(); // 'build'
+ int build_id = getBuildId(tokenizer.nextToken()); // 'I20070615-1200'
+ tokenizer.nextToken(); // 'config'
+ int config_id = getConfigId(tokenizer.nextToken()); // 'eclipseperflnx3'
+ ResultSet rs2 = this.fSQL.queryDimScalars(dp_id);
+ while (rs2.next()) {
+ int dim_id = rs2.getInt(1);
+ storeDimension(dim_id);
+ BigDecimal decimalValue = rs2.getBigDecimal(2);
+ long value = decimalValue.longValue();
+ if (build_id >= 0) { // build id may be negative (i.e. not stored in the array) if new run starts while we're getting results
+ scenarioResults.setValue(build_id, dim_id, config_id, step, value);
+ }
+ count++;
+ }
+ }
+ if (LOG) LOG_WRITER.ends(" -> " + count + " values read"); //$NON-NLS-1$ //$NON-NLS-2$
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ } finally {
+ if (result != null) {
+ try {
+ result.close();
+ } catch (SQLException e1) {
+ // ignored
+ }
+ }
+ }
+}
+
+private void internalQueryScenarioSummaries(ScenarioResults scenarioResults, String config, String[] builds) {
+ if (this.fSQL == null) return;
+ long start = System.currentTimeMillis();
+ if (DEBUG) {
+ DEBUG_WRITER.print(" - DB query all summaries for scenario '"+scenarioResults.getShortName()+"' of '"+config+"' config"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ internalQueryAllComments();
+ ResultSet result = null;
+ try {
+ int scenarioID = scenarioResults.getId();
+ // First try to get summaries of elapsed process dimension
+ result = this.fSQL.queryScenarioSummaries(scenarioID, config, builds);
+ while (result.next()) {
+ String variation = result.getString(1); // something like "|build=I20070615-1200||config=eclipseperfwin2_R3.3||jvm=sun|"
+ int summaryKind = result.getShort(2);
+ int comment_id = result.getInt(3);
+ int dim_id = result.getInt(4);
+ if (dim_id != 0) storeDimension(dim_id);
+ StringTokenizer tokenizer = new StringTokenizer(variation, "=|"); //$NON-NLS-1$
+ tokenizer.nextToken(); // 'build'
+ String buildName = tokenizer.nextToken(); // 'I20070615-1200'
+ tokenizer.nextToken(); // 'config'
+ int config_id = getConfigId(tokenizer.nextToken()); // 'eclipseperflnx3'
+ int build_id = getBuildId(buildName);
+ if (build_id >= 0) {
+ scenarioResults.setInfos(config_id, build_id, dim_id==0?-1:summaryKind, COMMENTS[comment_id]);
+ }
+ }
+ } catch (SQLException e) {
+ PerformanceTestPlugin.log(e);
+ } finally {
+ if (result != null) {
+ try {
+ result.close();
+ } catch (SQLException e1) {
+ // ignored
+ }
+ }
+ if (DEBUG) DEBUG_WRITER.println("done in " + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
+
+/*
+ * Store a build name in the dynamic list.
+ * The list is sorted alphabetically.
+ */
+private int storeBuildName(String build) {
+ boolean isVersion = build.startsWith(DB_BASELINE_PREFIX);
+ if (BUILDS == null) {
+ BUILDS = new String[1];
+ BUILDS[BUILDS_LENGTH++] = build;
+ if (isVersion) {
+ LAST_BASELINE_BUILD = build;
+ } else {
+ LAST_CURRENT_BUILD = build;
+ }
+ return 0;
+ }
+ int idx = Arrays.binarySearch(BUILDS, build, Util.BUILD_DATE_COMPARATOR);
+ if (idx >= 0) return idx;
+ int index = -idx-1;
+ int length = BUILDS.length;
+ if (BUILDS_LENGTH == length) {
+ String[] array = new String[length+1];
+ if (index > 0) System.arraycopy(BUILDS, 0, array, 0, index);
+ array[index] = build;
+ if (index < length) {
+ System.arraycopy(BUILDS, index, array, index+1, length-index);
+ }
+ BUILDS = array;
+ }
+ BUILDS_LENGTH++;
+ if (isVersion) {
+ if (LAST_BASELINE_BUILD == null || LAST_CURRENT_BUILD == null) {
+ LAST_BASELINE_BUILD = build;
+ } else {
+ String buildDate = LAST_CURRENT_BUILD.substring(1, 9)+LAST_CURRENT_BUILD.substring(10, LAST_CURRENT_BUILD.length());
+ String baselineDate = LAST_BASELINE_BUILD.substring(LAST_BASELINE_BUILD.indexOf('_')+1);
+ if (build.compareTo(LAST_BASELINE_BUILD) > 0 && baselineDate.compareTo(buildDate) < 0) {
+ LAST_BASELINE_BUILD = build;
+ }
+ }
+ } else {
+ if (LAST_CURRENT_BUILD == null || build.substring(1).compareTo(LAST_CURRENT_BUILD.substring(1)) >= 0) {
+ LAST_CURRENT_BUILD = build;
+ }
+ }
+ return index;
+}
+
+/*
+ * Store a configuration in the dynamic list.
+ * The list is sorted alphabetically.
+ */
+private int storeConfig(String config) {
+ if (CONFIGS== null) {
+ CONFIGS= new String[1];
+ CONFIGS[0] = config;
+ return 0;
+ }
+ int idx = Arrays.binarySearch(CONFIGS, config);
+ if (idx >= 0) return idx;
+ int length = CONFIGS.length;
+ System.arraycopy(CONFIGS, 0, CONFIGS = new String[length+1], 0, length);
+ CONFIGS[length] = config;
+ Arrays.sort(CONFIGS);
+ return length;
+}
+
+/*
+ * Store a component in the dynamic list. The list is sorted alphabetically.
+ * Note that the array is rebuilt each time a new component is discovered
+ * as this does not happen so often (e.g. eclipse only has 10 components).
+ */
+private int storeComponent(String component) {
+ if (COMPONENTS== null) {
+ COMPONENTS= new String[1];
+ COMPONENTS[0] = component;
+ return 0;
+ }
+ int idx = Arrays.binarySearch(COMPONENTS, component);
+ if (idx >= 0) return idx;
+ int length = COMPONENTS.length;
+ System.arraycopy(COMPONENTS, 0, COMPONENTS = new String[length+1], 0, length);
+ COMPONENTS[length] = component;
+ Arrays.sort(COMPONENTS);
+ return length;
+}
+
+/*
+ * Store a dimension in the dynamic list. The list is sorted in ascending order.
+ * Note that the array is rebuilt each time a new dimension is discovered
+ * as this does not happen so often (e.g. eclipse only stores two dimensions).
+ */
+public static int storeDimension(int id) {
+ if (DIMENSIONS == null) {
+ DIMENSIONS = new int[1];
+ DIMENSIONS[0] = id;
+ return 0;
+ }
+ int idx = Arrays.binarySearch(DIMENSIONS, id);
+ if (idx >= 0) return idx;
+ int length = DIMENSIONS.length;
+ System.arraycopy(DIMENSIONS, 0, DIMENSIONS = new int[length+1], 0, length);
+ DIMENSIONS[length] = id;
+ Arrays.sort(DIMENSIONS);
+ return length;
+}
+
+/*
+ * Store a dimension in the dynamic list. The list is sorted alphabetically.
+ * Note that the array is rebuilt each time a new dimension is discovered
+ * as this does not happen so often (e.g. eclipse only stores two dimensions).
+ */
+private int storeVm(String vm) {
+ if (VMS == null) {
+ VMS = new String[1];
+ VMS[0] = vm;
+ return 0;
+ }
+ int idx = Arrays.binarySearch(VMS, vm);
+ if (idx >= 0) return idx;
+ int length = VMS.length;
+ System.arraycopy(VMS, 0, VMS = new String[length+1], 0, length);
+ VMS[length] = vm;
+ Arrays.sort(VMS);
+ return length;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/PerformanceResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/PerformanceResults.java
new file mode 100644
index 0000000..7cebe7e
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/PerformanceResults.java
@@ -0,0 +1,955 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.*;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+
+/**
+ * Root class to handle performance results.
+ *
+ * Usually performance results are built for a current build vs. a baseline build.
+ *
+ * This class allow to read all data from releng performance database for given
+ * configurations and scenario pattern.
+ *
+ * Then it provides easy and speedy access to all stored results.
+ */
+public class PerformanceResults extends AbstractResults {
+
+ String[] allBuildNames = null;
+ Map allScenarios;
+ String lastBuildName; // Name of the last used build
+ String baselineName; // Name of the baseline build used for comparison
+ String baselinePrefix;
+ private String scenarioPattern = "%"; //$NON-NLS-1$
+ private String[] components;
+ String[] configNames, sortedConfigNames;
+ String[] configDescriptions, sortedConfigDescriptions;
+ private String configPattern;
+
+ boolean dbRequired;
+ boolean needToUpdateLocalFile;
+
+ /*
+ * Local class helping to guess remaining time while reading results from DB
+ */
+ class RemainingTimeGuess {
+ int all, count;
+ long start;
+ double remaining;
+ RemainingTimeGuess(int all, long start) {
+ this.all = all;
+ this.start = start;
+ }
+ String display() {
+ StringBuffer buffer = new StringBuffer(" [elapsed: "); //$NON-NLS-1$
+ long elapsed = getElapsed();
+ buffer.append(Util.timeChrono(elapsed));
+ if (this.count > 0) {
+ buffer.append(" | left: "); //$NON-NLS-1$
+ long remainingTime = getRemainingTime(elapsed);
+ buffer.append(Util.timeChrono(remainingTime));
+ buffer.append(" | end: "); //$NON-NLS-1$
+ buffer.append(Util.timeEnd(remainingTime));
+ }
+ buffer.append(']');
+ return buffer.toString();
+ }
+ private long getRemainingTime(long elapsed) {
+ return (long) ((((double)elapsed) / this.count) * (this.all - this.count));
+ }
+ private long getElapsed() {
+ return System.currentTimeMillis() - this.start;
+ }
+ }
+
+
+ // Failure threshold
+ public static final int DEFAULT_FAILURE_THRESHOLD = 10;
+ int failure_threshold = DEFAULT_FAILURE_THRESHOLD;
+
+public PerformanceResults(PrintStream stream) {
+ super(null, null);
+ this.printStream = stream;
+ this.dbRequired = false;
+ setDefaults();
+}
+
+public PerformanceResults(String name, String baseline, String baselinePrefix, PrintStream stream) {
+ super(null, name);
+ this.baselineName = baseline;
+ this.baselinePrefix = baselinePrefix;
+ this.printStream = stream;
+ this.dbRequired = true;
+ setDefaults();
+}
+
+/**
+ * Returns the list of all builds currently read.
+ *
+ * @return The names list of all currently known builds
+ */
+public String[] getAllBuildNames() {
+ if (this.allBuildNames == null) {
+ setAllBuildNames();
+ }
+ return this.allBuildNames;
+}
+
+/**
+ * Returns the name of the baseline used for extracted results
+ *
+ * @return The build name of the baseline of <code>null</code>
+ * if no specific baseline is used for the extracted results.
+ */
+public String getBaselineName() {
+ return this.baselineName;
+}
+
+/*
+ * Get the baseline prefix (computed from #baselineName).
+ */
+String getBaselinePrefix() {
+ return this.baselinePrefix;
+}
+
+/*
+ * Get the build date (see #getBuildDate(String, String)).
+ */
+public String getBuildDate() {
+ String buildName = getName();
+ if (buildName == null) return ""; //$NON-NLS-1$
+ return Util.getBuildDate(getName(), getBaselinePrefix());
+}
+
+/**
+ * Return the list of components concerned by performance results.
+ *
+ * @return The list of the components
+ */
+public String[] getComponents() {
+ return this.components;
+}
+
+/**
+ * Get the scenarios of a given component.
+ *
+ * @param componentName The component name. Should not be <code>null</code>
+ * @return A list of {@link ScenarioResults scenario results}
+ */
+public List getComponentScenarios(String componentName) {
+ ComponentResults componentResults = (ComponentResults) getResults(componentName);
+ if (componentResults == null) return null;
+ return Collections.unmodifiableList(componentResults.children);
+}
+
+/**
+ * Get the scenarios which have a summary for a given component.
+ *
+ * @param componentName The component name
+ * @param config Configuration name
+ * @return A list of {@link ScenarioResults scenario results} which have a summary
+ */
+public List getComponentSummaryScenarios(String componentName, String config) {
+ if (componentName == null) {
+ int size = size();
+ List scenarios = new ArrayList();
+ for (int i=0; i< size; i++) {
+ ComponentResults componentResults = (ComponentResults) this.children.get(i);
+ scenarios.addAll(componentResults.getSummaryScenarios(true, config));
+ }
+ return scenarios;
+ }
+ ComponentResults componentResults = (ComponentResults) getResults(componentName);
+ return componentResults.getSummaryScenarios(false, config);
+}
+
+/**
+ * Return the configuration boxes considered for this performance results
+ * sorted or not depending on the given flag.
+ *
+ * @param sort Indicates whether the list must be sorted or not.
+ * The order is defined by the configuration names, not by the box names
+ * @return The list of configuration boxes sorted by configuration names
+ */
+public String[] getConfigBoxes(boolean sort) {
+ return sort ? this.sortedConfigDescriptions : this.configDescriptions;
+}
+
+/**
+ * Return the configuration names considered for this performance results
+ * sorted or not depending on the given flag.
+ *
+ * @param sort Indicates whether the list must be sorted or not
+ * @return The list of configuration names
+ */
+public String[] getConfigNames(boolean sort) {
+ return sort ?this.sortedConfigNames : this.configNames;
+}
+
+/*
+ * Compute a SQL pattern from all stored configuration names.
+ * For example 'eclipseperflnx1', 'eclipseperflnx2' and 'eclipseperflnx3'
+ * will return 'eclipseperflnx_'.
+ */
+String getConfigurationsPattern() {
+ if (this.configPattern == null) {
+ int length = this.sortedConfigNames == null ? 0 : this.sortedConfigNames.length;
+ if (length == 0) return null;
+ this.configPattern = this.sortedConfigNames[0];
+ int refLength = this.configPattern.length();
+ for (int i=1; i<length; i++) {
+ String config = this.sortedConfigNames[i];
+ StringBuffer newConfig = null;
+ if (refLength != config.length()) return null; // strings have not the same length => cannot find a pattern
+ for (int j=0; j<refLength; j++) {
+ char c = this.configPattern.charAt(j);
+ if (config.charAt(j) != c) {
+ if (newConfig == null) {
+ newConfig = new StringBuffer(refLength);
+ if (j == 0) return null; // first char is already different => cannot find a pattern
+ newConfig.append(this.configPattern.substring(0, j));
+ }
+ newConfig.append('_');
+ } else if (newConfig != null) {
+ newConfig.append(c);
+ }
+ }
+ if (newConfig != null) {
+ this.configPattern = newConfig.toString();
+ }
+ }
+ }
+ return this.configPattern;
+}
+
+/**
+ * Return the name of the last build name except baselines.
+ *
+ * @return the name of the last build
+ */
+public String getLastBuildName() {
+ return getLastBuildName(1/*all except baselines*/);
+}
+/**
+ * Return the name of the last build name
+ *
+ * @param kind Decide what kind of build is taken into account
+ * 0: all kind of build
+ * 1: all except baseline builds
+ * 2: all except baseline and nightly builds
+ * 3: only integration builds
+ * @return the name of the last build of the selected kind
+ */
+public String getLastBuildName(int kind) {
+ if (this.name == null) {
+ getAllBuildNames(); // init build names if necessary
+ int idx = this.allBuildNames.length-1;
+ this.name = this.allBuildNames[idx];
+ if (kind > 0) {
+ loop: while (idx-- >= 0) {
+ switch (this.name.charAt(0)) {
+ case 'N':
+ if (kind < 2) break loop;
+ break;
+ case 'M':
+ if (kind < 3) break loop;
+ break;
+ case 'I':
+ if (kind < 4) break loop;
+ break;
+ }
+ this.name = this.allBuildNames[idx];
+ }
+ }
+ }
+ return this.name;
+}
+
+public String getName() {
+ if (this.name == null) {
+ setAllBuildNames();
+ }
+ return this.name;
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.AbstractResults#getPerformance()
+ */
+PerformanceResults getPerformance() {
+ return this;
+}
+
+/**
+ * Get the results of a given scenario.
+ *
+ * @param scenarioName The scenario name
+ * @return The {@link ScenarioResults scenario results}
+ */
+public ScenarioResults getScenarioResults(String scenarioName) {
+ ComponentResults componentResults = (ComponentResults) getResults(DB_Results.getComponentNameFromScenario(scenarioName));
+ return componentResults == null ? null : (ScenarioResults) componentResults.getResults(scenarioName);
+}
+
+/*
+ * Init configurations from performance results database.
+ */
+private void initConfigs() {
+ // create config names
+ this.configNames = DB_Results.getConfigs();
+ this.configDescriptions = DB_Results.getConfigDescriptions();
+ int length = this.configNames.length;
+ this.sortedConfigNames = new String[length];
+ for (int i = 0; i < length; i++) {
+ this.sortedConfigNames[i] = this.configNames[i];
+ }
+
+ // Sort the config names
+ Arrays.sort(this.sortedConfigNames);
+ this.sortedConfigDescriptions = new String[length];
+ for (int i=0; i<length; i++) {
+ for (int j=0; j<length; j++) {
+ if (this.sortedConfigNames[i] == this.configNames[j]) { // == is intentional!
+ this.sortedConfigDescriptions[i] = this.configDescriptions[j];
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * Read or update data for a build from a directory supposed to have local files.
+ */
+private String[] read(boolean local, String buildName, String[][] configs, boolean force, File dataDir, String taskName, SubMonitor subMonitor) {
+ if (local && dataDir == null) {
+ throw new IllegalArgumentException("Must specify a directory to read local files!"); //$NON-NLS-1$
+ }
+ subMonitor.setWorkRemaining(100);
+
+ // Update info
+ long start = System.currentTimeMillis();
+ int allScenariosSize;
+ if (DB_Results.DB_CONNECTION) {
+ try {
+ // Read all scenarios
+ allScenariosSize = readScenarios(buildName, subMonitor.newChild(10)) ;
+ if (allScenariosSize < 0) {
+ return null;
+ }
+
+ // Read all builds
+ DB_Results.queryAllVariations(getConfigurationsPattern());
+
+ // Refresh configs
+ if (configs == null) {
+ initConfigs();
+ } else {
+ setConfigInfo(configs);
+ }
+ } catch (OperationCanceledException e) {
+ return null;
+ }
+ } else {
+ if (this.allScenarios == null) return null;
+ allScenariosSize = this.allScenarios.size();
+ if (configs != null) {
+ setConfigInfo(configs);
+ }
+ }
+
+ // Create corresponding children
+ int componentsLength = this.components.length;
+ subMonitor.setWorkRemaining(componentsLength);
+ RemainingTimeGuess timeGuess = null;
+ for (int i=0; i<componentsLength; i++) {
+ String componentName = this.components[i];
+ List scenarios = this.allScenarios == null ? null : (List) this.allScenarios.get(componentName);
+
+ // Manage monitor
+ int percentage = (int) ((((double)(i+1)) / (componentsLength+1)) * 100);
+ StringBuffer tnBuffer= taskName==null ? new StringBuffer() : new StringBuffer(taskName);
+ tnBuffer.append(" ("); //$NON-NLS-1$
+ if (buildName != null) {
+ tnBuffer.append(buildName).append(": "); //$NON-NLS-1$
+ }
+ tnBuffer.append(percentage).append("%)"); //$NON-NLS-1$
+ subMonitor.setTaskName(tnBuffer.toString());
+ StringBuffer subTaskBuffer = new StringBuffer("Component "); //$NON-NLS-1$
+ subTaskBuffer.append(componentName);
+ subTaskBuffer.append("..."); //$NON-NLS-1$
+ subMonitor.subTask(subTaskBuffer.toString());
+
+ // Get component results
+ if (scenarios == null && !local) continue;
+ ComponentResults componentResults;
+ if (local || (buildName == null && force)) {
+ componentResults = new ComponentResults(this, componentName);
+ addChild(componentResults, true);
+ } else {
+ componentResults = (ComponentResults) getResults(componentName);
+ if (componentResults == null) {
+ componentResults = new ComponentResults(this, componentName);
+ addChild(componentResults, true);
+ }
+ }
+
+ // Read the component results
+ if (local) {
+ try {
+ componentResults.readLocalFile(dataDir, scenarios);
+ }
+ catch (FileNotFoundException ex) {
+ return null;
+ }
+ subMonitor.worked(1);
+ } else {
+ if (timeGuess == null) {
+ timeGuess = new RemainingTimeGuess(1+componentsLength+allScenariosSize, start);
+ }
+ componentResults.updateBuild(buildName, scenarios, force, dataDir, subMonitor.newChild(1), timeGuess);
+ }
+ if (subMonitor.isCanceled()) return null;
+ }
+
+ // Update names
+ setAllBuildNames();
+ writeData(dataDir);
+
+ // Print time
+ printGlobalTime(start);
+
+ return this.allBuildNames;
+}
+
+/**
+ * Read all data from performance database for the given configurations
+ * and scenario pattern.
+ *
+ * This method is typically called when generated performance results
+ * from a non-UI application.
+ *
+ * @param buildName The name of the build
+ * @param configs All configurations to extract results. If <code>null</code>,
+ * then all known configurations ({@link DB_Results#getConfigs()}) are read.
+ * @param pattern The pattern of the concerned scenarios
+ * @param dataDir The directory where data will be read/stored locally.
+ * If <code>null</code>, then database will be read instead and no storage
+ * will be performed
+ * @param threshold The failure percentage threshold over which a build result
+ * value compared to the baseline is considered as failing.
+ * @param monitor The progress monitor
+ *
+ * @return All known build names
+ */
+public String[] readAll(String buildName, String[][] configs, String pattern, File dataDir, int threshold, IProgressMonitor monitor) {
+
+ // Init
+ this.scenarioPattern = pattern == null ? "%" : pattern; //$NON-NLS-1$
+ this.failure_threshold = threshold;
+ SubMonitor subMonitor = SubMonitor.convert(monitor, 1000);
+
+ // Set default names
+ setDefaults();
+
+ // Read local data files first
+ reset(dataDir);
+ String[] names = read(true, null, configs, true, dataDir, null, subMonitor.newChild(100));
+ if (names==null) {
+ // if one local files is missing then force a full DB read!
+ // TODO moderate this to force the DB read only for the missing file...
+ return read(false, null, configs, true, dataDir, null, subMonitor.newChild(900));
+ }
+
+ // Search build name in read data
+ boolean buildMissing = true;
+ if (buildName != null) {
+ this.name = buildName;
+ buildMissing = Arrays.binarySearch(names, buildName, Util.BUILD_DATE_COMPARATOR) < 0;
+ }
+
+ // Look for missing builds
+ if (buildMissing) {
+ String[] builds = DB_Results.getBuilds();
+ Arrays.sort(builds, Util.BUILD_DATE_COMPARATOR);
+ for (int i=builds.length-1; i>=0; i--) {
+ if (Arrays.binarySearch(names, builds[i], Util.BUILD_DATE_COMPARATOR) >= 0) {
+ break;
+ }
+ read(false, builds[i], configs, true, dataDir, null, subMonitor.newChild(900));
+ }
+ }
+ return this.allBuildNames;
+}
+
+/**
+ * Read all data from performance database for the given configurations
+ * and scenario pattern.
+ *
+ * Note that calling this method flush all previous read data.
+ *
+ * @param dataDir The directory where local files are located
+ * @param monitor The progress monitor
+ */
+public void readLocal(File dataDir, IProgressMonitor monitor) {
+
+ // Print title
+ String taskName = "Read local performance results"; //$NON-NLS-1$
+ println(taskName);
+
+ // Create monitor
+ SubMonitor subMonitor = SubMonitor.convert(monitor, 1000);
+ subMonitor.setTaskName(taskName);
+
+ // Read
+ reset(dataDir);
+ read(true, null, null, true, dataDir, taskName, subMonitor);
+}
+
+void readLocalFile(File dir) {
+ if (!dir.exists()) return;
+ File dataFile = new File(dir, "performances.dat"); //$NON-NLS-1$
+ if (!dataFile.exists()) return;
+ DataInputStream stream = null;
+ try {
+ // Read local file info
+ stream = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
+
+ // Read build info
+ String str = stream.readUTF();
+ this.needToUpdateLocalFile = this.name == null || Util.getBuildDate(this.name).compareTo(Util.getBuildDate(str)) > 0;
+ if (this.name != null && Util.getBuildDate(this.name).compareTo(Util.getBuildDate(str)) >= 0) {
+ return;
+ }
+ println(" - read performance results local files info: "); //$NON-NLS-1$
+ println(" + name : "+str);
+ this.name = str == "" ? null : str;
+ str = stream.readUTF();
+ println(" + baseline : "+str);
+ if (this.baselineName == null) {
+ this.baselineName = str == "" ? null : str;
+ }
+ str = stream.readUTF();
+ println(" + baseline prefix: "+str);
+ this.baselinePrefix = str == "" ? null : str;
+
+ // Write configs info
+ int length = stream.readInt();
+ println(" + "+length+" configs");
+ this.configNames = new String[length];
+ this.sortedConfigNames = new String[length];
+ this.configDescriptions = new String[length];
+ this.sortedConfigDescriptions = new String[length];
+ for (int i = 0; i < length; i++) {
+ this.configNames[i] = stream.readUTF();
+ this.sortedConfigNames[i] = this.configNames[i];
+ this.configDescriptions[i] = stream.readUTF();
+ this.sortedConfigDescriptions[i] = this.configDescriptions[i];
+ }
+ DB_Results.setConfigs(this.configNames);
+ DB_Results.setConfigDescriptions(this.configDescriptions);
+
+ // Write builds info
+ length = stream.readInt();
+ println(" + "+length+" builds");
+ this.allBuildNames = new String[length];
+ for (int i = 0; i < length; i++) {
+ this.allBuildNames[i] = stream.readUTF();
+ }
+
+ // Write scenarios info
+ length = stream.readInt();
+ println(" + "+length+" components");
+ this.components = new String[length];
+ this.allScenarios = new HashMap();
+ for (int i = 0; i < length; i++) {
+ this.components[i] = stream.readUTF();
+ int size = stream.readInt();
+ List scenarios = new ArrayList(size);
+ for (int j=0; j<size; j++) {
+ scenarios.add(new ScenarioResults(stream.readInt(), stream.readUTF(), stream.readUTF()));
+ }
+ this.allScenarios.put(this.components[i], scenarios);
+ }
+ println(" => read from file "+dataFile); //$NON-NLS-1$
+ } catch (IOException ioe) {
+ println(" !!! "+dataFile+" should be deleted as it contained invalid data !!!"); //$NON-NLS-1$ //$NON-NLS-2$
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // nothing else to do!
+ }
+ }
+}
+
+private int readScenarios(String buildName, SubMonitor subMonitor) throws OperationCanceledException {
+ subMonitor.setWorkRemaining(10);
+ long start = System.currentTimeMillis();
+ String titleSuffix;
+ if (buildName == null) {
+ titleSuffix = "all database scenarios..."; //$NON-NLS-1$
+ } else {
+ titleSuffix = "all database scenarios for "+buildName+" build..."; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ print(" + get "+titleSuffix); //$NON-NLS-1$
+ subMonitor.subTask("Get "+titleSuffix); //$NON-NLS-1$
+ this.allScenarios = DB_Results.queryAllScenarios(this.scenarioPattern, buildName);
+ if (this.allScenarios == null) return -1;
+ int allScenariosSize = 0;
+ List componentsSet = new ArrayList(this.allScenarios.keySet());
+ Collections.sort(componentsSet);
+ int componentsSize = componentsSet.size();
+ componentsSet.toArray(this.components = new String[componentsSize]);
+ for (int i=0; i<componentsSize; i++) {
+ String componentName = this.components[i];
+ List scenarios = (List) this.allScenarios.get(componentName);
+ allScenariosSize += scenarios.size();
+ }
+ println(" -> "+allScenariosSize+" found in "+(System.currentTimeMillis()-start)+"ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ subMonitor.worked(10);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+ return allScenariosSize;
+}
+
+void reset(File dataDir) {
+ this.allBuildNames = null;
+ this.children = new ArrayList();
+// this.name = null;
+ this.components = null;
+ this.allScenarios = null;
+ readLocalFile(dataDir);
+}
+
+private void setAllBuildNames() {
+ SortedSet builds = new TreeSet(Util.BUILD_DATE_COMPARATOR);
+ int size = size();
+ if (size == 0) return;
+ for (int i=0; i<size; i++) {
+ ComponentResults componentResults = (ComponentResults) this.children.get(i);
+ Set names = componentResults.getAllBuildNames();
+ builds.addAll(names);
+ }
+ int buildsSize = builds.size();
+ this.allBuildNames = new String[buildsSize];
+ if (buildsSize > 0) {
+ int n = 0;
+ Iterator buildNames = builds.iterator();
+ while (buildNames.hasNext()) {
+ String buildName = (String) buildNames.next();
+ if (this.lastBuildName == null || Util.getBuildDate(buildName).compareTo(Util.getBuildDate(this.lastBuildName)) <= 0) {
+ this.allBuildNames[n++] = buildName;
+ }
+ }
+ if (n < buildsSize) {
+ System.arraycopy(this.allBuildNames, 0, this.allBuildNames = new String[n], 0, n);
+ }
+ int idx = n-1;
+ String lastBuild = this.allBuildNames[idx--];
+ while (lastBuild.startsWith(DB_Results.getDbBaselinePrefix())) {
+ lastBuild = this.allBuildNames[idx--];
+ }
+ this.needToUpdateLocalFile = this.name == null || Util.getBuildDate(lastBuild).compareTo(Util.getBuildDate(this.name)) > 0;
+ this.name = lastBuild;
+ if (this.baselineName != null) {
+ String lastBuildDate = Util.getBuildDate(lastBuild);
+ if (Util.getBuildDate(this.baselineName).compareTo(lastBuildDate) > 0) {
+ this.baselineName = DB_Results.getLastBaselineBuild(lastBuildDate);
+ }
+ }
+ }
+}
+
+private void setConfigInfo(String[][] configs) {
+ if (configs == null) return;
+
+ // Store config information
+ int length = configs.length;
+ this.configNames = new String[length];
+ this.sortedConfigNames = new String[length];
+ this.configDescriptions = new String[length];
+ for (int i=0; i<length; i++) {
+ this.configNames[i] = this.sortedConfigNames[i] = configs[i][0];
+ this.configDescriptions[i] = configs[i][1];
+ }
+
+ // Sort the config names
+ Arrays.sort(this.sortedConfigNames);
+ length = this.sortedConfigNames.length;
+ this.sortedConfigDescriptions = new String[length];
+ for (int i=0; i<length; i++) {
+ for (int j=0; j<length; j++) {
+ if (this.sortedConfigNames[i] == this.configNames[j]) { // == is intentional!
+ this.sortedConfigDescriptions[i] = this.configDescriptions[j];
+ break;
+ }
+ }
+ }
+}
+
+
+/**
+ * Set the name of the baseline used for extracted results
+ *
+ * @param buildName The name of the baseline build
+ */
+public void setBaselineName(String buildName) {
+ this.baselineName = buildName;
+}
+
+private void setDefaults() {
+
+ // Set builds if none
+ if (size() == 0 && DB_Results.DB_CONNECTION) {
+ this.allBuildNames = DB_Results.getBuilds();
+ this.components = DB_Results.getComponents();
+ initConfigs();
+ }
+
+ // Set name if null
+ if (this.name == null) {
+ setAllBuildNames();
+ if (this.name == null) { // does not know any build
+ this.name = DB_Results.getLastCurrentBuild();
+ if (this.dbRequired) {
+ if (this.name == null) {
+ throw new RuntimeException("Cannot find any current build!"); //$NON-NLS-1$
+ }
+ this.allBuildNames = DB_Results.getBuilds();
+ this.components = DB_Results.getComponents();
+ initConfigs();
+ }
+ if (this.printStream != null) {
+ this.printStream.println(" + no build specified => use last one: "+this.name); //$NON-NLS-1$
+ }
+ }
+ }
+
+ // Init baseline name if not set
+ if (this.baselineName == null && getName() != null) {
+ String buildDate = Util.getBuildDate(getName());
+ this.baselineName = DB_Results.getLastBaselineBuild(buildDate);
+ if (this.baselineName == null && this.dbRequired) {
+ throw new RuntimeException("Cannot find any baseline to refer!"); //$NON-NLS-1$
+ }
+ if (this.printStream != null) {
+ this.printStream.println(" + no baseline specified => use last one: "+this.baselineName); //$NON-NLS-1$
+ }
+ }
+
+ // Init baseline prefix if not set
+ if (this.baselinePrefix == null && this.baselineName != null) {
+ // Assume that baseline name format is *always* x.y_yyyyMMddhhmm_yyyyMMddhhmm
+ int index = this.baselineName.lastIndexOf('_');
+ if (index > 0) {
+ this.baselinePrefix = this.baselineName.substring(0, index);
+ } else {
+ this.baselinePrefix = DB_Results.getDbBaselinePrefix();
+ }
+ }
+
+ // Set scenario pattern default
+ if (this.scenarioPattern == null) {
+ this.scenarioPattern = "%"; //$NON-NLS-1$
+ }
+
+ // Flush print stream
+ if (this.printStream != null) {
+ this.printStream.println();
+ this.printStream.flush();
+ }
+}
+
+public void setLastBuildName(String lastBuildName) {
+ this.lastBuildName = lastBuildName;
+// if (lastBuildName == null) {
+// int idx = this.allBuildNames.length-1;
+// String lastBuild = this.allBuildNames[idx--];
+// while (this.name.startsWith(DB_Results.getDbBaselinePrefix())) {
+// lastBuild = this.allBuildNames[idx--];
+// }
+// this.name = lastBuild;
+// } else {
+// this.name = lastBuildName;
+// }
+}
+
+/**
+ * Update a given build information with database contents.
+ *
+ * @param builds The builds to read new data
+ * @param force Force the update from the database, even if the build is
+ * already known.
+ * @param dataDir The directory where data should be stored locally if necessary.
+ * If <code>null</code>, then information changes won't be persisted.
+ * @param monitor The progress monitor
+ * @return All known builds
+ */
+public String[] updateBuilds(String[] builds, boolean force, File dataDir, IProgressMonitor monitor) {
+
+ // Print title
+ StringBuffer buffer = new StringBuffer("Update data for "); //$NON-NLS-1$
+ int length = builds == null ? 0 : builds.length;
+ switch (length) {
+ case 0:
+ buffer.append("all builds"); //$NON-NLS-1$
+ reset(dataDir);
+ break;
+ case 1:
+ buffer.append("one build"); //$NON-NLS-1$
+ break;
+ default:
+ buffer.append("several builds"); //$NON-NLS-1$
+ break;
+ }
+ String taskName = buffer.toString();
+ println(buffer);
+
+ // Create sub-monitor
+ SubMonitor subMonitor = SubMonitor.convert(monitor, 1000*length);
+ subMonitor.setTaskName(taskName);
+
+ // Read
+ for (int i=0; i<length; i++) {
+ read(false, builds[i], null, force, dataDir, taskName, subMonitor.newChild(1000));
+ }
+
+ // Return new builds list
+ return this.allBuildNames;
+}
+
+/**
+ * Update a given build information with database contents.
+ *
+ * @param buildName The build name to read new data
+ * @param force Force the update from the database, even if the build is
+ * already known.
+ * @param dataDir The directory where data should be stored locally if necessary.
+ * If <code>null</code>, then information changes won't be persisted.
+ * @param monitor The progress monitor
+ * @return All known builds
+ */
+public String[] updateBuild(String buildName, boolean force, File dataDir, IProgressMonitor monitor) {
+
+ // Print title
+ StringBuffer buffer = new StringBuffer("Update data for "); //$NON-NLS-1$
+ if (buildName == null) {
+ buffer.append("all builds"); //$NON-NLS-1$
+ reset(dataDir);
+ } else {
+ buffer.append("one build"); //$NON-NLS-1$
+ }
+ String taskName = buffer.toString();
+ println(buffer);
+
+ // Create sub-monitor
+ SubMonitor subMonitor = SubMonitor.convert(monitor, 1000);
+ subMonitor.setTaskName(taskName);
+
+ // Read
+ read(false, buildName, null, force, dataDir, taskName, subMonitor);
+
+ // Refresh name
+ if (buildName != null && !buildName.startsWith(DB_Results.getDbBaselinePrefix())) {
+ this.name = buildName;
+ }
+
+ // Return new list all build names
+ return this.allBuildNames;
+}
+
+/*
+ * Write general information.
+ */
+void writeData(File dir) {
+ if (!DB_Results.DB_CONNECTION) {
+ // Only write new local file if there's a database connection
+ // otherwise contents may not be complete...
+ return;
+ }
+ if (dir ==null || (!dir.exists() && !dir.mkdirs())) {
+ System.err.println("can't create directory " + dir); //$NON-NLS-1$
+ return;
+ }
+ File dataFile = new File(dir, "performances.dat"); //$NON-NLS-1$
+ if (dataFile.exists()) {
+ if (!this.needToUpdateLocalFile) {
+ return;
+ }
+ dataFile.delete();
+ }
+ try {
+ DataOutputStream stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
+
+ // Write build info
+ stream.writeUTF(this.name == null ? DB_Results.getLastCurrentBuild() : this.name);
+ stream.writeUTF(this.baselineName == null ? DB_Results.getLastBaselineBuild(null) : this.baselineName);
+ stream.writeUTF(this.baselinePrefix == null ? "" : this.baselinePrefix);
+
+ // Write configs info
+ int length = this.sortedConfigNames.length;
+ stream.writeInt(length);
+ for (int i = 0; i < length; i++) {
+ stream.writeUTF(this.sortedConfigNames[i]);
+ stream.writeUTF(this.sortedConfigDescriptions[i]);
+ }
+
+ // Write builds info
+ String[] builds = this.allBuildNames == null ? DB_Results.getBuilds() : this.allBuildNames;
+ length = builds.length;
+ stream.writeInt(length);
+ for (int i = 0; i < length; i++) {
+ stream.writeUTF(builds[i]);
+ }
+
+ // Write scenarios info
+ length = this.components.length;
+ stream.writeInt(length);
+ for (int i = 0; i < length; i++) {
+ stream.writeUTF(this.components[i]);
+ List scenarios = (List) this.allScenarios.get(this.components[i]);
+ int size = scenarios.size();
+ stream.writeInt(size);
+ for (int j=0; j<size; j++) {
+ final ScenarioResults scenarioResults = (ScenarioResults)scenarios.get(j);
+ stream.writeInt(scenarioResults.getId());
+ stream.writeUTF(scenarioResults.getName());
+ stream.writeUTF(scenarioResults.getLabel());
+ }
+ }
+
+ // Close
+ stream.close();
+ println(" => performance results general data written in file " + dataFile); //$NON-NLS-1$
+ } catch (FileNotFoundException e) {
+ System.err.println("can't create output file" + dataFile); //$NON-NLS-1$
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/SQL_Results.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/SQL_Results.java
new file mode 100644
index 0000000..a4e1aff
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/SQL_Results.java
@@ -0,0 +1,289 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+
+import org.eclipse.test.internal.performance.InternalDimensions;
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.db.SQL;
+
+/**
+ * Specific implementation for massive database requests.
+ */
+public class SQL_Results extends SQL {
+
+private PreparedStatement queryBuildAllScenarios,
+ queryBuildScenarios,
+ queryScenarioSummaries,
+ queryAllComments,
+ queryScenariosBuilds,
+ queryScenarioDataPoints,
+ queryScenarioTimestampDataPoints,
+ queryScenarioBuildDataPoints,
+ queryDimScalars,
+ queryAllVariations;
+
+SQL_Results(Connection con) throws SQLException {
+ super(con);
+ // TODO Auto-generated constructor stub
+ }
+
+protected void dispose() throws SQLException {
+ super.dispose();
+ if (this.queryBuildScenarios != null)
+ this.queryBuildScenarios.close();
+ if (this.queryBuildAllScenarios != null)
+ this.queryBuildAllScenarios.close();
+ if (this.queryScenarioSummaries != null)
+ this.queryScenarioSummaries.close();
+ if (this.queryAllComments != null)
+ this.queryAllComments.close();
+ if (this.queryScenariosBuilds != null)
+ this.queryScenariosBuilds.close();
+ if (this.queryScenarioDataPoints != null)
+ this.queryScenarioDataPoints.close();
+ if (this.queryDimScalars != null)
+ this.queryDimScalars.close();
+ if (this.queryAllVariations != null)
+ this.queryAllVariations.close();
+}
+
+/**
+ * Get all comments from database
+ *
+ * @return A set of the query result
+ * @throws SQLException
+ */
+ResultSet queryAllComments() throws SQLException {
+ if (this.queryAllComments == null)
+ this.queryAllComments = this.fConnection.prepareStatement("select ID, KIND, TEXT from COMMENT"); //$NON-NLS-1$
+ return this.queryAllComments.executeQuery();
+}
+
+/**
+ * Get all variations from database.
+ *
+ * @param configPattern The pattern for all the concerned configurations
+ * @return A set of the query result
+ * @throws SQLException
+ */
+ResultSet queryAllVariations(String configPattern) throws SQLException {
+ long start = System.currentTimeMillis();
+ if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print("[SQL query (config pattern="+configPattern); //$NON-NLS-1$
+ if (this.queryAllVariations == null) {
+ this.queryAllVariations = this.fConnection.prepareStatement("select KEYVALPAIRS from VARIATION where KEYVALPAIRS like ? order by KEYVALPAIRS"); //$NON-NLS-1$
+ }
+ this.queryAllVariations.setString(1, "%"+configPattern+"%"); //$NON-NLS-1$ //$NON-NLS-2$
+ ResultSet resultSet = this.queryAllVariations.executeQuery();
+ if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print(")=" + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ return resultSet;
+}
+
+/**
+ * Query all scenarios corresponding to the default scenario pattern
+ *
+ * @param scenarioPattern The pattern for all the concerned scenarios
+ * @return Set of the query result
+ * @throws SQLException
+ */
+ResultSet queryBuildAllScenarios(String scenarioPattern) throws SQLException {
+ if (this.queryBuildAllScenarios == null) {
+ String statement = "select distinct SCENARIO.ID, SCENARIO.NAME , SCENARIO.SHORT_NAME from SCENARIO where " + //$NON-NLS-1$
+ "SCENARIO.NAME LIKE ? " + //$NON-NLS-1$
+ "order by SCENARIO.NAME"; //$NON-NLS-1$
+ this.queryBuildAllScenarios = this.fConnection.prepareStatement(statement);
+ }
+ this.queryBuildAllScenarios.setString(1, scenarioPattern);
+ return this.queryBuildAllScenarios.executeQuery();
+}
+
+/**
+ * Query all scenarios corresponding to a given scenario pattern
+ * and for a specific build name.
+ *
+ * @param scenarioPattern The pattern for all the concerned scenarios
+ * @param buildName The name of the concerned build
+ * @return Set of the query result
+ * @throws SQLException
+ */
+ResultSet queryBuildScenarios(String scenarioPattern, String buildName) throws SQLException {
+ if (this.queryBuildScenarios == null) {
+ String statement = "select distinct SCENARIO.ID, SCENARIO.NAME , SCENARIO.SHORT_NAME from SCENARIO, SAMPLE, VARIATION where " + //$NON-NLS-1$
+ "SAMPLE.VARIATION_ID = VARIATION.ID and VARIATION.KEYVALPAIRS LIKE ? and " + //$NON-NLS-1$
+ "SAMPLE.SCENARIO_ID = SCENARIO.ID and SCENARIO.NAME LIKE ? " + //$NON-NLS-1$
+ "order by SCENARIO.NAME"; //$NON-NLS-1$
+ this.queryBuildScenarios = this.fConnection.prepareStatement(statement);
+ }
+ this.queryBuildScenarios.setString(1, "|build=" + buildName + '%'); //$NON-NLS-1$
+ this.queryBuildScenarios.setString(2, scenarioPattern);
+ return this.queryBuildScenarios.executeQuery();
+}
+
+/**
+ * Query all scalars for a given data point.
+ *
+ * @param datapointId The id of the data point
+ * @return Set of the query result
+ * @throws SQLException
+ */
+ResultSet queryDimScalars(int datapointId) throws SQLException {
+ if (this.queryDimScalars == null) {
+ StringBuffer buffer = new StringBuffer("select DIM_ID, VALUE from SCALAR where "); //$NON-NLS-1$
+ buffer.append("DATAPOINT_ID = ? and "); //$NON-NLS-1$
+ Dim[] dimensions = DB_Results.getResultsDimensions();
+ int length = dimensions.length;
+ for (int i=0; i<length; i++) {
+ if (i==0) {
+ buffer.append("(");
+ } else {
+ buffer.append(" or ");
+ }
+ buffer.append("DIM_ID = ");
+ buffer.append(dimensions[i].getId());
+ }
+ buffer.append(") order by DIM_ID");
+ this.queryDimScalars = this.fConnection.prepareStatement(buffer.toString());
+ }
+ this.queryDimScalars.setInt(1, datapointId);
+ return this.queryDimScalars.executeQuery();
+}
+
+/**
+ * Get all data points for a given scenario and configuration.
+ *
+ * @param config The name of the concerned configuration
+ * @param scenarioID The id of the scenario
+ * @param lastBuildName Name of the last build on which data were stored locally
+ * @param lastBuildTime Date in ms of the last build on which data were stored locally
+ * @return A set of the query result
+ * @throws SQLException
+ */
+ResultSet queryScenarioTimestampDataPoints(String config, int scenarioID, String lastBuildName, long lastBuildTime) throws SQLException {
+ if (DB_Results.LOG) DB_Results.LOG_WRITER.starts(" + SQL query (config="+config+", scenario ID="+scenarioID+", build name="+lastBuildName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (this.queryScenarioTimestampDataPoints== null) {
+ String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from SAMPLE, DATAPOINT, VARIATION where " + //$NON-NLS-1$
+ "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$
+ "DATAPOINT.SAMPLE_ID = SAMPLE.ID and " + //$NON-NLS-1$
+ "SAMPLE.STARTTIME > ? and " + //$NON-NLS-1$
+ "SAMPLE.VARIATION_ID = VARIATION.ID " + //$NON-NLS-1$
+ "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$
+ this.queryScenarioTimestampDataPoints = this.fConnection.prepareStatement(statement);
+ }
+ this.queryScenarioTimestampDataPoints.setInt(1, scenarioID);
+ Timestamp timestamp = new Timestamp(lastBuildTime+(5*3600L*1000)); // create a time-stamp 5h after the given build time
+ this.queryScenarioTimestampDataPoints.setTimestamp(2, timestamp);
+ ResultSet resultSet = this.queryScenarioTimestampDataPoints.executeQuery();
+ if (DB_Results.LOG) DB_Results.LOG_WRITER.ends(")"); //$NON-NLS-1$
+ return resultSet;
+}
+ResultSet queryScenarioBuildDataPoints(String config, int scenarioID, String buildName) throws SQLException {
+ if (DB_Results.LOG) DB_Results.LOG_WRITER.starts(" + SQL query (config="+config+", scenario ID="+scenarioID+", build name="+buildName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (this.queryScenarioBuildDataPoints== null) {
+ String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from SAMPLE, DATAPOINT, VARIATION where " + //$NON-NLS-1$
+ "SAMPLE.VARIATION_ID = VARIATION.ID and VARIATION.KEYVALPAIRS LIKE ? and " + //$NON-NLS-1$
+ "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$
+ "DATAPOINT.SAMPLE_ID = SAMPLE.ID " + //$NON-NLS-1$
+ "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$
+ this.queryScenarioBuildDataPoints = this.fConnection.prepareStatement(statement);
+ }
+ this.queryScenarioBuildDataPoints.setString(1, "|build=" + buildName + '%'); //$NON-NLS-1$
+ this.queryScenarioBuildDataPoints.setInt(2, scenarioID);
+ ResultSet resultSet = this.queryScenarioBuildDataPoints.executeQuery();
+ if (DB_Results.LOG) DB_Results.LOG_WRITER.ends(")"); //$NON-NLS-1$
+ return resultSet;
+}
+
+/**
+ * Get all data points for a given scenario and configuration.
+ *
+ * @param config The name of the concerned configuration
+ * @param scenarioID The id of the scenario
+ * @return A set of the query result
+ * @throws SQLException
+ */
+ResultSet queryScenarioDataPoints(String config, int scenarioID) throws SQLException {
+ long start = System.currentTimeMillis();
+ if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print("[SQL query (config="+config+", scenario ID="+scenarioID); //$NON-NLS-1$ //$NON-NLS-2$
+ if (this.queryScenarioDataPoints== null) {
+ String statement = "select DATAPOINT.ID, DATAPOINT.STEP, VARIATION.KEYVALPAIRS from VARIATION, SAMPLE, DATAPOINT where " + //$NON-NLS-1$
+ "VARIATION.KEYVALPAIRS like ? and SAMPLE.VARIATION_ID = VARIATION.ID and " + //$NON-NLS-1$
+ "SAMPLE.SCENARIO_ID = ? and " + //$NON-NLS-1$
+ "DATAPOINT.SAMPLE_ID = SAMPLE.ID " + //$NON-NLS-1$
+ "ORDER BY DATAPOINT.ID, DATAPOINT.STEP"; //$NON-NLS-1$
+ this.queryScenarioDataPoints = this.fConnection.prepareStatement(statement);
+ }
+ this.queryScenarioDataPoints.setString(1, "%"+config+"%"); //$NON-NLS-1$ //$NON-NLS-2$
+ this.queryScenarioDataPoints.setInt(2, scenarioID);
+ ResultSet resultSet = this.queryScenarioDataPoints.executeQuery();
+ if (DB_Results.DEBUG) DB_Results.DEBUG_WRITER.print(")=" + (System.currentTimeMillis() - start) + "ms]"); //$NON-NLS-1$ //$NON-NLS-2$
+ return resultSet;
+}
+
+/**
+ * Query all summaries from database for a given scenario,
+ * configuration and builds.
+ *
+ * @param config The name of the concerned configuration
+ * @param scenarioID The id of the scenario
+ * @param builds The list of builds to get summaries. When <code>null</code>
+ * summaries for all DB builds will be read.
+ *
+ * @return Set of the query result
+ * @throws SQLException
+ */
+ResultSet queryScenarioSummaries(int scenarioID, String config, String[] builds) throws SQLException {
+ int length = builds==null ? 0 : builds.length;
+ String buildPattern;
+ switch (length) {
+ case 0:
+ buildPattern = "%"; //$NON-NLS-1$
+ break;
+ case 1:
+ buildPattern = builds[0];
+ break;
+ default:
+ StringBuffer buffer = new StringBuffer();
+ loop: for (int idx=0; idx < builds[0].length(); idx++) {
+ char ch = builds[0].charAt(idx);
+ for (int i=1; i<length; i++) {
+ if (idx == builds[i].length()) {
+ break loop;
+ }
+ if (builds[i].charAt(idx) != ch) {
+ buffer.append('_');
+ continue loop;
+ }
+ }
+ buffer.append(ch);
+ }
+ buffer.append("%"); //$NON-NLS-1$
+ buildPattern = buffer.toString();
+ break;
+ }
+ if (this.queryScenarioSummaries == null) {
+ this.queryScenarioSummaries= this.fConnection.prepareStatement("select KEYVALPAIRS , IS_GLOBAL, COMMENT_ID, DIM_ID from VARIATION, SUMMARYENTRY where " + //$NON-NLS-1$
+ "KEYVALPAIRS like ? and " + //$NON-NLS-1$
+ "VARIATION_ID = VARIATION.ID and " + //$NON-NLS-1$
+ "SCENARIO_ID = ? and " + //$NON-NLS-1$
+ "(DIM_ID = "+InternalDimensions.ELAPSED_PROCESS.getId()+" or DIM_ID = 0)" + //$NON-NLS-1$ //$NON-NLS-2$
+ " order by VARIATION_ID, DIM_ID"); //$NON-NLS-1$
+ }
+ this.queryScenarioSummaries.setString(1, "|build="+buildPattern+"||config="+ config + "||jvm=sun|"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ this.queryScenarioSummaries.setInt(2, scenarioID);
+ return this.queryScenarioSummaries.executeQuery();
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ScenarioResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ScenarioResults.java
new file mode 100644
index 0000000..fb6dfe0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/db/ScenarioResults.java
@@ -0,0 +1,407 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.db;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+
+/**
+ * Class to handle performance results of a component's scenario
+ * (for example 'org.eclipse.jdt.core.FullSourceWorkspaceSearchTest#searchAllTypeNames()').
+ *
+ * It gives access to results for each configuration run on this scenario.
+ *
+ * @see ConfigResults
+ */
+public class ScenarioResults extends AbstractResults {
+ String fileName;
+ String label;
+ String shortName;
+
+public ScenarioResults(int id, String name, String shortName) {
+ super(null, id);
+ this.name = name;
+ this.label = shortName;
+}
+
+/*
+ * Complete results with additional database information.
+ */
+void completeResults(String lastBuildName) {
+ String[] builds = DB_Results.getBuilds();
+ class BuildDateComparator implements Comparator {
+ public int compare(Object o1, Object o2) {
+ String s1 = (String) o1;
+ String s2 = (String) o2;
+ return Util.getBuildDate(s1).compareTo(Util.getBuildDate(s2));
+ }
+ }
+ BuildDateComparator comparator = new BuildDateComparator();
+ Arrays.sort(builds, comparator);
+ int idx = Arrays.binarySearch(builds, lastBuildName, comparator);
+ if (idx < 0) {
+ builds = null;
+ } else {
+ int size = builds.length - ++idx;
+ System.arraycopy(builds, idx, builds = new String[size], 0, size);
+ }
+// String[] builds = null;
+ int size = size();
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ configResults.completeResults(builds);
+ }
+}
+
+/**
+ * Returns the first configuration baseline build name.
+ *
+ * @return The name of the baseline build
+ * @see ConfigResults#getBaselineBuildName()
+ */
+public String getBaselineBuildName() {
+ int size = size();
+ StringBuffer buffer = new StringBuffer();
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ if (configResults.isValid()) {
+ return configResults.getBaselineBuildName();
+ /* TODO (frederic) decide what return when baseline is not the same on all configs...
+ * Currently returns the first found, but may be a comma-separated list?
+ String baselineName = configResults.getBaselineBuildName();
+ if (buffer.indexOf(baselineName) < 0) {
+ if (buffer.length() > 0) buffer.append('|');
+ buffer.append(baselineName);
+ }
+ */
+ }
+ }
+ return buffer.toString();
+}
+
+Set getAllBuildNames() {
+ Set buildNames = new HashSet();
+ int size = size();
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ List builds = configResults.getBuilds(null);
+ int length = builds.size();
+ for (int j=0; j<length; j++) {
+ buildNames.add(((BuildResults)builds.get(j)).getName());
+ }
+ }
+ return buildNames;
+}
+
+/**
+ * Return the results of the given configuration.
+ *
+ * @param config The configuration name
+ * @return The {@link ConfigResults results} for the given configuration
+ * or <code>null</code> if none was found.
+ */
+public ConfigResults getConfigResults(String config) {
+ return (ConfigResults) getResults(config);
+}
+
+/**
+ * Return a name which can be used as a file name to store information
+ * related to this scenario. This name does not contain the extension.
+ *
+ * @return The file name
+ */
+public String getFileName() {
+ if (this.fileName == null) {
+ this.fileName = "Scenario" + this.id; //$NON-NLS-1$
+ }
+ return this.fileName;
+}
+
+/**
+ * Returns the scenario label. If no label exist as there's no associated summary,
+ * then the short name is returned
+ *
+ * @return The label of the scenario or it's short name if no summary exists
+ */
+public String getLabel() {
+ return this.label == null ? getShortName() : this.label;
+}
+
+/**
+ * Returns the short name of the scenario. Short name is the name scenario
+ * from which package declaration has been removed.
+ *
+ * @return The scenario short name
+ */
+public String getShortName() {
+ if (this.shortName == null) {
+ // Remove class name qualification
+ int testSeparator = this.name.indexOf('#');
+ boolean hasClassName = testSeparator >= 0;
+ if (!hasClassName) {
+ testSeparator = this.name.lastIndexOf('.');
+ if (testSeparator <= 0) {
+ return this.shortName = this.name;
+ }
+ }
+ int classSeparator = this.name.substring(0, testSeparator).lastIndexOf('.');
+ if (classSeparator < 0) {
+ return this.shortName = this.name;
+ }
+ int length = this.name.length();
+ String testName = this.name.substring(classSeparator+1, length);
+ if (!hasClassName && testName.startsWith("test.")) { // specific case for swt... //$NON-NLS-1$
+ testName = testName.substring(5);
+ }
+
+ // Remove qualification from test name
+ StringTokenizer tokenizer = new StringTokenizer(testName, " :,", true); //$NON-NLS-1$
+ StringBuffer buffer = new StringBuffer(tokenizer.nextToken());
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ char fc = token.charAt(0);
+ while (fc == ' ' || fc == ',' || fc == ':') {
+ buffer.append(token); // add the separator
+ token = tokenizer.nextToken();
+ fc = token.charAt(0);
+ }
+ int last = token.lastIndexOf('.');
+ if (last >= 3) {
+ int first = token .indexOf('.');
+ if (first == last) {
+ buffer.append(token);
+ } else {
+ buffer.append(token.substring(last+1));
+ }
+ } else {
+ buffer.append(token);
+ }
+ }
+ this.shortName = buffer.toString();
+ }
+ return this.shortName;
+}
+
+/**
+ * Returns whether one of the scenario's config has a summary or not.
+ *
+ * @return <code>true</code> if one of the scenario's config has a summary
+ * <code>false</code> otherwise.
+ */
+public boolean hasSummary() {
+ int size = size();
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ BuildResults currentBuildResults = configResults.getCurrentBuildResults();
+ if (currentBuildResults != null && currentBuildResults.hasSummary()) return true;
+ }
+ return false;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.AbstractResults#hashCode()
+ */
+public int hashCode() {
+ return this.id;
+}
+
+/**
+ * Returns whether the current scenario is valid or not.
+ *
+ * @return <code>true</code> if all the builds contained in the database are
+ * known by the scenario (ie. at least one its configuration knows each of the
+ * db builds), <code>false</code> otherwise.
+ */
+public boolean isValid() {
+ int size = this.children.size();
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ if (configResults.isValid()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns whether the current build of the given config has valid results or not.
+ *
+ * @param config The name of the configuration
+ * @return <code>true</code> if the build has valid results
+ * <code>false</code> otherwise.
+ */
+public boolean isValid(String config) {
+ return getResults(config) != null;
+}
+
+/**
+ * Returns whether the current scenario knows a build or not.
+ *
+ * @param buildName The name of the build
+ * @return <code>true</code> if the at least one of scenario configuration
+ * knows the given build, <code>false</code> otherwise.
+ */
+public boolean knowsBuild(String buildName) {
+ String[] buildNames = buildName == null
+ ? DB_Results.getBuilds()
+ : new String[] { buildName };
+ Set scenarioBuilds = getAllBuildNames();
+ int length = buildNames.length;
+ for (int i=0; i<length; i++) {
+ if (!scenarioBuilds.contains(buildNames[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/*
+ * Read scenario results information from database.
+ *
+void read(String buildName, long lastBuildTime) {
+
+ // Get values
+ print(" + scenario '"+getShortName()+"': values..."); //$NON-NLS-1$ //$NON-NLS-2$
+ long start = System.currentTimeMillis();
+ String configPattern = getPerformance().getConfigurationsPattern();
+ DB_Results.queryScenarioValues(this, configPattern, buildName, lastBuildTime);
+ print(timeString(System.currentTimeMillis()-start));
+
+ // Set baseline and current builds
+ print(", infos..."); //$NON-NLS-1$
+ start = System.currentTimeMillis();
+ int size = size();
+ String[] builds = buildName == null ? null : new String[] { buildName };
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ configResults.completeResults(builds);
+ }
+ println(timeString(System.currentTimeMillis()-start));
+}
+*/
+
+/*
+ * Read data from a local file
+ */
+void readData(DataInputStream stream) throws IOException {
+
+ // Read data stored locally
+ int size = stream.readInt();
+ for (int i=0; i<size; i++) {
+ int config_id = stream.readInt();
+ ConfigResults configResults = (ConfigResults) getResults(config_id);
+ if (configResults == null) {
+ configResults = new ConfigResults(this, config_id);
+ addChild(configResults, true);
+ }
+ configResults.readData(stream);
+ }
+}
+
+/*
+ * Read new data from the database.
+ * This is typically needed when the build results are not in the local file...
+ *
+boolean readNewData(String lastBuildName, boolean force) {
+ if (lastBuildName == null) {
+ read(null, -1);
+ return true;
+ }
+ PerformanceResults performanceResults = getPerformance();
+ String lastBuildDate = getBuildDate(lastBuildName, getBaselinePrefix());
+ if (force || performanceResults.getBuildDate().compareTo(lastBuildDate) > 0) {
+ long lastBuildTime = 0;
+ try {
+ lastBuildTime = DATE_FORMAT.parse(lastBuildDate).getTime();
+ } catch (ParseException e) {
+ // should not happen
+ }
+ read(lastBuildName, lastBuildTime);
+ return true;
+ }
+ return false;
+}
+*/
+
+/*
+ * Set value from database information.
+ */
+void setInfos(int config_id, int build_id, int summaryKind, String comment) {
+ ConfigResults configResults = (ConfigResults) getResults(config_id);
+ if (configResults == null) {
+ configResults = new ConfigResults(this, config_id);
+ addChild(configResults, true);
+ }
+ configResults.setInfos(build_id, summaryKind, comment);
+}
+
+/*
+ * Set value from database information.
+ */
+void setValue(int build_id, int dim_id, int config_id, int step, long value) {
+ ConfigResults configResults = (ConfigResults) getResults(config_id);
+ if (configResults == null) {
+ configResults = new ConfigResults(this, config_id);
+ addChild(configResults, true);
+ }
+ configResults.setValue(build_id, dim_id, step, value);
+}
+
+/*
+ * Read scenario results information from database.
+ */
+boolean updateBuild(String buildName, boolean force) {
+
+ if (!force && knowsBuild(buildName)) {
+ return false;
+ }
+
+ // Get values
+ print(" + scenario '"+getShortName()+"': values..."); //$NON-NLS-1$ //$NON-NLS-2$
+ long start = System.currentTimeMillis();
+ String configPattern = getPerformance().getConfigurationsPattern();
+ DB_Results.queryScenarioValues(this, configPattern, buildName);
+ print(Util.timeString(System.currentTimeMillis()-start));
+
+ // Set baseline and current builds
+ print(", infos..."); //$NON-NLS-1$
+ start = System.currentTimeMillis();
+ int size = size();
+ String[] builds = buildName == null ? null : new String[] { buildName };
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ configResults.completeResults(builds);
+ }
+ println(Util.timeString(System.currentTimeMillis()-start));
+ return true;
+}
+
+void write(DataOutputStream stream) throws IOException {
+ int size = size();
+ stream.writeInt(this.id);
+ stream.writeInt(size);
+ for (int i=0; i<size; i++) {
+ ConfigResults configResults = (ConfigResults) this.children.get(i);
+ configResults.write(stream);
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsElement.java
new file mode 100644
index 0000000..82c1766
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsElement.java
@@ -0,0 +1,372 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.eval.StatisticsUtil;
+import org.eclipse.test.internal.performance.results.db.*;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class BuildResultsElement extends ResultsElement {
+
+ // Property descriptors
+ static final String P_ID_BUILD_DATE = "BuildResultsElement.date"; //$NON-NLS-1$
+ static final String P_ID_BUILD_BASELINE = "BuildResultsElement.baseline"; //$NON-NLS-1$
+ static final String P_ID_BUILD_COMMENT = "BuildResultsElement.comment"; //$NON-NLS-1$
+ static final String P_ID_BUILD_SUMMARY_KIND = "BuildResultsElement.summarykind"; //$NON-NLS-1$
+ static final String P_ID_BUILD_IS_BASELINE = "BuildResultsElement.isbaseline"; //$NON-NLS-1$
+ static final String P_ID_BUILD_FAILURE = "BuildResultsElement.failure"; //$NON-NLS-1$
+ static final String P_ID_BUILD_DELTA = "BuildResultsElement.delta"; //$NON-NLS-1$
+ static final String P_ID_BUILD_ERROR = "BuildResultsElement.error"; //$NON-NLS-1$
+ static final String P_ID_BUILD_TTEST = "BuildResultsElement.ttest"; //$NON-NLS-1$
+
+ static final String P_STR_BUILD_DATE = "date"; //$NON-NLS-1$
+ static final String P_STR_BUILD_COMMENT = "comment"; //$NON-NLS-1$
+ static final String P_STR_BUILD_SUMMARY_KIND = "summary kind"; //$NON-NLS-1$
+ static final String P_STR_BUILD_IS_BASELINE = "is baseline"; //$NON-NLS-1$
+ static final String P_STR_BUILD_BASELINE = "baseline"; //$NON-NLS-1$
+ static final String P_STR_BUILD_FAILURE = "failure"; //$NON-NLS-1$
+ static final String P_STR_BUILD_DELTA = "delta with baseline"; //$NON-NLS-1$
+ static final String P_STR_BUILD_ERROR = "delta error"; //$NON-NLS-1$
+ static final String P_STR_BUILD_TTEST = "student's ttest"; //$NON-NLS-1$
+
+ private static final TextPropertyDescriptor BUILD_DATE_DESCRIPTOR = new TextPropertyDescriptor(P_ID_BUILD_DATE, P_STR_BUILD_DATE);
+ private static final TextPropertyDescriptor BUILD_COMMENT_DESCRIPTOR = new TextPropertyDescriptor(P_ID_BUILD_COMMENT, P_STR_BUILD_COMMENT);
+ private static final TextPropertyDescriptor BUILD_SUMMARY_DESCRIPTOR = new TextPropertyDescriptor(P_ID_BUILD_SUMMARY_KIND, P_STR_BUILD_SUMMARY_KIND);
+ private static final PropertyDescriptor BUILD_IS_BASELINE_DESCRIPTOR = new PropertyDescriptor(P_ID_BUILD_IS_BASELINE, P_STR_BUILD_IS_BASELINE);
+ private static final PropertyDescriptor BUILD_BASELINE_DESCRIPTOR = new PropertyDescriptor(P_ID_BUILD_BASELINE, P_STR_BUILD_BASELINE);
+ private static final TextPropertyDescriptor BUILD_TEST_FAILURE_DESCRIPTOR = new TextPropertyDescriptor(P_ID_BUILD_FAILURE, P_STR_BUILD_FAILURE);
+ private static final PropertyDescriptor BUILD_TEST_DELTA_DESCRIPTOR = new PropertyDescriptor(P_ID_BUILD_DELTA, P_STR_BUILD_DELTA);
+ private static final PropertyDescriptor BUILD_TEST_ERROR_DESCRIPTOR = new PropertyDescriptor(P_ID_BUILD_ERROR, P_STR_BUILD_ERROR);
+ private static final PropertyDescriptor BUILD_STUDENTS_TTEST_DESCRIPTOR = new PropertyDescriptor(P_ID_BUILD_TTEST, P_STR_BUILD_TTEST);
+
+ private static Vector DESCRIPTORS;
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Results category
+ DESCRIPTORS.add(BUILD_DATE_DESCRIPTOR);
+ BUILD_DATE_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_BASELINE_DESCRIPTOR);
+ BUILD_BASELINE_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_COMMENT_DESCRIPTOR);
+ BUILD_COMMENT_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_SUMMARY_DESCRIPTOR);
+ BUILD_SUMMARY_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_IS_BASELINE_DESCRIPTOR);
+ BUILD_IS_BASELINE_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_TEST_FAILURE_DESCRIPTOR);
+ BUILD_TEST_FAILURE_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_TEST_DELTA_DESCRIPTOR);
+ BUILD_TEST_DELTA_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_TEST_ERROR_DESCRIPTOR);
+ BUILD_TEST_ERROR_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.add(BUILD_STUDENTS_TTEST_DESCRIPTOR);
+ BUILD_STUDENTS_TTEST_DESCRIPTOR.setCategory("Results");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static ComboBoxPropertyDescriptor getInfosDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & SMALL_VALUE) != 0) {
+ list.add("This test and/or its variation has a small value, hence it may not be necessary to spend time on fixing it if a regression occurs");
+ }
+ if ((status & STUDENT_TTEST) != 0) {
+ list.add("The student-t test error on this test is over the threshold");
+ }
+ String[] infos = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(infos);
+ }
+ ComboBoxPropertyDescriptor infoDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_INFO, P_STR_STATUS_INFO, infos);
+ infoDescriptor.setCategory("Status");
+ return infoDescriptor;
+ }
+ static PropertyDescriptor getWarningsDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & BIG_ERROR) != 0) {
+ list.add("The error on this test is over the 3% threshold, hence its result may not be really reliable");
+ }
+ if ((status & NOT_RELIABLE) != 0) {
+ list.add("The results history shows that the variation of its delta is over 20%, hence its result is surely not reliable");
+ }
+ if ((status & NOT_STABLE) != 0) {
+ list.add("The results history shows that the variation of its delta is between 10% and 20%, hence its result may not be really reliable");
+ }
+ if ((status & NO_BASELINE) != 0) {
+ list.add("There's no baseline to compare with");
+ }
+ if ((status & SINGLE_RUN) != 0) {
+ list.add("This test has only one run, hence no error can be computed to verify if it's stable enough to be reliable");
+ }
+ String[] warnings = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(warnings);
+ }
+ ComboBoxPropertyDescriptor warningDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_WARNING, P_STR_STATUS_WARNING, warnings);
+ warningDescriptor.setCategory("Status");
+ return warningDescriptor;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+
+ // Model info
+ boolean important;
+ boolean milestone;
+
+public BuildResultsElement(AbstractResults results, ResultsElement parent) {
+ super(results, parent);
+ initInfo();
+}
+
+public BuildResultsElement(String name, ResultsElement parent) {
+ super(name, parent);
+ initInfo();
+}
+
+public int compareTo(Object o) {
+ if (o instanceof BuildResultsElement && getName() != null) {
+ BuildResultsElement element = (BuildResultsElement)o;
+ if (element.getName() != null) {
+ String buildDate = Util.getBuildDate(element.name);
+ return Util.getBuildDate(this.name).compareTo(buildDate);
+ }
+ }
+ return super.compareTo(o);
+}
+
+ResultsElement createChild(AbstractResults testResults) {
+ return null;
+}
+
+private BuildResults getBuildResults() {
+ return (BuildResults) this.results;
+}
+
+public Object[] getChildren(Object o) {
+ if (this.results == null) {
+ return new Object[0];
+ }
+ if (this.children == null) {
+ initChildren();
+ }
+ return this.children;
+}
+
+public Object getEditableValue() {
+ if (this.results == null) {
+ return "Build "+this.name;
+ }
+ return this.results.toString();
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ BuildResults buildResults = getBuildResults();
+ if (buildResults != null) {
+ ConfigResults configResults = (ConfigResults) buildResults.getParent();
+ BuildResults baselineResults = configResults.getBaselineBuildResults(buildResults.getName());
+ if (propKey.equals(P_ID_BUILD_DATE))
+ return buildResults.getDate();
+ if (propKey.equals(P_ID_BUILD_COMMENT))
+ return buildResults.getComment();
+ if (propKey.equals(P_ID_BUILD_SUMMARY_KIND)) {
+ int summaryKind = buildResults.getSummaryKind();
+ if (summaryKind == 1) {
+ return "global";
+ }
+ if (summaryKind >= 0) {
+ return "component";
+ }
+ return "none";
+ }
+ if (propKey.equals(P_ID_BUILD_IS_BASELINE))
+ return new Boolean(buildResults.isBaseline());
+ if (propKey.equals(P_ID_BUILD_FAILURE))
+ return buildResults.getFailure();
+ if (baselineResults != null) {
+ if (propKey.equals(P_ID_BUILD_BASELINE)) {
+ return baselineResults.getName();
+ }
+ double buildValue = buildResults.getValue();
+ double baselineValue = baselineResults.getValue();
+ double delta = (baselineValue - buildValue) / baselineValue;
+ if (Double.isNaN(delta)) {
+ if (propKey.equals(P_ID_BUILD_DELTA) || propKey.equals(P_ID_BUILD_ERROR)) {
+ return new Double(Double.NaN);
+ }
+ } else if (propKey.equals(P_ID_BUILD_DELTA)) {
+ return new Double(delta);
+ } else {
+ long baselineCount = baselineResults.getCount();
+ long currentCount = buildResults.getCount();
+ if (baselineCount > 1 && currentCount > 1) {
+ if (propKey.equals(P_ID_BUILD_TTEST)) {
+ double ttestValue = Util.computeTTest(baselineResults, buildResults);
+ int degreeOfFreedom = (int) (baselineResults.getCount()+buildResults.getCount()-2);
+ if (ttestValue >= 0 && StatisticsUtil.getStudentsT(degreeOfFreedom, StatisticsUtil.T90) >= ttestValue) {
+ return new Double(ttestValue);
+ }
+ }
+ if (propKey.equals(P_ID_BUILD_ERROR)) {
+ double baselineError = baselineResults.getError();
+ double currentError = buildResults.getError();
+ double error = Double.isNaN(baselineError)
+ ? currentError / baselineValue
+ : Math.sqrt(baselineError*baselineError + currentError*currentError) / baselineValue;
+ return new Double(error);
+ }
+ } else {
+ if (propKey.equals(P_ID_BUILD_ERROR))
+ return new Double(-1);
+ }
+ }
+ }
+ }
+ if (propKey.equals(P_ID_STATUS_ERROR)) {
+ if ((getStatus() & BIG_DELTA) != 0) {
+ return "The delta on this test is over the 10% threshold, hence may indicate a possible regression.";
+ }
+ }
+ return super.getPropertyValue(propKey);
+}
+
+/**
+ * Return the statistics of the build along its history.
+ *
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+double[] getStatistics() {
+ if (this.statistics == null) {
+ this.statistics = ((ConfigResults)getBuildResults().getParent()).getStatistics(Util.BASELINE_BUILD_PREFIXES);
+ }
+ return this.statistics;
+}
+
+void initChildren() {
+ BuildResults buildResults = (BuildResults) this.results;
+ Dim[] dimensions = buildResults.getDimensions();
+ int length = dimensions.length;
+ this.children = new DimResultsElement[length];
+ for (int i=0; i<length; i++) {
+ this.children[i] = new DimResultsElement(this.results, this, dimensions[i]);
+ }
+}
+
+/*
+ * Init information
+ */
+void initInfo() {
+ this.milestone = Util.isMilestone(getName());
+ this.important = this.milestone || Util.getNextMilestone(this.name) == null;
+}
+
+void initStatus() {
+ if (this.results == null) {
+ if (this.parent.isInitialized()) {
+ if (((PerformanceResultsElement) this.parent).hasRead(this)) {
+ this.status = READ;
+ } else {
+ this.status = UNREAD;
+ }
+ } else {
+ this.status = UNKNOWN;
+ }
+ } else if (getBuildResults().isBaseline()) {
+ // TODO (frederic) report high variation in baseline results along history
+ this.status = READ;
+ } else {
+ initStatus(getBuildResults());
+ }
+}
+
+/**
+ * Returns whether the build is important to be shown.
+ * This is the case for milestone builds or for the last builds.
+ *
+ * @return <code>true</code> or <code>false</code> .
+ */
+public boolean isImportant() {
+ return this.important;
+}
+
+/**
+ * Returns whether the build is a milestone one or not.
+ *
+ * @return <code>true</code> or <code>false</code> .
+ */
+public boolean isMilestone() {
+ return this.milestone;
+}
+
+public boolean isRead() {
+ return (getStatus() & STATE_MASK) == READ;
+}
+
+public boolean isUnknown() {
+ return (getStatus() & STATE_MASK) == UNKNOWN;
+}
+
+/* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+public String toString() {
+ return getName();
+}
+public boolean isBefore(String build) {
+ if (this.results != null) {
+ return Util.getBuildDate(this.name).compareTo(Util.getBuildDate(build)) <= 0;
+ }
+ return true;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsProperties.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsProperties.java
new file mode 100644
index 0000000..443c00f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/BuildResultsProperties.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.Vector;
+
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class BuildResultsProperties {
+
+ // Property descriptors
+ static final String P_ID_SMALL_VALUE = "BuildResultsProperties.small_value"; //$NON-NLS-1$
+ static final String P_ID_NO_BASELINE = "BuildResultsProperties.no_baseline"; //$NON-NLS-1$
+ static final String P_ID_SINGLE_RUN = "BuildResultsProperties.single_run"; //$NON-NLS-1$
+ static final String P_ID_BIG_ERROR = "BuildResultsProperties.big_error"; //$NON-NLS-1$
+ static final String P_ID_STUDENT_TTEST = "BuildResultsProperties.ttest"; //$NON-NLS-1$
+ static final String P_ID_NOT_STABLE = "BuildResultsProperties.not_stable"; //$NON-NLS-1$
+ static final String P_ID_NOT_RELIABLE = "BuildResultsProperties.not_reliable"; //$NON-NLS-1$
+ static final String P_ID_BIG_DELTA = "BuildResultsProperties.big_delta"; //$NON-NLS-1$
+ static final String P_STR_SMALL_VALUE = "small value"; //$NON-NLS-1$
+ static final String P_STR_NO_BASELINE = "no baseline"; //$NON-NLS-1$
+ static final String P_STR_SINGLE_RUN = "single run"; //$NON-NLS-1$
+ static final String P_STR_BIG_ERROR = "big error"; //$NON-NLS-1$
+ static final String P_STR_STUDENT_TTEST = "student ttest"; //$NON-NLS-1$
+ static final String P_STR_NOT_STABLE = "not stable"; //$NON-NLS-1$
+ static final String P_STR_NOT_RELIABLE = "not reliable"; //$NON-NLS-1$
+ static final String P_STR_BIG_DELTA = "delta error"; //$NON-NLS-1$
+ private static Vector descriptors;
+ static {
+ descriptors = new Vector();
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_SMALL_VALUE, P_STR_SMALL_VALUE));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_NO_BASELINE, P_STR_NO_BASELINE));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_SINGLE_RUN, P_STR_SINGLE_RUN));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_BIG_ERROR, P_STR_BIG_ERROR));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_STUDENT_TTEST, P_STR_STUDENT_TTEST));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_NOT_STABLE, P_STR_NOT_STABLE));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_NOT_RELIABLE, P_STR_NOT_RELIABLE));
+ descriptors.addElement(new TextPropertyDescriptor(P_ID_BIG_DELTA, P_STR_BIG_DELTA));
+ }
+ static Vector getDescriptors() {
+ return descriptors;
+ }
+
+ private int status;
+
+public BuildResultsProperties() {
+}
+
+void setStatus(int status) {
+ this.status = status;
+}
+
+public Object getEditableValue() {
+ return null;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ return (IPropertyDescriptor[]) getDescriptors().toArray(
+ new IPropertyDescriptor[getDescriptors().size()]);
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ if (propKey.equals(P_ID_SMALL_VALUE)) {
+ if ((this.status & ResultsElement.SMALL_VALUE) != 0) {
+ return "This test and/or its variation has a small value, hence it may not be necessary to spend time on fixing it if a regression occurs.";
+ }
+ }
+ if (propKey.equals(P_ID_NO_BASELINE)) {
+ if ((this.status & ResultsElement.NO_BASELINE) != 0) {
+ return "There's no baseline to compare with.";
+ }
+ }
+ if (propKey.equals(P_ID_SINGLE_RUN)) {
+ if ((this.status & ResultsElement.SINGLE_RUN) != 0) {
+ return "This test has only one run, hence no error can be computed to verify if it's stable enough to be reliable.";
+ }
+ }
+ if (propKey.equals(P_ID_BIG_ERROR)) {
+ if ((this.status & ResultsElement.BIG_ERROR) != 0) {
+ return "The error on this test is over the 3% threshold, hence its result may not be really reliable.";
+ }
+ }
+ if (propKey.equals(P_ID_STUDENT_TTEST)) {
+ if ((this.status & ResultsElement.STUDENT_TTEST) != 0) {
+ return "The student-t on this test is over the threshold";
+ }
+ }
+ if (propKey.equals(P_ID_NOT_STABLE)) {
+ if ((this.status & ResultsElement.NOT_STABLE) != 0) {
+ return "The results history shows that the variation of its delta is between 10% and 20%, hence its result may not be really reliable.";
+ }
+ }
+ if (propKey.equals(P_ID_NOT_RELIABLE)) {
+ if ((this.status & ResultsElement.NOT_RELIABLE) != 0) {
+ return "The results history shows that the variation of its delta is over 20%, hence its result is surely not reliable.";
+ }
+ }
+ if (propKey.equals(P_ID_BIG_DELTA)) {
+ if ((this.status & ResultsElement.BIG_DELTA) != 0) {
+ return "The delta on this test is over the 10% threshold, hence may indicate a possible regression.";
+ }
+ }
+ return null;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ComponentResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ComponentResultsElement.java
new file mode 100644
index 0000000..c8b21f3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ComponentResultsElement.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.test.internal.performance.results.db.AbstractResults;
+import org.eclipse.test.internal.performance.results.db.ComponentResults;
+import org.eclipse.test.internal.performance.results.db.PerformanceResults;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class ComponentResultsElement extends ResultsElement {
+
+ // Property descriptors
+ static final String P_ID_NAME = "ComponentResultsElement.name"; //$NON-NLS-1$
+ static final String P_ID_CURRENT_BUILD = "ComponentResultsElement.currentbuild"; //$NON-NLS-1$
+ static final String P_ID_BASELINE_BUILD = "ComponentResultsElement.baselinebuild"; //$NON-NLS-1$
+
+ static final String P_STR_NAME = "name"; //$NON-NLS-1$
+ static final String P_STR_CURRENT_BUILD = "current build"; //$NON-NLS-1$
+ static final String P_STR_BASELINE_BUILD = "baseline build"; //$NON-NLS-1$
+
+ private static final TextPropertyDescriptor NAME_DESCRIPTOR = new TextPropertyDescriptor(P_ID_NAME, P_STR_NAME);
+ private static final PropertyDescriptor CURRENT_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_CURRENT_BUILD, P_STR_CURRENT_BUILD);
+ private static final PropertyDescriptor BASELINE_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_BASELINE_BUILD, P_STR_BASELINE_BUILD);
+
+ private static Vector DESCRIPTORS;
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Results category
+ DESCRIPTORS.addElement(NAME_DESCRIPTOR);
+ NAME_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CURRENT_BUILD_DESCRIPTOR);
+ CURRENT_BUILD_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(BASELINE_BUILD_DESCRIPTOR);
+ BASELINE_BUILD_DESCRIPTOR.setCategory("Results");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+
+public ComponentResultsElement(String name, ResultsElement parent) {
+ super(name, parent);
+}
+
+public ComponentResultsElement(AbstractResults results, ResultsElement parent) {
+ super(results, parent);
+}
+
+/*
+ * Do not create non-fingerprint child when only fingerprint is specified.
+ *
+ * @see org.eclipse.test.internal.performance.results.model.ResultsElement#createChild(org.eclipse.test.internal.performance.results.db.AbstractResults)
+ */
+ResultsElement createChild(AbstractResults testResults) {
+// if (onlyFingerprints()) {
+// ScenarioResults scenarioResults = (ScenarioResults) testResults;
+// if (!scenarioResults.hasSummary()) {
+// return null;
+// }
+// }
+ return new ScenarioResultsElement(testResults, this);
+}
+
+/**
+ * Get all results numbers for a given machine of the current component.
+ *
+ * @param configName The name of the configuration to get numbers
+ * @param fingerprints Set whether only fingerprints scenario should be taken into account
+ * @return A list of lines. Each line represent a build and is a list of either strings or values.
+ */
+public List getConfigNumbers(String configName, boolean fingerprints) {
+ if (this.results == null) return null;
+ return ((ComponentResults)this.results).getConfigNumbers(configName, fingerprints, new ArrayList());
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ if (propKey.equals(P_ID_NAME)) {
+ return getName();
+ }
+ if (propKey.equals(P_ID_CURRENT_BUILD)) {
+ if (this.results == null) {
+ PerformanceResultsElement performanceResultsElement = (PerformanceResultsElement) getParent(null);
+ return performanceResultsElement.getName();
+ }
+ PerformanceResults performanceResults = (PerformanceResults) this.results.getParent();
+ return performanceResults.getName();
+ }
+ if (propKey.equals(P_ID_BASELINE_BUILD)) {
+ if (this.results == null) {
+ return "?";
+ }
+ PerformanceResults performanceResults = (PerformanceResults) this.results.getParent();
+ return performanceResults.getBaselineName();
+ }
+ return super.getPropertyValue(propKey);
+}
+
+/**
+ * Get the list of the scenarios results from the model. Put only fingerprint ones if specified.
+ *
+ * @param fingerprint Tell whether only fingerprint scenarios are expected or not.
+ * @return A list of {@link ScenarioResults}.
+ */
+public List getScenarios(boolean fingerprint) {
+ if (!fingerprint) {
+ return Arrays.asList(this.results.getChildren());
+ }
+ List scenarios = new ArrayList();
+ if (this.results != null) {
+ Iterator iterator = this.results.getResults();
+ while (iterator.hasNext()) {
+ ScenarioResults scenarioResults = (ScenarioResults) iterator.next();
+ if (scenarioResults.hasSummary()) {
+ scenarios.add(scenarioResults);
+ }
+ }
+ }
+ return scenarios;
+}
+
+/**
+ * Get the list of the scenarios names. Put only fingerprint ones if specified.
+ *
+ * @param fingerprint Tell whether only fingerprint scenarios are expected or not.
+ * @return A list of {@link String}.
+ */
+public List getScenariosLabels(boolean fingerprint) {
+ List labels = new ArrayList();
+ if (this.results != null) {
+ AbstractResults[] scenarios = this.results.getChildren();
+ int length = scenarios.length;
+ for (int i=0; i<length; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios[i];
+ if (!fingerprint || scenarioResults.hasSummary()) {
+ labels.add(scenarioResults.getLabel());
+ }
+ }
+ }
+ return labels;
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.model.ResultsElement#initStatus()
+ */
+void initStatus() {
+ if (this.results == null) {
+ this.status = UNREAD;
+ } else {
+ super.initStatus();
+ }
+}
+
+StringBuffer writableStatus(StringBuffer buffer, int kind, StringBuffer excluded) {
+ // Write status for scenarios having error
+ if ((getStatus() & ERROR_MASK) != 0) {
+
+ // Get children status
+ StringBuffer childrenBuffer = super.writableStatus(new StringBuffer(), kind, excluded);
+
+ // Write status on file if not excluded
+ if (childrenBuffer.length() > 0) {
+ buffer.append(getName());
+ IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ String comment = preferences.get(getId(), null);
+ if (comment != null) {
+ if ((kind & IPerformancesConstants.STATUS_VALUES) != 0) {
+ buffer.append(" ");
+ } else {
+ buffer.append(" ");
+ }
+ buffer.append(comment);
+ }
+ buffer.append(Util.LINE_SEPARATOR);
+ buffer.append(childrenBuffer);
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ }
+ return buffer;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ConfigResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ConfigResultsElement.java
new file mode 100644
index 0000000..a00ed03
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ConfigResultsElement.java
@@ -0,0 +1,498 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.test.internal.performance.results.db.*;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class ConfigResultsElement extends ResultsElement {
+
+ // Elements
+ BuildResultsElement currentBuild, baselineBuild;
+
+ // Property descriptors
+ static final String P_ID_CONFIG_NAME = "ConfigResultsElement.name"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_DESCRIPTION = "ConfigResultsElement.description"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_CURRENT_BUILD = "ConfigResultsElement.currentbuild"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_BASELINE_BUILD = "ConfigResultsElement.baselinebuild"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_BASELINED = "ConfigResultsElement.baselined"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_VALID = "ConfigResultsElement.valid"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_DELTA = "ConfigResultsElement.delta"; //$NON-NLS-1$
+ static final String P_ID_CONFIG_ERROR = "ConfigResultsElement.error"; //$NON-NLS-1$
+
+ static final String P_STR_CONFIG_NAME = "internal name"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_DESCRIPTION = "description"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_CURRENT_BUILD = "current build"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_BASELINE_BUILD = "baseline build"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_BASELINED = "has baseline"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_VALID = "is valid"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_DELTA = "delta with baseline"; //$NON-NLS-1$
+ static final String P_STR_CONFIG_ERROR = "delta error"; //$NON-NLS-1$
+
+ private static final TextPropertyDescriptor CONFIG_NAME_DESCRIPTOR = new TextPropertyDescriptor(P_ID_CONFIG_NAME, P_STR_CONFIG_NAME);
+ private static final TextPropertyDescriptor CONFIG_DESCRIPTION_DESCRIPTOR = new TextPropertyDescriptor(P_ID_CONFIG_DESCRIPTION, P_STR_CONFIG_DESCRIPTION);
+ private static final PropertyDescriptor CONFIG_CURRENT_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_CURRENT_BUILD, P_STR_CONFIG_CURRENT_BUILD);
+ private static final PropertyDescriptor CONFIG_BASELINE_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_BASELINE_BUILD, P_STR_CONFIG_BASELINE_BUILD);
+ private static final PropertyDescriptor CONFIG_BASELINED_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_BASELINED, P_STR_CONFIG_BASELINED);
+ private static final PropertyDescriptor CONFIG_VALID_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_VALID, P_STR_CONFIG_VALID);
+ private static final PropertyDescriptor CONFIG_DELTA_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_DELTA, P_STR_CONFIG_DELTA);
+ private static final PropertyDescriptor CONFIG_ERROR_DESCRIPTOR = new PropertyDescriptor(P_ID_CONFIG_ERROR, P_STR_CONFIG_ERROR);
+
+ private static Vector DESCRIPTORS;
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Results category
+ DESCRIPTORS.addElement(CONFIG_NAME_DESCRIPTOR);
+ CONFIG_NAME_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_DESCRIPTION_DESCRIPTOR);
+ CONFIG_DESCRIPTION_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_CURRENT_BUILD_DESCRIPTOR);
+ CONFIG_CURRENT_BUILD_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_BASELINE_BUILD_DESCRIPTOR);
+ CONFIG_BASELINE_BUILD_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_BASELINED_DESCRIPTOR);
+ CONFIG_BASELINED_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_VALID_DESCRIPTOR);
+ CONFIG_VALID_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_DELTA_DESCRIPTOR);
+ CONFIG_DELTA_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(CONFIG_ERROR_DESCRIPTOR);
+ CONFIG_ERROR_DESCRIPTOR.setCategory("Results");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static ComboBoxPropertyDescriptor getInfosDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & SMALL_VALUE) != 0) {
+ list.add("This test and/or its variation has a small value on this machine, hence it may not be necessary to spend time on fixing it if a regression occurs");
+ }
+ if ((status & STUDENT_TTEST) != 0) {
+ list.add("The student-t test error on this machine is over the threshold");
+ }
+ String[] infos = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(infos);
+ }
+ ComboBoxPropertyDescriptor infoDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_INFO, P_STR_STATUS_INFO, infos);
+ infoDescriptor.setCategory("Status");
+ return infoDescriptor;
+ }
+ static PropertyDescriptor getWarningsDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & BIG_ERROR) != 0) {
+ list.add("The error on this machine is over the 3% threshold, hence its result may not be really reliable");
+ }
+ if ((status & NOT_RELIABLE) != 0) {
+ list.add("The results history for this machine shows that the variation of its delta is over 20%, hence its result is surely not reliable");
+ }
+ if ((status & NOT_STABLE) != 0) {
+ list.add("The results history for this machine shows that the variation of its delta is between 10% and 20%, hence its result may not be really reliable");
+ }
+ if ((status & NO_BASELINE) != 0) {
+ list.add("There's no baseline for this machine to compare with");
+ }
+ if ((status & SINGLE_RUN) != 0) {
+ list.add("This test has only one run on this machine, hence no error can be computed to verify if it's stable enough to be reliable");
+ }
+ if ((status & STUDENT_TTEST) != 0) {
+ list.add("The student-t test error on this machine is over the threshold");
+ }
+ String[] warnings = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(warnings);
+ }
+ ComboBoxPropertyDescriptor warningDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_WARNING, P_STR_STATUS_WARNING, warnings);
+ warningDescriptor.setCategory("Status");
+ return warningDescriptor;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+
+public ConfigResultsElement(AbstractResults results, ResultsElement parent) {
+ super(results, parent);
+}
+
+public int compareTo(Object o) {
+ // TODO Auto-generated method stub
+ return super.compareTo(o);
+}
+ResultsElement createChild(AbstractResults testResults) {
+ return new BuildResultsElement(testResults, this);
+}
+
+BuildResultsElement getBaselineBuild() {
+ if (this.baselineBuild == null) {
+ this.baselineBuild = new BuildResultsElement(getConfigResults().getBaselineBuildResults(), this);
+ }
+ return this.baselineBuild;
+}
+
+/**
+ * Get the baseline build used for this configuration.
+ *
+ * @param buildName The name of the build to have the baseline
+ * @return The baseline build as {@link BuildResultsElement}.
+ */
+public String getBaselineBuildName(String buildName) {
+ return getConfigResults().getBaselineBuildResults(buildName).getName();
+}
+
+private ConfigResults getConfigResults() {
+ return (ConfigResults) this.results;
+}
+
+BuildResultsElement getCurrentBuild() {
+ if (this.currentBuild == null) {
+ this.currentBuild = new BuildResultsElement(getConfigResults().getCurrentBuildResults(), this);
+ }
+ return this.currentBuild;
+}
+
+public String getLabel(Object o) {
+ String description = getConfigResults().getDescription();
+ int index = description.indexOf(" (");
+ if (index <= 0) {
+ return description;
+ }
+ return description.substring(0, index);
+}
+
+/*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang
+ * .Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ ConfigResults configResults = getConfigResults();
+ if (propKey.equals(P_ID_CONFIG_NAME)) {
+ return configResults.getName();
+ }
+ if (propKey.equals(P_ID_CONFIG_DESCRIPTION)) {
+ return configResults.getDescription();
+ }
+ if (propKey.equals(P_ID_CONFIG_CURRENT_BUILD)) {
+ return getCurrentBuild();
+ }
+ if (propKey.equals(P_ID_CONFIG_BASELINE_BUILD)) {
+ return getBaselineBuild();
+ }
+ if (propKey.equals(P_ID_CONFIG_BASELINED)) {
+ return new Boolean(configResults.isBaselined());
+ }
+ if (propKey.equals(P_ID_CONFIG_VALID)) {
+ return new Boolean(configResults.isValid());
+ }
+ if (propKey.equals(P_ID_CONFIG_DELTA)) {
+ return new Double(configResults.getDelta());
+ }
+ if (propKey.equals(P_ID_CONFIG_ERROR)) {
+ return new Double(configResults.getError());
+ }
+ if (propKey.equals(P_ID_STATUS_ERROR)) {
+ if (getStatus() == MISSING) {
+ PerformanceResultsElement performanceResultsElement = (PerformanceResultsElement) ((ResultsElement)((ResultsElement)getParent(null)).getParent(null)).getParent(null);
+ return "No result for build "+performanceResultsElement.getName()+" on this machine!";
+ }
+ if ((getStatus() & BIG_DELTA) != 0) {
+ return "The delta on this machine is over the 10% threshold, hence may indicate a possible regression";
+ }
+ }
+ return super.getPropertyValue(propKey);
+}
+
+/**
+ * Return the statistics of the build along its history.
+ *
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+public double[] getStatistics() {
+ if (this.statistics == null) {
+ this.statistics = getConfigResults().getStatistics(Util.BASELINE_BUILD_PREFIXES);
+ }
+ return this.statistics;
+}
+
+void initStatus() {
+ ConfigResults configResults = getConfigResults();
+ if (configResults.isValid()) {
+ initStatus(configResults.getCurrentBuildResults());
+ } else {
+ this.status = MISSING;
+ }
+}
+
+/*
+ * Write the element status in the given stream
+ */
+StringBuffer writableStatus(StringBuffer buffer, int kind, StringBuffer excluded) {
+ if ((this.status & BIG_DELTA) != 0) { // there's a failure on this config
+
+ // Get numbers
+ int buildsNumber = kind & IPerformancesConstants.STATUS_BUILDS_NUMBER_MASK;
+ ConfigResults configResults = getConfigResults();
+ double[][] numbers = configResults.getLastNumbers(buildsNumber);
+ int numbersLength = numbers.length;
+
+ // if there are several builds to confirm the regression, then verify all deltas
+ if (numbersLength > 1) {
+ if (numbersLength < buildsNumber) {
+ // there's not enough builds to wee whether there's a real regression, hence skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status because there's only "+numbersLength+" builds available although "+buildsNumber+" is required to decide a regression is confirmed or not!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ int confirmed = 1;
+ for (int i=1; i<numbersLength; i++) {
+ if (numbers[i][AbstractResults.DELTA_VALUE_INDEX] < -0.1) {
+ confirmed++;
+ }
+ }
+ float ratio = ((float) confirmed) / numbersLength;
+ if (ratio < 0.8) {
+ // more than 20% of previous build didn't fail, hence skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status because only "+confirmed+" builds failed on last "+buildsNumber+" ones!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ }
+
+ // Add values
+ double[] values = numbers[0];
+ double buildValue = values[AbstractResults.BUILD_VALUE_INDEX];
+ double baselineValue = values[AbstractResults.BASELINE_VALUE_INDEX];
+ double delta = values[AbstractResults.DELTA_VALUE_INDEX];
+ double error = values[AbstractResults.DELTA_ERROR_INDEX];
+ StringBuffer localBuffer = new StringBuffer(" ");
+ localBuffer.append(configResults.getName());
+ double[] stats = null;
+ boolean printValues = (kind & IPerformancesConstants.STATUS_VALUES) != 0;
+ if (printValues) {
+ localBuffer.append(" ");
+ localBuffer.append(buildValue);
+ localBuffer.append(" ");
+ localBuffer.append(baselineValue);
+ localBuffer.append(" ");
+ localBuffer.append(buildValue-baselineValue);
+ localBuffer.append(" ");
+ localBuffer.append(Util.PERCENTAGE_FORMAT.format(delta));
+ localBuffer.append(" ");
+ localBuffer.append(Util.PERCENTAGE_FORMAT.format(error));
+ stats = getStatistics();
+ if (stats != null) {
+ localBuffer.append(" ");
+ localBuffer.append((int) stats[0]);
+ localBuffer.append(" ");
+ localBuffer.append(Util.DOUBLE_FORMAT.format(stats[1]));
+ localBuffer.append(" ");
+ localBuffer.append(Util.DOUBLE_FORMAT.format(stats[2]));
+ localBuffer.append(" ");
+ localBuffer.append(Util.PERCENTAGE_FORMAT.format(stats[3]));
+ }
+ }
+
+ /* Add comment
+ IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ String comment = preferences.get(getId(), null);
+ if (comment != null) {
+ if (stats == null && printValues) {
+ buffer.append(" ");
+ }
+ buffer.append(" ");
+ buffer.append(comment);
+ }
+ */
+
+ // Add status info
+ if (this.status != BIG_DELTA) { // there's some other info in the status
+// if (comment == null) {
+ if (stats == null && printValues) {
+ localBuffer.append(" ");
+ }
+// }
+ localBuffer.append(" ");
+ String separator = "";
+
+ // Error
+ if ((this.status & BIG_ERROR) != 0) {
+ int statusErrorLevel = kind & IPerformancesConstants.STATUS_ERROR_LEVEL_MASK;
+ if (statusErrorLevel == IPerformancesConstants.STATUS_ERROR_NOTICEABLE) {
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to a noticeable error!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(separator);
+ localBuffer.append("error (");
+ localBuffer.append(Util.PERCENTAGE_FORMAT.format(error));
+ localBuffer.append(")");
+ separator = "+";
+ double ratio = -(error/delta);
+ if (ratio > 1) {
+ switch (statusErrorLevel) {
+ case IPerformancesConstants.STATUS_ERROR_INVALID:
+ case IPerformancesConstants.STATUS_ERROR_WEIRD:
+ case IPerformancesConstants.STATUS_ERROR_SUSPICIOUS:
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to an invalid error!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(": invalid measure!");
+ } else if (ratio > 0.5) {
+ switch (statusErrorLevel) {
+ case IPerformancesConstants.STATUS_ERROR_WEIRD:
+ case IPerformancesConstants.STATUS_ERROR_SUSPICIOUS:
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to a weird error!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(": weird measure!");
+ } else if (ratio > 0.25) {
+ if (statusErrorLevel == IPerformancesConstants.STATUS_ERROR_SUSPICIOUS) {
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to a suspicious error!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(": suspicious measure!");
+ }
+ }
+
+ // Small value
+ if ((this.status & SMALL_VALUE) != 0) {
+ int statusSmallValue = kind & IPerformancesConstants.STATUS_SMALL_VALUE_MASK;
+ localBuffer.append(separator);
+ if (buildValue < 100) {
+ if (statusSmallValue == IPerformancesConstants.STATUS_SMALL_VALUE_BUILD) {
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to a small build value!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append("small build value (");
+ localBuffer.append((int)buildValue);
+ localBuffer.append("ms)");
+ }
+ int diff = (int) Math.abs(baselineValue - buildValue);
+ if (diff < 100) {
+ if (statusSmallValue == IPerformancesConstants.STATUS_SMALL_VALUE_DELTA) {
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to a small delta value!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append("small delta value (");
+ localBuffer.append(diff);
+ localBuffer.append("ms)");
+ }
+ separator = "+";
+ }
+
+ // Statistics
+ if ((this.status & NOT_RELIABLE) != 0) {
+ switch (kind & IPerformancesConstants.STATUS_STATISTICS_MASK) {
+ case IPerformancesConstants.STATUS_STATISTICS_UNSTABLE:
+ case IPerformancesConstants.STATUS_STATISTICS_ERRATIC:
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to erratic statistics!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(separator);
+ localBuffer.append("erratic");
+ separator = "+";
+ } else if ((this.status & NOT_STABLE) != 0) {
+ if ((kind & IPerformancesConstants.STATUS_STATISTICS_UNSTABLE) != 0) {
+ // Skip result
+ if (excluded != null) {
+ excluded.append(configResults+" excluded from status due to unstable statistics!");
+ excluded.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+ }
+ localBuffer.append(separator);
+ localBuffer.append("unstable");
+ separator = "+";
+ }
+ }
+
+ // Write status
+ buffer.append(localBuffer);
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ return buffer;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/DimResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/DimResultsElement.java
new file mode 100644
index 0000000..3a3b88d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/DimResultsElement.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.Vector;
+
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.results.db.*;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class DimResultsElement extends ResultsElement {
+
+ Dim dim;
+
+ // Property descriptors
+ static final String P_ID_DIMENSION = "DimResultsElement.dim"; //$NON-NLS-1$
+ static final String P_ID_COUNT = "DimResultsElement.count"; //$NON-NLS-1$
+ static final String P_ID_AVERAGE = "DimResultsElement.average"; //$NON-NLS-1$
+ static final String P_ID_STDDEV = "DimResultsElement.stddev"; //$NON-NLS-1$
+ static final String P_ID_ERROR= "DimResultsElement.error"; //$NON-NLS-1$
+ static final String P_ID_HAD_VALUES = "DimResultsElement.hadvalues"; //$NON-NLS-1$
+
+ static final String P_STR_DIMENSION = "dimension"; //$NON-NLS-1$
+ static final String P_STR_COUNT= "count"; //$NON-NLS-1$
+ static final String P_STR_AVERAGE = "average"; //$NON-NLS-1$
+ static final String P_STR_STDDEV = "std dev"; //$NON-NLS-1$
+ static final String P_STR_ERROR = "error"; //$NON-NLS-1$
+ static final String P_STR_HAD_VALUES = "had values"; //$NON-NLS-1$
+
+ private static final TextPropertyDescriptor DIMENSION_DESCRIPTOR = new TextPropertyDescriptor(P_ID_DIMENSION, P_STR_DIMENSION);
+ private static final PropertyDescriptor DIM_COUNT_DESCRIPTOR = new PropertyDescriptor(P_ID_COUNT, P_STR_COUNT);
+ private static final PropertyDescriptor DIM_AVERAGE_DESCRIPTOR = new PropertyDescriptor(P_ID_AVERAGE, P_STR_AVERAGE);
+ private static final PropertyDescriptor DIM_STDDEV_DESCRIPTOR = new PropertyDescriptor(P_ID_STDDEV, P_STR_STDDEV);
+ private static final PropertyDescriptor DIM_ERROR_DESCRIPTOR = new PropertyDescriptor(P_ID_ERROR, P_STR_ERROR);
+ private static final PropertyDescriptor DIM_HAD_VALUES_DESCRIPTOR = new PropertyDescriptor(P_ID_HAD_VALUES, P_STR_HAD_VALUES);
+
+ private static Vector DESCRIPTORS;
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Results category
+ DESCRIPTORS.addElement(DIMENSION_DESCRIPTOR);
+ DIMENSION_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(DIM_COUNT_DESCRIPTOR);
+ DIM_COUNT_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(DIM_AVERAGE_DESCRIPTOR);
+ DIM_AVERAGE_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(DIM_STDDEV_DESCRIPTOR);
+ DIM_STDDEV_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(DIM_ERROR_DESCRIPTOR);
+ DIM_ERROR_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(DIM_HAD_VALUES_DESCRIPTOR);
+ DIM_HAD_VALUES_DESCRIPTOR.setCategory("Results");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+
+public DimResultsElement(AbstractResults results, ResultsElement parent, Dim d) {
+ super(results, parent);
+ this.dim = d;
+}
+
+ResultsElement createChild(AbstractResults testResults) {
+ return null;
+}
+
+private BuildResults getBuildResults() {
+ return (BuildResults) this.results;
+}
+
+public String getLabel(Object o) {
+ return this.dim.getName();
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ BuildResults buildResults = getBuildResults();
+ if (propKey.equals(P_ID_DIMENSION)) {
+ return this.dim.getDescription();
+ }
+ if (propKey.equals(P_ID_COUNT)) {
+ long count = buildResults.getCount(this.dim.getId());
+ return new Double(count);
+ }
+ if (propKey.equals(P_ID_AVERAGE))
+ return new Double(buildResults.getValue(this.dim.getId()));
+ if (propKey.equals(P_ID_STDDEV))
+ return new Double(buildResults.getDeviation(this.dim.getId()));
+ if (propKey.equals(P_ID_ERROR))
+ return new Double(buildResults.getError(this.dim.getId()));
+ if (propKey.equals(P_ID_HAD_VALUES))
+ return new Boolean(buildResults.hadValues());
+ return super.getPropertyValue(propKey);
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/PerformanceResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/PerformanceResultsElement.java
new file mode 100644
index 0000000..a7073a5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/PerformanceResultsElement.java
@@ -0,0 +1,327 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.test.internal.performance.results.db.*;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+public class PerformanceResultsElement extends ResultsElement {
+
+// Singleton pattern
+public static PerformanceResultsElement PERF_RESULTS_MODEL = new PerformanceResultsElement();
+
+ String[] buildNames;
+ String lastBuildName;
+ boolean fingerprints = true;
+
+public PerformanceResultsElement() {
+ super();
+}
+
+ResultsElement createChild(AbstractResults testResults) {
+ return new ComponentResultsElement(testResults, this);
+}
+
+public String[] getBaselines() {
+ getBuildNames();
+ if (this.buildNames == null) {
+ return new String[0];
+ }
+ int length = this.buildNames.length;
+ String[] baselines = new String[length];
+ int count = 0;
+ for (int i=0; i<length; i++) {
+ if (this.buildNames[i].startsWith("R-")) {
+ baselines[count++] = this.buildNames[i];
+ }
+ }
+ if (count < length) {
+ System.arraycopy(baselines, 0, baselines = new String [count], 0, count);
+ }
+ return baselines;
+}
+
+String[] getBuildNames() {
+ if (this.buildNames == null) {
+ this.buildNames = DB_Results.DB_CONNECTION
+ ? DB_Results.getBuilds()
+ : this.results == null
+ ? new String[0]
+ : getPerformanceResults().getAllBuildNames();
+ }
+ return this.buildNames;
+}
+
+public Object[] getBuilds() {
+ getBuildNames();
+ int length = this.buildNames == null ? 0 : this.buildNames.length;
+ BuildResultsElement[] elements = new BuildResultsElement[length];
+ for (int i=0; i<length; i++) {
+ elements[i] = new BuildResultsElement(this.buildNames[i], this);
+ }
+ return elements;
+}
+
+public String[] getComponents() {
+ if (!isInitialized()) {
+ String[] components = DB_Results.getComponents();
+ int length = components.length;
+ if (length == 0) {
+ DB_Results.queryAllScenarios();
+ components = DB_Results.getComponents();
+ }
+ return components;
+ }
+ return getPerformanceResults().getComponents();
+}
+
+/**
+ * Returns the names of the configurations.
+ *
+ * @return An array of String
+ */
+public String[] getConfigs() {
+ if (!isInitialized()) {
+ String[] configs = DB_Results.getConfigs();
+ int length = configs.length;
+ if (length == 0) {
+ DB_Results.queryAllScenarios();
+ configs = DB_Results.getConfigs();
+ }
+ return configs;
+ }
+ return getPerformanceResults().getConfigNames(false);
+}
+
+/**
+ * Returns the descriptions of the configurations.
+ *
+ * @return An array of String
+ */
+public String[] getConfigDescriptions() {
+ if (!isInitialized()) {
+ String[] descriptions = DB_Results.getConfigDescriptions();
+ int length = descriptions.length;
+ if (length == 0) {
+ DB_Results.queryAllScenarios();
+ descriptions = DB_Results.getConfigDescriptions();
+ }
+ return descriptions;
+ }
+ return getPerformanceResults().getConfigBoxes(false);
+}
+
+public Object[] getElements() {
+ if (!isInitialized()) {
+ String[] components = getComponents();
+ int length = components.length;
+ ComponentResultsElement[] elements = new ComponentResultsElement[length];
+ for (int i=0; i<length; i++) {
+ elements[i] = new ComponentResultsElement(components[i], this);
+ }
+ return elements;
+ }
+ return getChildren(null);
+}
+
+public PerformanceResults getPerformanceResults() {
+ return (PerformanceResults) this.results;
+}
+
+boolean hasRead(BuildResultsElement buildResultsElement) {
+ String[] builds = this.results == null ? getBuildNames() : getPerformanceResults().getAllBuildNames();
+ if (Arrays.binarySearch(builds, buildResultsElement.getName(), Util.BUILD_DATE_COMPARATOR) < 0) {
+ return false;
+ }
+ return true;
+}
+
+public boolean isInitialized() {
+ return super.isInitialized() && this.results.size() > 0;
+}
+
+public void readLocal(File dataDir, IProgressMonitor monitor, String lastBuild) {
+ reset(lastBuild);
+ PerformanceResults performanceResults = getPerformanceResults();
+ performanceResults.setLastBuildName(lastBuild);
+ performanceResults.readLocal(dataDir, monitor);
+}
+
+public void reset(String buildName) {
+ if (buildName == null) {
+ this.results = new PerformanceResults(this.lastBuildName, null, null, System.out);
+ } else {
+ this.results = new PerformanceResults(buildName, null, null, System.out);
+ }
+ this.children = null;
+ this.buildNames = null;
+}
+
+public void resetBuildNames() {
+ this.buildNames = null;
+}
+
+public void updateBuild(String buildName, boolean force, File dataDir, IProgressMonitor monitor) {
+ if (this.results == null) {
+ reset(buildName);
+ }
+ getPerformanceResults().updateBuild(buildName, force, dataDir, monitor);
+}
+
+public void updateBuilds(String[] builds, boolean force, File dataDir, IProgressMonitor monitor) {
+ if (this.results == null) {
+ reset(null);
+ }
+ getPerformanceResults().updateBuilds(builds, force, dataDir, monitor);
+}
+
+/**
+ * Set whether only fingerprints should be taken into account or not.
+ *
+ * @param fingerprints
+ */
+public void setFingerprints(boolean fingerprints) {
+ this.fingerprints = fingerprints;
+ resetStatus();
+}
+
+public void setLastBuildName(String lastBuildName) {
+ this.lastBuildName = lastBuildName;
+ this.name = null;
+}
+
+/*
+ * Write the component status in the given file
+ */
+public StringBuffer writeStatus(File resultsFile, int kind) {
+ if (this.results == null) {
+ return null;
+ }
+ boolean values = (kind & IPerformancesConstants.STATUS_VALUES) != 0;
+ // Write status only for component with error
+ StringBuffer excluded = new StringBuffer();
+ try {
+ DataOutputStream stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(resultsFile)));
+ try {
+ StringBuffer buffer = new StringBuffer();
+ // Print build name
+ buffer.append("Status for ");
+ buffer.append(getPerformanceResults().getName());
+ buffer.append(Util.LINE_SEPARATOR);
+ // Print status options
+ if ((kind & ~IPerformancesConstants.STATUS_VALUES) > 0) {
+ buffer.append("Options: ");
+ buffer.append(Util.LINE_SEPARATOR);
+ final int errorLevel = kind & IPerformancesConstants.STATUS_ERROR_LEVEL_MASK;
+ if (errorLevel != 0) {
+ buffer.append(" error level: ");
+ switch (errorLevel) {
+ case IPerformancesConstants.STATUS_ERROR_NONE:
+ buffer.append("include all failures whatever the error level is");
+ break;
+ case IPerformancesConstants.STATUS_ERROR_NOTICEABLE:
+ buffer.append("all failures with at least a noticeable error (> 3%) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_ERROR_SUSPICIOUS:
+ buffer.append("all failures with at least a suspicious error (> 25%) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_ERROR_WEIRD:
+ buffer.append("all failures with at least a weird error (> 50%) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_ERROR_INVALID:
+ buffer.append("all failures with an invalid error (> 100%) are excluded!");
+ break;
+ }
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ final int smallValue = kind & IPerformancesConstants.STATUS_SMALL_VALUE_MASK;
+ if (smallValue > 0) {
+ buffer.append(" small value: ");
+ switch (smallValue) {
+ case IPerformancesConstants.STATUS_SMALL_VALUE_BUILD:
+ buffer.append("all failures with a small build value (<100ms) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_SMALL_VALUE_DELTA:
+ buffer.append("all failures with a small delta value (<100ms) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_SMALL_VALUE_MASK:
+ buffer.append("all failures with a small build or delta value (<100ms) are excluded!");
+ break;
+ }
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ final int stats = kind & IPerformancesConstants.STATUS_STATISTICS_MASK;
+ if (stats > 0) {
+ buffer.append(" statistics: ");
+ switch (stats) {
+ case IPerformancesConstants.STATUS_STATISTICS_ERRATIC:
+ buffer.append("all failures with erratic baseline results (variation > 20%) are excluded!");
+ break;
+ case IPerformancesConstants.STATUS_STATISTICS_UNSTABLE:
+ buffer.append("all failures with unstable baseline results (10% < variation < 20%) are excluded!");
+ break;
+ }
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ int buildsNumber = kind & IPerformancesConstants.STATUS_BUILDS_NUMBER_MASK;
+ buffer.append(" builds to confirm a regression: ");
+ buffer.append(buildsNumber);
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ // Print columns title
+ buffer.append("Component");
+ buffer.append(" Scenario");
+ buffer.append(" Machine");
+ if (values) {
+ buffer.append(" Build ");
+ buffer.append(" History ");
+ }
+ buffer.append(" Comment");
+ buffer.append(Util.LINE_SEPARATOR);
+ if (values) {
+ buffer.append(" value");
+ buffer.append(" baseline");
+ buffer.append(" variation");
+ buffer.append(" delta");
+ buffer.append(" error");
+ buffer.append(" n");
+ buffer.append(" mean");
+ buffer.append(" deviation");
+ buffer.append(" coeff");
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ stream.write(buffer.toString().getBytes());
+ StringBuffer componentBuffer = writableStatus(new StringBuffer(), kind, excluded);
+ if (componentBuffer.length() > 0) {
+ stream.write(componentBuffer.toString().getBytes());
+ }
+ }
+ finally {
+ stream.close();
+ }
+ } catch (FileNotFoundException e) {
+ System.err.println("Can't create output file"+resultsFile); //$NON-NLS-1$
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return excluded;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ResultsElement.java
new file mode 100644
index 0000000..b3646d3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ResultsElement.java
@@ -0,0 +1,599 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.test.internal.performance.eval.StatisticsUtil;
+import org.eclipse.test.internal.performance.results.db.AbstractResults;
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * An Organization Element
+ */
+public abstract class ResultsElement implements IAdaptable, IPropertySource, IWorkbenchAdapter, Comparable {
+
+ // Image descriptors
+ private static final ISharedImages WORKBENCH_SHARED_IMAGES = PlatformUI.getWorkbench().getSharedImages();
+ public static final Image ERROR_IMAGE = WORKBENCH_SHARED_IMAGES.getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+ public static final ImageDescriptor ERROR_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_OBJS_ERROR_TSK);
+ public static final Image WARN_IMAGE = WORKBENCH_SHARED_IMAGES.getImage(ISharedImages.IMG_OBJS_WARN_TSK);
+ public static final ImageDescriptor WARN_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_OBJS_WARN_TSK);
+ public static final Image INFO_IMAGE = WORKBENCH_SHARED_IMAGES.getImage(ISharedImages.IMG_OBJS_INFO_TSK);
+ public static final ImageDescriptor INFO_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK);
+ public static final Image HELP_IMAGE = WORKBENCH_SHARED_IMAGES.getImage(ISharedImages.IMG_LCL_LINKTO_HELP);
+ public static final ImageDescriptor HELP_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_LCL_LINKTO_HELP);
+ public static final ImageDescriptor FOLDER_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
+ public static final ImageDescriptor CONNECT_IMAGE_DESCRIPTOR = WORKBENCH_SHARED_IMAGES.getImageDescriptor(ISharedImages.IMG_ELCL_SYNCED);
+
+ // Model
+ ResultsElement parent;
+ AbstractResults results;
+ ResultsElement[] children;
+ String name;
+ int status = -1;
+
+ // Stats
+ double[] statistics;
+
+ // Status constants
+ // state
+ static final int UNKNOWN = 0x01;
+ static final int UNREAD = 0x02;
+ static final int READ = 0x04;
+ static final int MISSING = 0x08;
+ public static final int STATE_MASK = 0x0F;
+ // info
+ static final int SMALL_VALUE = 0x0010;
+ static final int STUDENT_TTEST = 0x0020;
+ public static final int INFO_MASK = 0x0030;
+ // warning
+ static final int NO_BASELINE = 0x0040;
+ static final int SINGLE_RUN = 0x0080;
+ static final int BIG_ERROR = 0x0100;
+ static final int NOT_STABLE = 0x0200;
+ static final int NOT_RELIABLE = 0x0400;
+ public static final int WARNING_MASK = 0x0FC0;
+ // error
+ static final int BIG_DELTA = 0x1000;
+ public static final int ERROR_MASK = 0xF000;
+
+ // Property descriptors
+ static final String P_ID_STATUS_INFO = "ResultsElement.status_info"; //$NON-NLS-1$
+ static final String P_ID_STATUS_WARNING = "ResultsElement.status_warning"; //$NON-NLS-1$
+ static final String P_ID_STATUS_ERROR = "ResultsElement.status_error"; //$NON-NLS-1$
+ static final String P_ID_STATUS_COMMENT = "ResultsElement.status_comment"; //$NON-NLS-1$
+
+ static final String P_STR_STATUS_INFO = " info"; //$NON-NLS-1$
+ static final String P_STR_STATUS_WARNING = "warning"; //$NON-NLS-1$
+ static final String P_STR_STATUS_ERROR = "error"; //$NON-NLS-1$
+ static final String P_STR_STATUS_COMMENT = "comment"; //$NON-NLS-1$
+ static final String[] NO_VALUES = new String[0];
+
+ private static Vector DESCRIPTORS;
+ static final TextPropertyDescriptor COMMENT_DESCRIPTOR = new TextPropertyDescriptor(P_ID_STATUS_COMMENT, P_STR_STATUS_COMMENT);
+ static final TextPropertyDescriptor ERROR_DESCRIPTOR = new TextPropertyDescriptor(P_ID_STATUS_ERROR, P_STR_STATUS_ERROR);
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+ static ComboBoxPropertyDescriptor getInfosDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & SMALL_VALUE) != 0) {
+ list.add("Some builds have tests with small values");
+ }
+ if ((status & STUDENT_TTEST) != 0) {
+ list.add("Some builds have student-t test error over the threshold");
+ }
+ String[] infos = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(infos);
+ }
+ ComboBoxPropertyDescriptor infoDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_INFO, P_STR_STATUS_INFO, infos);
+ infoDescriptor.setCategory("Status");
+ return infoDescriptor;
+ }
+ static PropertyDescriptor getWarningsDescriptor(int status) {
+ List list = new ArrayList();
+ if ((status & BIG_ERROR) != 0) {
+ list.add("Some builds have tests with error over 3%");
+ }
+ if ((status & NOT_RELIABLE) != 0) {
+ list.add("Some builds have no reliable tests");
+ }
+ if ((status & NOT_STABLE) != 0) {
+ list.add("Some builds have no stable tests");
+ }
+ if ((status & NO_BASELINE) != 0) {
+ list.add("Some builds have no baseline to compare with");
+ }
+ if ((status & SINGLE_RUN) != 0) {
+ list.add("Some builds have single run tests");
+ }
+ String[] warnings = new String[list.size()];
+ if (list.size() > 0) {
+ list.toArray(warnings);
+ }
+ ComboBoxPropertyDescriptor warningDescriptor = new ComboBoxPropertyDescriptor(P_ID_STATUS_WARNING, P_STR_STATUS_WARNING, warnings);
+ warningDescriptor.setCategory("Status");
+ return warningDescriptor;
+ }
+
+ResultsElement() {
+}
+
+ResultsElement(AbstractResults results, ResultsElement parent) {
+ this.parent = parent;
+ this.results = results;
+}
+
+ResultsElement(String name, ResultsElement parent) {
+ this.parent = parent;
+ this.name = name;
+}
+
+public int compareTo(Object o) {
+ if (this.results == null) {
+ if (o instanceof ResultsElement && this.name != null) {
+ ResultsElement element = (ResultsElement) o;
+ return this.name.compareTo(element.getName());
+ }
+ return -1;
+ }
+ if (o instanceof ResultsElement) {
+ return this.results.compareTo(((ResultsElement)o).results);
+ }
+ return -1;
+}
+
+abstract ResultsElement createChild(AbstractResults testResults);
+
+/* (non-Javadoc)
+ * Method declared on IAdaptable
+ */
+public Object getAdapter(Class adapter) {
+ if (adapter == IPropertySource.class) {
+ return this;
+ }
+ if (adapter == IWorkbenchAdapter.class) {
+ return this;
+ }
+ return null;
+}
+
+/**
+ * Iterate the element children.
+ */
+public ResultsElement[] getChildren() {
+ if (this.results == null) {
+ return new ResultsElement[0];
+ }
+ if (this.children == null) {
+ initChildren();
+ }
+ return this.children;
+}
+
+/* (non-Javadoc)
+ * Method declared on IWorkbenchAdapter
+ */
+public Object[] getChildren(Object o) {
+ if (this.results == null) {
+ return new Object[0];
+ }
+ if (this.children == null) {
+ initChildren();
+ }
+ return this.children;
+}
+
+/* (non-Javadoc)
+ * Method declared on IPropertySource
+ */
+public Object getEditableValue() {
+ return this;
+}
+
+final String getId() {
+ return getId(new StringBuffer()).toString();
+}
+
+private StringBuffer getId(StringBuffer buffer) {
+ if (this.parent != null) {
+ return this.parent.getId(buffer).append('/').append(getName());
+ }
+ return buffer.append(DB_Results.getDbName());
+}
+
+/* (non-Javadoc)
+ * Method declared on IWorkbenchAdapter
+ */
+public ImageDescriptor getImageDescriptor(Object object) {
+ if (object instanceof ResultsElement) {
+ ResultsElement resultsElement = (ResultsElement) object;
+// DEBUG
+// if (resultsElement.getName().equals("I20090806-0100")) {
+// if (resultsElement.results != null) {
+// String toString = resultsElement.results.getParent().toString();
+// String toString = resultsElement.results.toString();
+// if (toString.indexOf("testStoreExists")>0 && toString.indexOf("eplnx2")>0) {
+// System.out.println("stop");
+// }
+// }
+// }
+ int elementStatus = resultsElement.getStatus();
+ if (elementStatus == MISSING) {
+ return HELP_IMAGE_DESCRIPTOR;
+ }
+ if ((elementStatus & ResultsElement.ERROR_MASK) != 0) {
+ return ERROR_IMAGE_DESCRIPTOR;
+ }
+ if ((elementStatus & ResultsElement.WARNING_MASK) != 0) {
+ return WARN_IMAGE_DESCRIPTOR;
+ }
+ if ((elementStatus & ResultsElement.INFO_MASK) != 0) {
+ return INFO_IMAGE_DESCRIPTOR;
+ }
+ }
+ return null;
+}
+
+/* (non-Javadoc)
+ * Method declared on IWorkbenchAdapter
+ */
+public String getLabel(Object o) {
+ return getName();
+}
+
+/**
+ * Returns the name
+ */
+public String getName() {
+ if (this.name == null && this.results != null) {
+ this.name = this.results.getName();
+ }
+ return this.name;
+}
+
+/**
+ * Returns the parent
+ */
+public Object getParent(Object o) {
+ return this.parent;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ if (propKey.equals(P_ID_STATUS_INFO)) {
+ if ((getStatus() & INFO_MASK) != 0) {
+ return new Integer(0);
+ }
+ }
+ if (propKey.equals(P_ID_STATUS_WARNING)) {
+ if ((getStatus() & WARNING_MASK) != 0) {
+ return new Integer(0);
+ }
+ }
+ if (propKey.equals(P_ID_STATUS_ERROR)) {
+ if ((getStatus() & BIG_DELTA) != 0) {
+ return "Some builds have tests with regression";
+ }
+ }
+ if (propKey.equals(P_ID_STATUS_COMMENT)) {
+ IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ return preferences.get(getId(), "");
+ }
+ return null;
+}
+
+public ResultsElement getResultsElement(String resultName) {
+ int length = getChildren(null).length;
+ for (int i=0; i<length; i++) {
+ ResultsElement searchedResults = this.children[i];
+ if (searchedResults.getName().equals(resultName)) {
+ return searchedResults;
+ }
+ }
+ return null;
+}
+
+/**
+ * Return the status of the element.
+ *
+ * The status is a bit mask pattern where digits are
+ * allowed as follow:
+ * <ul>
+ * <li>0-3: bits for state showing whether the element is
+ * <ul>
+ * <li>{@link #UNKNOWN} : not connected to a db</li>
+ * <li>{@link #UNREAD} : is not valid (e.g. NaN results)</li>
+ * <li>{@link #MISSING} : no results (e.g. the perf machine crashed and didn't store any results)</li>
+ * <li>{@link #READ} : has valid results</li>
+ * </ul>
+ * </li>
+ * <li>4-5: bits for information. Current possible information are
+ * <ul>
+ * <li>{@link #SMALL_VALUE} : build results or delta with baseline value is under 100ms</li>
+ * <li>{@link #STUDENT_TTEST} : the Student T-test is over the threshold (old yellow color for test results)</li>
+ * </ul>
+ * </li>
+ * <li>6-11: bits for warnings. Current possible warnings are
+ * <ul>
+ * <li>{@link #NO_BASELINE} : no baseline for the current build</li>
+ * <li>{@link #SINGLE_RUN} : the test has only one run (i.e. no error could be computed), hence its reliability cannot be evaluated</li>
+ * <li>{@link #BIG_ERROR} : the test result is over the 3% threshold</li>
+ * <li>{@link #NOT_STABLE} : the test history shows a deviation between 10% and 20% (may mean that this test is not so reliable)</li>
+ * <li>{@link #NOT_RELIABLE} : the test history shows a deviation over 20% (surely means that this test is too erratic to be reliable)</li>
+ * </ul>
+ * </li>
+ * <li>12-15: bits for errors. Current possible errors are
+ * <ul>
+ * <li>{@link #BIG_DELTA} : the delta for the test is over the 10% threshold</li>
+ * </ul>
+ * </li>
+ * </ul>
+ *
+ * Note that these explanation applied to {@link BuildResultsElement}, and {@link DimResultsElement}.
+ * For {@link ComponentResultsElement}, and {@link ScenarioResultsElement}, it's the merge of all the children status
+ * and means "Some tests have..." instead of "The test has...". For {@link ConfigResultsElement}, it means the status
+ * of the most recent build compared to its most recent baseline.
+ *
+ * @return An int with each bit set when the corresponding symptom applies.
+ */
+public final int getStatus() {
+ if (this.status < 0) {
+ initStatus();
+ }
+ return this.status;
+}
+
+/**
+ * Return the statistics of the build along its history.
+ *
+ * @return An array of double built as follows:
+ * <ul>
+ * <li>0: numbers of values</li>
+ * <li>1: mean of values</li>
+ * <li>2: standard deviation of these values</li>
+ * <li>3: coefficient of variation of these values</li>
+ * </ul>
+ */
+double[] getStatistics() {
+ return this.statistics;
+}
+
+/**
+ * Returns whether the element (or one in its hierarchy) has an error.
+ *
+ * @return <code> true</code> if the element or one in its hierarchy has an error,
+ * <code> false</code> otherwise
+ */
+public final boolean hasError() {
+ return (getStatus() & ERROR_MASK) != 0;
+}
+
+void initChildren() {
+ AbstractResults[] resultsChildren = this.results.getChildren();
+ int length = resultsChildren.length;
+ this.children = new ResultsElement[length];
+ int count = 0;
+ for (int i=0; i<length; i++) {
+ ResultsElement childElement = createChild(resultsChildren[i]);
+ if (childElement != null) {
+ this.children[count++] = childElement;
+ }
+ }
+ if (count < length) {
+ System.arraycopy(this.children, 0, this.children = new ResultsElement[count], 0, count);
+ }
+}
+void initStatus() {
+ this.status = READ;
+ if (this.results != null) {
+ if (this.children == null) initChildren();
+ int length = this.children.length;
+ for (int i=0; i<length; i++) {
+ this.status |= this.children[i].getStatus();
+ }
+ }
+}
+
+int initStatus(BuildResults buildResults) {
+ this.status = READ;
+
+ // Get values
+ double buildValue = buildResults.getValue();
+ ConfigResults configResults = (ConfigResults) buildResults.getParent();
+ BuildResults baselineResults = configResults.getBaselineBuildResults(buildResults.getName());
+ double baselineValue = baselineResults.getValue();
+ double delta = (baselineValue - buildValue) / baselineValue;
+
+ // Store if there's no baseline
+ if (Double.isNaN(delta)) {
+ this.status |= NO_BASELINE;
+ }
+
+ // Store if there's only one run
+ long baselineCount = baselineResults.getCount();
+ long currentCount = buildResults.getCount();
+ double error = Double.NaN;
+ if (baselineCount == 1 || currentCount == 1) {
+ this.status |= SINGLE_RUN;
+ }
+
+ // Store if the T-test is not good
+ double ttestValue = Util.computeTTest(baselineResults, buildResults);
+ int degreeOfFreedom = (int) (baselineResults.getCount()+buildResults.getCount()-2);
+ if (ttestValue >= 0 && StatisticsUtil.getStudentsT(degreeOfFreedom, StatisticsUtil.T90) >= ttestValue) {
+ this.status |= STUDENT_TTEST;
+ }
+
+ // Store if there's a big error (over 3%)
+ double baselineError = baselineResults.getError();
+ double currentError = buildResults.getError();
+ error = Double.isNaN(baselineError)
+ ? currentError / baselineValue
+ : Math.sqrt(baselineError*baselineError + currentError*currentError) / baselineValue;
+ if (error > 0.03) {
+ this.status |= BIG_ERROR;
+ }
+
+ // Store if there's a big delta (over 10%)
+ if (delta <= -0.1) {
+ this.status |= BIG_DELTA;
+ double currentBuildValue = buildResults.getValue();
+ double diff = Math.abs(baselineValue - currentBuildValue);
+ if (currentBuildValue < 100 || diff < 100) { // moderate the status when
+ // diff is less than 100ms
+ this.status |= SMALL_VALUE;
+ } else {
+ double[] stats = getStatistics();
+ if (stats != null) {
+ if (stats[3] > 0.2) { // invalidate the status when the test
+ // historical deviation is over 20%
+ this.status |= NOT_RELIABLE;
+ } else if (stats[3] > 0.1) { // moderate the status when the test
+ // historical deviation is between 10%
+ // and 20%
+ this.status |= NOT_STABLE;
+ }
+ }
+ }
+ }
+
+ return this.status;
+}
+
+public boolean isInitialized() {
+ return this.results != null;
+}
+
+/* (non-Javadoc)
+ * Method declared on IPropertySource
+ */
+public boolean isPropertySet(Object property) {
+ return false;
+}
+
+boolean onlyFingerprints() {
+ if (this.parent != null) {
+ return this.parent.onlyFingerprints();
+ }
+ return ((PerformanceResultsElement)this).fingerprints;
+}
+
+/* (non-Javadoc)
+ * Method declared on IPropertySource
+ */
+public void resetPropertyValue(Object property) {
+}
+
+void resetStatus() {
+ this.status = -1;
+ if (this.results != null) {
+ if (this.children == null) initChildren();
+ int length = this.children.length;
+ for (int i=0; i<length; i++) {
+ this.children[i].resetStatus();
+ }
+ }
+}
+
+public void setPropertyValue(Object name, Object value) {
+ if (name.equals(P_ID_STATUS_COMMENT)) {
+ IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ preferences.put(getId(), (String) value);
+ try {
+ preferences.flush();
+ } catch (BackingStoreException e) {
+ // skip
+ }
+ }
+}
+
+/**
+ * Sets the image descriptor
+ */
+void setImageDescriptor(ImageDescriptor desc) {
+// this.imageDescriptor = desc;
+}
+
+public String toString() {
+ if (this.results == null) {
+ return getName();
+ }
+ return this.results.toString();
+}
+
+/*
+ * Write the element status in the given stream
+ */
+StringBuffer writableStatus(StringBuffer buffer, int kind, StringBuffer excluded) {
+ int length = this.children.length;
+ for (int i=0; i<length; i++) {
+ this.children[i].writableStatus(buffer, kind, excluded);
+ }
+ return buffer;
+}
+
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ScenarioResultsElement.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ScenarioResultsElement.java
new file mode 100644
index 0000000..5957d6a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/model/ScenarioResultsElement.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.model;
+
+import java.util.Vector;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.test.internal.performance.results.db.*;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class ScenarioResultsElement extends ResultsElement {
+
+ // Property descriptors
+ static final String P_ID_SCENARIO_LABEL = "ScenarioResultsElement.label"; //$NON-NLS-1$
+ static final String P_ID_SCENARIO_FILE_NAME = "ScenarioResultsElement.filename"; //$NON-NLS-1$
+ static final String P_ID_SCENARIO_SHORT_NAME = "ScenarioResultsElement.shortname"; //$NON-NLS-1$
+
+ static final String P_STR_SCENARIO_LABEL = "label"; //$NON-NLS-1$
+ static final String P_STR_SCENARIO_FILE_NAME = "file name"; //$NON-NLS-1$
+ static final String P_STR_SCENARIO_SHORT_NAME = "short name"; //$NON-NLS-1$
+
+ private static final TextPropertyDescriptor SCENARIO_LABEL_DESCRIPTOR = new TextPropertyDescriptor(P_ID_SCENARIO_LABEL, P_STR_SCENARIO_LABEL);
+ private static final TextPropertyDescriptor SCENARIO_FILE_NAME_DESCRIPTOR = new TextPropertyDescriptor(P_ID_SCENARIO_FILE_NAME, P_STR_SCENARIO_FILE_NAME);
+ private static final TextPropertyDescriptor SCENARIO_SHORT_NAME_DESCRIPTOR = new TextPropertyDescriptor(P_ID_SCENARIO_SHORT_NAME, P_STR_SCENARIO_SHORT_NAME);
+
+ private static Vector DESCRIPTORS;
+ static Vector initDescriptors(int status) {
+ DESCRIPTORS = new Vector();
+ // Status category
+ DESCRIPTORS.add(getInfosDescriptor(status));
+ DESCRIPTORS.add(getWarningsDescriptor(status));
+ DESCRIPTORS.add(ERROR_DESCRIPTOR);
+ ERROR_DESCRIPTOR.setCategory("Status");
+ // Results category
+ DESCRIPTORS.addElement(SCENARIO_LABEL_DESCRIPTOR);
+ SCENARIO_LABEL_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(SCENARIO_FILE_NAME_DESCRIPTOR);
+ SCENARIO_FILE_NAME_DESCRIPTOR.setCategory("Results");
+ DESCRIPTORS.addElement(SCENARIO_SHORT_NAME_DESCRIPTOR);
+ SCENARIO_SHORT_NAME_DESCRIPTOR.setCategory("Results");
+ // Survey category
+ DESCRIPTORS.add(COMMENT_DESCRIPTOR);
+ COMMENT_DESCRIPTOR.setCategory("Survey");
+ return DESCRIPTORS;
+ }
+ static Vector getDescriptors() {
+ return DESCRIPTORS;
+ }
+
+ScenarioResultsElement(AbstractResults results, ResultsElement parent) {
+ super(results, parent);
+}
+
+ResultsElement createChild(AbstractResults testResults) {
+ return new ConfigResultsElement(testResults, this);
+}
+
+public String getLabel(Object o) {
+ return ((ScenarioResults) this.results).getShortName();
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
+ */
+public IPropertyDescriptor[] getPropertyDescriptors() {
+ Vector descriptors = getDescriptors();
+ if (descriptors == null) {
+ descriptors = initDescriptors(getStatus());
+ }
+ int size = descriptors.size();
+ IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size];
+ descriptorsArray[0] = getInfosDescriptor(getStatus());
+ descriptorsArray[1] = getWarningsDescriptor(getStatus());
+ for (int i=2; i<size; i++) {
+ descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i);
+ }
+ return descriptorsArray;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
+ */
+public Object getPropertyValue(Object propKey) {
+ ScenarioResults scenarioResults = (ScenarioResults) this.results;
+ if (propKey.equals(P_ID_SCENARIO_LABEL))
+ return scenarioResults.getLabel();
+ if (propKey.equals(P_ID_SCENARIO_FILE_NAME))
+ return scenarioResults.getFileName();
+ if (propKey.equals(P_ID_SCENARIO_SHORT_NAME))
+ return scenarioResults.getShortName();
+ return super.getPropertyValue(propKey);
+}
+
+/**
+ * Returns whether one of the scenario's config has a summary or not.
+ *
+ * @return <code>true</code> if one of the scenario's config has a summary
+ * <code>false</code> otherwise.
+ */
+public boolean hasSummary() {
+ if (this.results == null) return false;
+ return ((ScenarioResults)this.results).hasSummary();
+}
+
+void initStatus() {
+ if (onlyFingerprints()) {
+ if (hasSummary()) {
+ super.initStatus();
+ } else {
+ this.status = READ;
+ }
+ } else {
+ super.initStatus();
+ }
+}
+
+StringBuffer writableStatus(StringBuffer buffer, int kind, StringBuffer excluded) {
+ // Write status for scenarios having error
+ if ((getStatus() & ERROR_MASK) != 0) {
+
+ // Get children status
+ StringBuffer childrenBuffer = super.writableStatus(new StringBuffer(), kind, excluded);
+
+ // Write status on file if not excluded
+ if (childrenBuffer.length() > 0) {
+ buffer.append(" ");
+ buffer.append(getLabel(null));
+ IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ String comment = preferences.get(getId(), null);
+ if (comment != null) {
+ if ((kind & IPerformancesConstants.STATUS_VALUES) != 0) {
+ buffer.append(" ");
+ } else {
+ buffer.append(" ");
+ }
+ buffer.append(comment);
+ }
+ buffer.append(Util.LINE_SEPARATOR);
+ buffer.append(childrenBuffer);
+ buffer.append(Util.LINE_SEPARATOR);
+ }
+ }
+ return buffer;
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/BuildsView.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/BuildsView.java
new file mode 100644
index 0000000..3dabb41
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/BuildsView.java
@@ -0,0 +1,659 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Comparator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.model.BuildResultsElement;
+import org.eclipse.test.internal.performance.results.model.ResultsElement;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.test.performance.ui.GenerateResults;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+
+/**
+ * View to see all the builds which have performance results stored in the database.
+ * <p>
+ * Typical actions from this view are update local data files with builds results
+ * and generated the HTML pages.
+ * </p>
+ */
+public class BuildsView extends PerformancesView {
+
+ /**
+ * Action to generate results.
+ */
+ final class GenerateAction extends Action {
+ IStatus status;
+
+ public void run() {
+
+ // Ask for output directory
+ String resultGenerationDir = BuildsView.this.preferences.get(IPerformancesConstants.PRE_RESULTS_GENERATION_DIR, "");
+ String pathFilter = (BuildsView.this.outputDir == null) ? resultGenerationDir : BuildsView.this.outputDir.getPath();
+ File dir = changeDir(pathFilter, "Select directory to write comparison files");
+ if (dir == null) {
+ return;
+ }
+ BuildsView.this.outputDir = dir;
+ BuildsView.this.preferences.put(IPerformancesConstants.PRE_RESULTS_GENERATION_DIR, dir.getAbsolutePath());
+
+ // Select the reference
+ String[] baselines = BuildsView.this.results.getBaselines();
+ int bLength = baselines.length;
+ String selectedBaseline;
+ switch (bLength) {
+ case 0:
+ // no baseline, nothing to do...
+ selectedBaseline = BuildsView.this.results.getPerformanceResults().getBaselineName();
+ break;
+ case 1:
+ // only one baseline, no selection to do
+ selectedBaseline = baselines[0];
+ break;
+ default:
+ // select the baseline from list
+ ElementListSelectionDialog dialog = new ElementListSelectionDialog(getSite().getShell(), new LabelProvider());
+ dialog.setTitle(getTitleToolTip());
+ dialog.setMessage("Select the baseline to use while generating results:");
+ String[] defaultBaseline = new String[] { baselines[baselines.length - 1] };
+ dialog.setInitialSelections(defaultBaseline);
+ dialog.setElements(baselines);
+ dialog.open();
+ Object[] selected = dialog.getResult();
+ if (selected == null)
+ return;
+ selectedBaseline = (String) selected[0];
+ break;
+ }
+ final String baselineName = selectedBaseline;
+ BuildsView.this.results.getPerformanceResults().setBaselineName(baselineName);
+
+ // Ask for fingerprints
+ final boolean fingerprints = MessageDialog.openQuestion(BuildsView.this.shell, getTitleToolTip(), "Generate only fingerprints?");
+
+ // Generate all selected builds
+ int length = BuildsView.this.buildsResults.length;
+ for (int i = 0; i < length; i++) {
+ generate(i, baselineName, fingerprints);
+ }
+ }
+
+ /*
+ * Generate the HTML pages.
+ */
+ private void generate(int i, final String baselineName, final boolean fingerprints) {
+ // Create output directory
+ final String buildName = BuildsView.this.buildsResults[i].getName();
+ final File genDir = new File(BuildsView.this.outputDir, buildName);
+ if (!genDir.exists() && !genDir.mkdir()) {
+ MessageDialog.openError(BuildsView.this.shell, getTitleToolTip(), "Cannot create " + genDir.getPath() + " to generate results!");
+ return;
+ }
+
+ // Create runnable
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try {
+ monitor.beginTask("Generate performance results", 10000);
+ GenerateResults generation = new GenerateResults(BuildsView.this.results.getPerformanceResults(),
+ buildName,
+ baselineName,
+ fingerprints,
+ BuildsView.this.dataDir,
+ genDir);
+ GenerateAction.this.status = generation.run(monitor);
+ monitor.done();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ };
+
+ // Run with progress monitor
+ ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell());
+ try {
+ readProgress.run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ // skip
+ } catch (InterruptedException e) {
+ // skip
+ }
+
+ // Results
+ if (!this.status.isOK()) {
+ StringWriter swriter = new StringWriter();
+ PrintWriter pwriter = new PrintWriter(swriter);
+ swriter.write(this.status.getMessage());
+ Throwable ex = this.status.getException();
+ if (ex != null) {
+ swriter.write(": ");
+ swriter.write(ex.getMessage());
+ swriter.write('\n');
+ ex.printStackTrace(pwriter);
+ }
+ MessageDialog.open(this.status.getSeverity(),
+ BuildsView.this.shell,
+ getTitleToolTip(),
+ swriter.toString(),
+ SWT.NONE);
+ }
+ }
+ }
+
+ /**
+ * Action to update local data files with the performance results of a build.
+ *
+ * This may be done lazily (i.e. not done if the local data already knows
+ * the build) or forced (i.e. done whatever the local data files contain).
+ */
+ class UpdateBuildAction extends Action {
+
+ boolean force;
+
+ UpdateBuildAction(boolean force) {
+ super();
+ this.force = force;
+ }
+
+ public void run() {
+
+ // Verify that directories are set
+ if (BuildsView.this.dataDir == null) {
+ if (changeDataDir() == null) {
+ if (!MessageDialog.openConfirm(BuildsView.this.shell, getTitleToolTip(), "No local files directory is set, hence the update could not be written! OK to continue?")) {
+ return;
+ }
+ }
+ }
+
+ // Progress dialog
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try {
+ updateBuilds(monitor);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell());
+ try {
+ readProgress.run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ return;
+ } catch (InterruptedException e) {
+ return;
+ }
+
+ // Reset Components and Builds views input
+ refreshInput();
+ getSiblingView().refreshInput();
+ }
+
+ void updateBuilds(IProgressMonitor monitor) {
+ BuildsView.this.updateBuilds(monitor, this.force);
+ }
+ }
+
+ /**
+ * Action to update local data files with the performance results of all builds.
+ *
+ * This may be done lazily (i.e. not done if the local data already knows
+ * the build) or forced (i.e. done whatever the local data files contain).
+ */
+ class UpdateAllBuildsAction extends UpdateBuildAction {
+
+ UpdateAllBuildsAction(boolean force) {
+ super(force);
+ }
+//
+// public boolean isEnabled() {
+// String[] elements = buildsToUpdate();
+// return elements != null;
+// }
+
+ void updateBuilds(IProgressMonitor monitor) {
+ BuildsView.this.updateAllBuilds(monitor, this.force);
+ }
+ }
+
+ /**
+ * Class to compare builds regarding their date instead of their name.
+ *
+ * @see Util#getBuildDate(String)
+ */
+ class BuildDateComparator implements Comparator {
+ public int compare(Object o1, Object o2) {
+ String s1 = (String) o1;
+ String s2 = (String) o2;
+ return Util.getBuildDate(s1).compareTo(Util.getBuildDate(s2));
+ }
+ }
+
+ // Views
+ PerformancesView componentsView;
+
+ // Results model
+ BuildResultsElement[] buildsResults;
+
+ // Generation info
+ File outputDir;
+
+ // Actions
+ Action generate;
+ UpdateBuildAction updateBuild, updateAllBuilds;
+// UpdateBuildAction forceUpdateBuild, forceUpdateAllBuilds;
+
+ // SWT resources
+ Font italicFont;
+
+/*
+ * Default constructor.
+ */
+public BuildsView() {
+ this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ this.preferences.addPreferenceChangeListener(this);
+}
+
+/*
+ * Compute the list of builds to update based on their status.
+ */
+String[] buildsToUpdate() {
+ Object[] elements = this.results.getBuilds();
+ int length = elements.length;
+ String[] buildsToUpdate = new String[length];
+ int count = 0;
+ for (int i=0; i<length; i++) {
+ BuildResultsElement element = (BuildResultsElement) elements[i];
+ if (element.getStatus() == 0) {
+ buildsToUpdate[count++] = element.getName();
+ }
+ }
+ if (count == 0) return null;
+ if (count < length) {
+ System.arraycopy(buildsToUpdate, 0, buildsToUpdate = new String[count], 0, count);
+ }
+ return buildsToUpdate;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+public void createPartControl(Composite parent) {
+ super.createPartControl(parent);
+
+ // Create the viewer
+ this.viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+
+ // Set the content provider: first level is builds list
+ WorkbenchContentProvider contentProvider = new WorkbenchContentProvider() {
+ public Object[] getElements(Object o) {
+ return getBuilds();
+ }
+ };
+ this.viewer.setContentProvider(contentProvider);
+
+ // Set the label provider
+ WorkbenchLabelProvider labelProvider = new WorkbenchLabelProvider() {
+
+ // Set an italic font when no local data have been read
+ public Font getFont(Object element) {
+ Font font = super.getFont(element);
+ if (element instanceof BuildResultsElement) {
+ if (((BuildResultsElement) element).isUnknown()) {
+ if (BuildsView.this.italicFont == null) {
+ FontData[] defaultFont = JFaceResources.getDefaultFont().getFontData();
+ FontData italicFontData = new FontData(defaultFont[0].getName(), defaultFont[0].getHeight(), SWT.ITALIC);
+ BuildsView.this.italicFont = new Font(DEFAULT_DISPLAY, italicFontData);
+ }
+ return BuildsView.this.italicFont;
+ }
+ }
+ return font;
+ }
+
+ // Set font in gray when no local data is available (i.e. local data needs to be updated)
+ public Color getForeground(Object element) {
+ Color color = super.getForeground(element);
+ if (element instanceof BuildResultsElement) {
+ if (!((BuildResultsElement) element).isRead()) {
+ color = DARK_GRAY;
+ }
+ }
+ return color;
+ }
+ };
+ this.viewer.setLabelProvider(labelProvider);
+
+ // Set the children sorter
+ ViewerSorter nameSorter = new ViewerSorter() {
+
+ // Sort children using specific comparison (see the implementation
+ // of the #compareTo(Object) in the ResultsElement hierarchy
+ public int compare(Viewer view, Object e1, Object e2) {
+ if (e2 instanceof ResultsElement) {
+ return ((ResultsElement) e2).compareTo(e1);
+ }
+ return super.compare(view, e1, e2);
+ }
+ };
+ this.viewer.setSorter(nameSorter);
+
+ // Finalize viewer initialization
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(this.viewer.getControl(), "org.eclipse.test.performance.ui.builds");
+ finalizeViewerCreation();
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+public void dispose() {
+ if (this.italicFont != null) {
+ this.italicFont.dispose();
+ }
+ super.dispose();
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+ */
+void fillContextMenu(IMenuManager manager) {
+ super.fillContextMenu(manager);
+ manager.add(this.generate);
+ manager.add(this.updateBuild);
+// manager.add(this.forceUpdateBuild);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#fillLocalPullDown(org.eclipse.jface.action.IMenuManager)
+ */
+void fillFiltersDropDown(IMenuManager manager) {
+ super.fillFiltersDropDown(manager);
+ manager.add(this.filterLastBuilds);
+}
+
+/*
+ * Fill the local data drop-down menu
+ */
+void fillLocalDataDropDown(IMenuManager manager) {
+ super.fillLocalDataDropDown(manager);
+ manager.add(new Separator());
+ manager.add(this.updateAllBuilds);
+// manager.add(this.forceUpdateAllBuilds);
+}
+
+/*
+ * Get all builds from the model.
+ */
+Object[] getBuilds() {
+ if (this.results == null) {
+ initResults();
+ }
+ return this.results.getBuilds();
+}
+
+/*
+ * Return the components view.
+ */
+PerformancesView getSiblingView() {
+ if (this.componentsView == null) {
+ this.componentsView = (PerformancesView) getWorkbenchView("org.eclipse.test.internal.performance.results.ui.ComponentsView");
+ }
+ return this.componentsView;
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#makeActions()
+ */
+void makeActions() {
+
+ super.makeActions();
+
+ // Generate action
+ this.generate = new GenerateAction();
+ this.generate.setText("&Generate");
+
+ // Update build actions
+ boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+ this.updateBuild = new UpdateBuildAction(false);
+ this.updateBuild.setText("&Update from DB");
+ this.updateBuild.setEnabled(connected);
+// this.forceUpdateBuild = new UpdateBuildAction(true);
+// this.forceUpdateBuild.setText("Force Update");
+
+ // Update build action
+ this.updateAllBuilds = new UpdateAllBuildsAction(false);
+ this.updateAllBuilds.setText("&Update from DB (all)");
+ this.updateAllBuilds.setEnabled(connected);
+// this.forceUpdateAllBuilds = new UpdateAllBuildsAction(true);
+// this.forceUpdateAllBuilds.setText("Force Update all");
+
+ // Set filters default
+ this.filterBaselineBuilds.setChecked(false);
+ this.filterNightlyBuilds.setChecked(false);
+}
+
+/**
+ * Reset the views.
+ */
+public void resetView() {
+
+ boolean debug = true;
+
+ // Look whether database constants has changed or not
+ int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+ boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+ String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
+ String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null);
+ boolean noLastBuild = lastBuild.length() == 0;
+ if (debug) {
+ System.out.println("Reset View:");
+ System.out.println(" - eclispe version = "+eclipseVersion);
+ System.out.println(" - connected = "+connected);
+ System.out.println(" - db location = "+databaseLocation);
+ System.out.println(" - last build = "+(noLastBuild?"<none>":lastBuild));
+ }
+ final boolean sameVersion = DB_Results.getDbVersion().endsWith(Integer.toString(eclipseVersion));
+ final boolean sameConnection = connected == DB_Results.DB_CONNECTION;
+ final boolean sameDB = sameVersion && databaseLocation.equals(DB_Results.getDbLocation());
+ boolean sameLastBuild = (noLastBuild && LAST_BUILD == null) || lastBuild.equals(LAST_BUILD);
+ if (debug) {
+ System.out.println(" - same version: "+sameVersion);
+ System.out.println(" - same connection: "+sameConnection);
+ System.out.println(" - same DB: "+sameDB);
+ System.out.println(" - same last build: "+sameLastBuild);
+ }
+ final PerformancesView siblingView = getSiblingView();
+ if (sameConnection && sameDB) {
+ if (!sameLastBuild) {
+ // Set last build
+ LAST_BUILD = noLastBuild ? null : lastBuild;
+ this.results.setLastBuildName(LAST_BUILD);
+ siblingView.results.setLastBuildName(LAST_BUILD);
+
+ // Reset views content
+ resetInput();
+ siblingView.resetInput();
+
+ // May be read local data now
+ File newDataDir = changeDataDir();
+ if (newDataDir == null) {
+ this.dataDir = null;
+ siblingView.dataDir = null;
+ }
+ }
+ // No database preferences has changed do nothing
+ return;
+ }
+
+ // Update database constants
+ boolean updated = DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
+ if (debug) {
+ System.out.println(" - updated: "+updated);
+ }
+ if (!connected) {
+ if (!updated) {
+ MessageDialog.openError(this.shell, getTitleToolTip(), "Error while updating database results constants!\nOpen error log to see more details on this error");
+ }
+ } else if (updated) {
+ StringBuffer message = new StringBuffer("Database connection has been correctly ");
+ message.append( connected ? "opened." : "closed.");
+ MessageDialog.openInformation(this.shell, getTitleToolTip(), message.toString());
+ } else {
+ MessageDialog.openError(this.shell, getTitleToolTip(), "The database connection cannot be established!\nOpen error log to see more details on this error");
+ DB_Results.updateDbConstants(false, eclipseVersion, databaseLocation);
+ }
+ setTitleToolTip();
+ siblingView.setTitleToolTip();
+
+ // Refresh view
+ if (sameVersion && sameLastBuild) {
+ // Refresh only builds view as the sibling view (Components) contents is based on local data files contents
+ this.results.resetBuildNames();
+ refreshInput();
+ } else {
+ // Reset views content
+ resetInput();
+ siblingView.resetInput();
+
+ // May be read local data now
+ if (MessageDialog.openQuestion(this.shell, getTitleToolTip(), "Do you want to read local data right now?")) {
+ changeDataDir();
+ } else {
+ this.dataDir = null;
+ siblingView.dataDir = null;
+ }
+ }
+
+ // Update actions
+ this.updateBuild.setEnabled(connected);
+ this.updateAllBuilds.setEnabled(connected);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+public void selectionChanged(SelectionChangedEvent event) {
+ super.selectionChanged(event);
+
+ // Update selected element
+ Object selection = this.viewer.getSelection();
+ int length = 0;
+ if (selection instanceof IStructuredSelection) {
+ Object[] elements = ((IStructuredSelection)selection).toArray();
+ length = elements == null ? 0 : elements.length;
+ this.buildsResults = new BuildResultsElement[length];
+ if (length == 0) {
+ this.updateAllBuilds.setText("&Update from DB (all)");
+ return;
+ }
+ for (int i=0; i<length; i++) {
+ this.buildsResults[i] = (BuildResultsElement) elements[i];
+ }
+ } else {
+ return;
+ }
+
+ // Update update build action
+// boolean enableUpdateBuild = true;
+// boolean enableGenerate = true;
+ int readBuilds = 0;
+ for (int i=0; i<length; i++) {
+ if (this.buildsResults[i].isRead()) {
+// enableUpdateBuild = false;
+ readBuilds++;
+ } else {
+// enableGenerate = false;
+ }
+ }
+// this.updateBuild.setEnabled(enableUpdateBuild);
+// this.forceUpdateBuild.setEnabled(!enableUpdateBuild);
+ final boolean force = readBuilds < length;
+ this.updateBuild.force = force;
+ this.updateAllBuilds.force = force;
+ this.updateAllBuilds.setText("&Update from DB");
+
+ // Update generate action
+ boolean enableGenerate = true;
+ if (enableGenerate) {
+ for (int i=0; i<length; i++) {
+ if (this.buildsResults[i].getName().startsWith(DB_Results.getDbBaselinePrefix())) {
+ enableGenerate = false;
+ break;
+ }
+ }
+ }
+ this.generate.setEnabled(enableGenerate);
+}
+
+void updateAllBuilds(IProgressMonitor monitor, boolean force) {
+ if (this.dataDir == null) {
+ changeDataDir();
+ }
+ String[] builds = buildsToUpdate();
+ if (builds == null) {
+ this.results.updateBuild(null, true, this.dataDir, monitor);
+ } else {
+ this.results.updateBuilds(builds, force, this.dataDir, monitor);
+ }
+}
+
+void updateBuilds(IProgressMonitor monitor, boolean force) {
+ if (this.dataDir == null) {
+ changeDataDir();
+ }
+ int length = this.buildsResults.length;
+ String[] builds = new String[length];
+ for (int i = 0; i < length; i++) {
+ builds[i] = this.buildsResults[i].getName();
+ }
+ this.results.updateBuilds(builds, force, this.dataDir, monitor);
+}
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentResultsView.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentResultsView.java
new file mode 100644
index 0000000..158361d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentResultsView.java
@@ -0,0 +1,531 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.test.internal.performance.results.model.BuildResultsElement;
+import org.eclipse.test.internal.performance.results.model.ComponentResultsElement;
+import org.eclipse.test.internal.performance.results.model.ConfigResultsElement;
+import org.eclipse.test.internal.performance.results.model.DimResultsElement;
+import org.eclipse.test.internal.performance.results.model.PerformanceResultsElement;
+import org.eclipse.test.internal.performance.results.model.ResultsElement;
+import org.eclipse.test.internal.performance.results.model.ScenarioResultsElement;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+
+/**
+ * This view show for each performance machine the results of all builds
+ * run since the beginning of the current version development.
+ * <p>
+ * Each machine results are show in a separate tab.
+ * </p><p>
+ * There's no real action available action from this view, only the possibility
+ * to change how is displayed the line selection (full or only first column)
+ * and also filter the results:
+ * <ul>
+ * <li>Filter for builds:
+ * <ul>
+ * <li>Filter nightly: hide the nightly builds (starting with 'N')</li>
+ * <li>Filter non-important builds: hide all non-important builds, which means non-milestone builds and those after the last milestone</li>
+ * </ul>
+ * </li>
+ * </li>Filter for scenarios:
+ * <ul>
+ * <li>Filter non-fingerprints: hide the scenarios which are not in the fingerprints</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </p><p>
+ * Note that these filters are synchronized with the ones applied in the
+ * {@link ComponentsView Components view}.
+ * </p>
+ *
+ * @see ConfigTab Folder tab containing all the results for a configuration.
+ */
+public class ComponentResultsView extends ViewPart implements ISelectionChangedListener, IPreferenceChangeListener {
+
+ // Constants
+ private static final String ORG_ECLIPSE = "org.eclipse.";
+
+ // SWT resources
+ CTabFolder tabFolder;
+
+ // Model information
+ ConfigTab[] tabs;
+ ComponentResultsElement componentResultsElement;
+
+ // Action
+ Action fullLineSelection;
+ Action filterAdvancedScenarios;
+ Action filterOldBuilds;
+ Action filterNightlyBuilds;
+ ImageDescriptor fullSelectionImageDescriptor;
+
+ // Views
+ IMemento viewState;
+
+ // Eclipse preferences
+ IEclipsePreferences preferences;
+
+/*
+ * Default constructor:
+ * - create the image descriptor
+ * - register the view as a properties listener
+ */
+public ComponentResultsView() {
+ this.fullSelectionImageDescriptor = ImageDescriptor.createFromFile(getClass(), "icallout_obj.gif");
+ this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+ this.preferences.addPreferenceChangeListener(this);
+ Util.initMilestones(this.preferences);
+}
+
+/*
+ * Contribute the local tools bar and the pull-down menu to the action bars.
+ */
+void contributeToActionBars() {
+ IActionBars bars = getViewSite().getActionBars();
+ fillLocalPullDown(bars.getMenuManager());
+ fillLocalToolBar(bars.getToolBarManager());
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+public void createPartControl(Composite parent) {
+
+ // Create the tab folder
+ this.tabFolder = new CTabFolder(parent, SWT.BORDER);
+
+ // Add results view as listener to viewer selection changes
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ PerformancesView performancesView = (PerformancesView) PerformancesView.getWorkbenchView("org.eclipse.test.internal.performance.results.ui.ComponentsView");
+ if (performancesView != null) {
+ performancesView.viewer.addSelectionChangedListener(ComponentResultsView.this);
+ }
+ }
+ });
+
+ // Set actions
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(this.tabFolder, "org.eclipse.test.performance.ui.results");
+ makeActions();
+ contributeToActionBars();
+
+ // Restore state
+ restoreState();
+
+ // Create tabs
+ createTabs();
+
+ // Set selections (tab and line)
+ this.tabFolder.setSimple(false);
+}
+
+/*
+ * Create the tab folder pages. There's one tab per performance machine.
+ * The list of these machines is got from the DB_Results contants.
+ */
+void createTabs() {
+ if (this.componentResultsElement == null) return;
+ PerformanceResultsElement performanceResultsElement = (PerformanceResultsElement) this.componentResultsElement.getParent(null);
+ String[] configNames = performanceResultsElement.getConfigs();
+ String[] configDescriptions = performanceResultsElement.getConfigDescriptions();
+ int length = configNames.length;
+ this.tabs = new ConfigTab[length];
+ for (int i=0; i<length; i++) {
+ this.tabs[i] = new ConfigTab(configNames[i], configDescriptions[i]);
+ }
+ for (int i=0; i<this.tabs.length; i++) {
+ CTabItem item = new CTabItem (this.tabFolder, SWT.NONE);
+ item.setText (this.tabs[i].getTabText ());
+ item.setControl (this.tabs[i].createTabFolderPage(this.componentResultsElement, this.tabFolder, this.fullLineSelection.isChecked()));
+ item.setData (this.tabs[i]);
+ }
+ this.tabFolder.setSelection(0);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+public void dispose() {
+ this.tabFolder.dispose();
+ int length = this.tabs==null ? 0 : this.tabs.length;
+ for (int i=0; i<length; i++) {
+ this.tabs[i].dispose();
+ }
+ JFaceResources.getResources().destroyImage(this.fullSelectionImageDescriptor);
+ super.dispose();
+}
+
+/*
+ * Fill the filters drop-down menu with:
+ * - filter nightly builds
+ * - filter non-milestone builds
+ * - filter non-fingerprint scenarios
+ */
+void fillFiltersDropDown(IMenuManager manager) {
+ manager.add(this.filterNightlyBuilds);
+ manager.add(this.filterOldBuilds);
+ manager.add(new Separator());
+ manager.add(this.filterAdvancedScenarios);
+}
+
+/*
+ * Fill the local pull down menu.
+ */
+void fillLocalPullDown(IMenuManager manager) {
+ MenuManager filtersManager= new MenuManager("Filters");
+ fillFiltersDropDown(filtersManager);
+ manager.add(filtersManager);
+}
+
+/*
+ * Fill the local tool bar with:
+ * - change line selection display
+ */
+void fillLocalToolBar(IToolBarManager manager) {
+ manager.add(this.fullLineSelection);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
+ */
+public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ this.viewState = memento;
+}
+
+/*
+ * Make the actions of the view:
+ * - change table line selection display
+ * - filter nightly builds
+ * - filter non-milestone builds
+ * - filter non-fingerprint scenarios
+ */
+void makeActions() {
+
+ // Full line selection action
+ this.fullLineSelection = new Action("", IAction.AS_CHECK_BOX) {
+ public void run() {
+ resetTabFolders(false/*refresh*/);
+ }
+ };
+ this.fullLineSelection.setImageDescriptor(this.fullSelectionImageDescriptor);
+ this.fullLineSelection.setToolTipText("Full line selection");
+// this.fullLineSelection.setChecked(true);
+
+ // Filter non-fingerprints action
+ this.filterAdvancedScenarios = new Action("Advanced &Scenarios", IAction.AS_CHECK_BOX) {
+ public void run() {
+ ComponentResultsView.this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, isChecked());
+ resetTabFolders(false/*refresh*/);
+ }
+ };
+ this.filterAdvancedScenarios.setChecked(true);
+ this.filterAdvancedScenarios.setToolTipText("Filter advanced scenarios (i.e. not fingerprint ones)");
+
+ // Filter non-important builds action
+ this.filterOldBuilds = new Action("&Old Builds", IAction.AS_CHECK_BOX) {
+ public void run() {
+ ComponentResultsView.this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, isChecked());
+ resetTabFolders(false/*refresh*/);
+ }
+ };
+ this.filterOldBuilds.setChecked(false);
+ this.filterOldBuilds.setToolTipText("Filter old builds (i.e. before last milestone) but keep all previous milestones)");
+
+ // Filter nightly action
+ this.filterNightlyBuilds = new Action("&Nightly", IAction.AS_CHECK_BOX) {
+ public void run() {
+ ComponentResultsView.this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, isChecked());
+ resetTabFolders(false/*refresh*/);
+ }
+ };
+ this.filterNightlyBuilds.setToolTipText("Filter nightly builds");
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
+ */
+public void preferenceChange(PreferenceChangeEvent event) {
+ String propertyName = event.getKey();
+ Object newValue = event.getNewValue();
+
+ // Filter non-fingerprints change
+ if (propertyName.equals(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS)) {
+ boolean checked = newValue == null ? IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS : "true".equals(newValue);
+ this.filterAdvancedScenarios.setChecked(checked);
+ resetTabFolders(false/*refresh*/);
+ }
+
+ // Filter non-milestone change
+ if (propertyName.equals(IPerformancesConstants.PRE_FILTER_OLD_BUILDS)) {
+ boolean checked = newValue == null ? IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS : "true".equals(newValue);
+ this.filterOldBuilds.setChecked(checked);
+ resetTabFolders(false/*refresh*/);
+ }
+
+ // Filter nightly builds change
+ if (propertyName.equals(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS)) {
+ boolean checked = newValue == null ? IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS : "true".equals(newValue);
+ this.filterNightlyBuilds.setChecked(checked);
+ resetTabFolders(false/*refresh*/);
+ }
+}
+
+/*
+ * Reset the table tab folders by re-create all the pages.
+ * Selections are set onto the first found error if this is the first tab creation (typically on a component change event from the ComponentsView)
+ * or to the previous one if this is just a refresh.
+ */
+void resetTabFolders(boolean init) {
+
+ // Store current indexes
+ int tabIndex = this.tabFolder.getSelectionIndex();
+ int lineIndex = tabIndex<0 ? -1 : this.tabs[tabIndex].table.getSelectionIndex();
+
+ // Create tab folders
+ CTabItem[] tabItems = this.tabFolder.getItems();
+ int length = tabItems.length;
+ if (length == 0) {
+ createTabs();
+ } else {
+ for (int i=0; i<length; i++) {
+ tabItems[i].setControl(this.tabs [i].createTabFolderPage(this.componentResultsElement, this.tabFolder, this.fullLineSelection.isChecked()));
+ }
+ }
+
+ // Set the part name when possible
+ if (this.componentResultsElement != null) {
+ setPartName();
+ }
+
+ // If this is the first display then look for the first error to set the selection on it
+ if (init) {
+ if (this.componentResultsElement != null) {
+ // If the component has
+ if (this.componentResultsElement.hasError()) {
+ ResultsElement[] children = this.componentResultsElement.getChildren(); // get scenarios
+ int childrenLength = children.length;
+ for (int s=0; s<childrenLength; s++) {
+ if (children[s].hasError()) {
+ children = children[s].getChildren(); // get configs
+ for (int c=0; c<childrenLength; c++) {
+ if (children[c].hasError()) {
+ tabIndex = c;
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ lineIndex = 0;
+ }
+
+ // Set the selection
+ if (tabIndex >= 0 && lineIndex >= 0) {
+ this.tabFolder.setSelection(tabIndex);
+ Table table = this.tabs[tabIndex].table;
+ table.setSelection(lineIndex);
+ }
+}
+
+/*
+ * Restore the view state from the memento information.
+ */
+void restoreState() {
+
+ // Filter baselines action state
+ if (this.viewState != null) {
+ Boolean state = this.viewState.getBoolean(IPerformancesConstants.PRE_FULL_LINE_SELECTION);
+ boolean fullLine = state == null ? true : state.booleanValue();
+ this.fullLineSelection.setChecked(fullLine);
+ }
+
+ // Filter non fingerprints action state
+ boolean checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS);
+ this.filterAdvancedScenarios.setChecked(checked);
+
+ // Filter nightly builds action
+ checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS);
+ this.filterNightlyBuilds.setChecked(checked);
+
+ // Filter non important builds action state
+ checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS);
+ this.filterOldBuilds.setChecked(checked);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+public void saveState(IMemento memento) {
+ super.saveState(memento);
+ memento.putBoolean(IPerformancesConstants.PRE_FULL_LINE_SELECTION, this.fullLineSelection.isChecked());
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+public void selectionChanged(SelectionChangedEvent event) {
+ ResultsElement selectedElement = (ResultsElement) ((TreeSelection) event.getSelection()).getFirstElement();
+ ComponentResultsElement componentElement = null;
+ ScenarioResultsElement scenarioResultsElement = null;
+ ConfigResultsElement configResultsElement = null;
+ BuildResultsElement buildResultsElement = null;
+ if (selectedElement instanceof ComponentResultsElement) {
+ componentElement = (ComponentResultsElement) selectedElement;
+ } else if (selectedElement instanceof ScenarioResultsElement) {
+ scenarioResultsElement = (ScenarioResultsElement) selectedElement;
+ componentElement = (ComponentResultsElement) scenarioResultsElement.getParent(null);
+ } else if (selectedElement instanceof ConfigResultsElement) {
+ configResultsElement = (ConfigResultsElement) selectedElement;
+ scenarioResultsElement = (ScenarioResultsElement) configResultsElement.getParent(null);
+ componentElement = (ComponentResultsElement) scenarioResultsElement.getParent(null);
+ } else if (selectedElement instanceof BuildResultsElement) {
+ buildResultsElement = (BuildResultsElement) selectedElement;
+ configResultsElement = (ConfigResultsElement) buildResultsElement.getParent(null);
+ scenarioResultsElement = (ScenarioResultsElement) configResultsElement.getParent(null);
+ componentElement = (ComponentResultsElement) scenarioResultsElement.getParent(null);
+ } else if (selectedElement instanceof DimResultsElement) {
+ buildResultsElement = (BuildResultsElement) selectedElement.getParent(null);
+ configResultsElement = (ConfigResultsElement) buildResultsElement.getParent(null);
+ scenarioResultsElement = (ScenarioResultsElement) configResultsElement.getParent(null);
+ componentElement = (ComponentResultsElement) scenarioResultsElement.getParent(null);
+ }
+ if (componentElement != this.componentResultsElement) {
+ this.componentResultsElement = componentElement;
+ if (componentElement == null || this.componentResultsElement.getChildren(null).length > 0) {
+ resetTabFolders(true);
+ }
+ }
+ if (configResultsElement != null) {
+ ConfigTab configTab = this.tabs[this.tabFolder.getSelectionIndex()];
+ if (!configResultsElement.getName().equals(configTab.configName)) {
+ int length = this.tabs.length;
+ for (int i=0; i<length; i++) {
+ if (this.tabs[i].configName.equals(configResultsElement.getName())) {
+ this.tabFolder.setSelection(i);
+ }
+ }
+ }
+ if (buildResultsElement != null) {
+ configTab = this.tabs[this.tabFolder.getSelectionIndex()];
+ configTab.select(buildResultsElement);
+ }
+ }
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+public void setFocus() {
+ // do nothing
+}
+
+/*
+ * Set the name of the part.
+ * This name is built from the name of the component selected in the Components view.
+ * The rules to build the name are:
+ * 1. If the component name does not start then the part name is just "'<component name>' results"
+ * 2. Otherwise, remove "org.eclipse." form the component name and count the tokens separated by a dot ('.')
+ * a. if there's only one remaining token, then the part name is "Platform/"
+ * + "<token uppercased>" if token is less than 3 characters,"<token with first char uppercased>" otherwise
+ * b. otherwise then the part name is "<first token uppercased>"
+ * + for each followed additional token:
+ * "<token uppercased>" if token is less than 3 characters,"<token with first char uppercased>" otherwise
+ * + " results"
+ * E.g.
+ * - org.eclipse.ui -> "Platform/UI"
+ * - org.eclipse.swt -> "Platform/SWT"
+ * - org.eclipse.team -> "Platform/Team"
+ * - org.eclipse.jdt.ui -> "JDT/UI"
+ * - org.eclipse.jdt.core -> "JDT/Core"
+ * - org.eclipse.pde.api.tools -> "PDE/API Tools"
+ */
+protected void setPartName() {
+ String componentName = this.componentResultsElement.getName();
+ String partName;
+ StringBuffer buffer = null;
+ if (componentName.startsWith(ORG_ECLIPSE)) {
+ partName = componentName.substring(ORG_ECLIPSE.length());
+ StringTokenizer tokenizer = new StringTokenizer(partName, ".");
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (buffer == null) {
+ if (tokenizer.hasMoreTokens()) {
+ buffer = new StringBuffer("'"+token.toUpperCase());
+ buffer.append('/');
+ } else {
+ buffer = new StringBuffer("'Platform/");
+ if (token.length() > 3) {
+ buffer.append(Character.toUpperCase(token.charAt(0)));
+ buffer.append(token.substring(1));
+ } else {
+ buffer.append(token.toUpperCase());
+ }
+ }
+ } else {
+ if (token.length() > 3) {
+ buffer.append(Character.toUpperCase(token.charAt(0)));
+ buffer.append(token.substring(1));
+ } else {
+ buffer.append(token.toUpperCase());
+ }
+ if (tokenizer.hasMoreTokens()) buffer.append(' ');
+ }
+ }
+ } else {
+ buffer = new StringBuffer("'");
+ buffer.append(componentName);
+ buffer.append("'");
+ }
+ buffer.append("' results");
+ setPartName(buffer.toString());
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentsView.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentsView.java
new file mode 100644
index 0000000..06b77d3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ComponentsView.java
@@ -0,0 +1,513 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.test.internal.performance.results.model.BuildResultsElement;
+import org.eclipse.test.internal.performance.results.model.ComponentResultsElement;
+import org.eclipse.test.internal.performance.results.model.ConfigResultsElement;
+import org.eclipse.test.internal.performance.results.model.ResultsElement;
+import org.eclipse.test.internal.performance.results.model.ScenarioResultsElement;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+/**
+ * View to see the performance results of all the components in a hierarchical tree.
+ * <p>
+ * A component defines several performance scenarios which are run on several
+ * machines (aka config). All builds results are stored onto each configuration
+ * and 2 dimensions have been stored for each result: the "Elapsed Process Time"
+ * and the "CPU Time".
+ * </p><p>
+ * There's only one available action from this view: read the local data files. This
+ * populates the hierarchy with the numbers stored in these files.
+ * </p><p>
+ * There's also the possibility to filter the results:
+ * <ul>
+ * <li>Filter for builds:
+ * <ul>
+ * <li>Filter baselines: hide the baselines (starting with R-3.x)</li>
+ * <li>Filter nightly: hide the nightly builds (starting with 'N')</li>
+ * <li>Filter non-important builds: hide all non-important builds, which means non-milestone builds and those after the last milestone</li>
+ * </ul>
+ * </li>
+ * </li>Filter for scenarios:
+ * <ul>
+ * <li>Filter non-fingerprints: hide the scenarios which are not in the fingerprints</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </p>
+ * @see ComponentResultsView
+ */
+public class ComponentsView extends PerformancesView {
+
+ // Viewer filters
+ final static ViewerFilter FILTER_ADVANCED_SCENARIOS = new ViewerFilter() {
+ public boolean select(Viewer v, Object parentElement, Object element) {
+ if (element instanceof ScenarioResultsElement) {
+ ScenarioResultsElement scenarioElement = (ScenarioResultsElement) element;
+ return scenarioElement.hasSummary();
+ }
+ return true;
+ }
+ };
+
+ // Views
+ PerformancesView buildsView;
+ ComponentResultsView componentResultsView = null;
+
+ // Internal
+ Set expandedComponents = new HashSet();
+ File resultsDir = null;
+
+ // Actions
+ Action filterAdvancedScenarios;
+ Action writeStatus;
+
+ // SWT resources
+ Font boldFont;
+
+ // Write Status
+ static int WRITE_STATUS;
+
+/**
+ * Default constructor.
+ */
+public ComponentsView() {
+// this.onlyFingerprintsImageDescriptor = ImageDescriptor.createFromFile(getClass(), "filter_ps.gif");
+ super();
+
+ // Get preferences
+ this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+
+ // Init status
+ WRITE_STATUS = this.preferences.getInt(IPerformancesConstants.PRE_WRITE_STATUS, IPerformancesConstants.DEFAULT_WRITE_STATUS);
+
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+public void createPartControl(Composite parent) {
+ super.createPartControl(parent);
+
+ // Create the viewer
+ this.viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+
+ // Set the content provider: first level is components list
+ WorkbenchContentProvider contentProvider = new WorkbenchContentProvider() {
+ public Object[] getElements(Object o) {
+ return ComponentsView.this.getElements();
+ }
+ };
+ this.viewer.setContentProvider(contentProvider);
+
+ // Set the label provider
+ WorkbenchLabelProvider labelProvider = new WorkbenchLabelProvider() {
+
+ protected String decorateText(String input, Object element) {
+ String text = super.decorateText(input, element);
+ if (element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ if (buildElement.isMilestone()) {
+ text = Util.getMilestoneName(buildElement.getName()) + " - "+text;
+ }
+ }
+ return text;
+ }
+
+ // When all scenarios are displayed, then set fingerprints one in bold.
+ public Font getFont(Object element) {
+ Font font = super.getFont(element);
+ if (element instanceof ScenarioResultsElement) {
+// Action fingerprints = ComponentsView.this.filterNonFingerprints;
+// if (fingerprints != null && !fingerprints.isChecked()) {
+ boolean fingerprints = ComponentsView.this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS);
+ if (!fingerprints) {
+ ScenarioResultsElement scenarioElement = (ScenarioResultsElement) element;
+ if (scenarioElement.hasSummary()) {
+ return getBoldFont(font);
+ }
+ }
+ }
+ if (element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ if (Util.isMilestone(buildElement.getName())) {
+ return getBoldFont(font);
+ }
+ }
+ return font;
+ }
+ };
+ this.viewer.setLabelProvider(labelProvider);
+
+ // Set the children sorter
+ ViewerSorter nameSorter = new ViewerSorter() {
+
+ // Sort children using specific comparison (see the implementation
+ // of the #compareTo(Object) in the ResultsElement hierarchy
+ public int compare(Viewer view, Object e1, Object e2) {
+ // Config and Build results are sorted in reverse order
+ if (e1 instanceof BuildResultsElement) {
+ ResultsElement element = (ResultsElement) e2;
+ return element.compareTo(e1);
+ }
+ if (e1 instanceof ResultsElement) {
+ ResultsElement element = (ResultsElement) e1;
+ return element.compareTo(e2);
+ }
+ return super.compare(view, e1, e2);
+ }
+ };
+ this.viewer.setSorter(nameSorter);
+
+ // Add results view as listener to viewer selection changes
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ ISelectionChangedListener listener = getResultsView();
+ if (listener != null) {
+ ComponentsView.this.viewer.addSelectionChangedListener(listener);
+ }
+ }
+ });
+
+ // Finalize viewer initialization
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(this.viewer.getControl(), "org.eclipse.test.performance.ui.components");
+ finalizeViewerCreation();
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+public void dispose() {
+ if (this.boldFont != null) {
+ this.boldFont.dispose();
+ }
+// JFaceResources.getResources().destroyImage(this.onlyFingerprintsImageDescriptor);
+ super.dispose();
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#fillLocalPullDown(org.eclipse.jface.action.IMenuManager)
+ */
+void fillFiltersDropDown(IMenuManager manager) {
+ super.fillFiltersDropDown(manager);
+ manager.add(this.filterOldBuilds);
+ manager.add(this.filterLastBuilds);
+ manager.add(new Separator());
+ manager.add(this.filterAdvancedScenarios);
+}
+
+void fillLocalPullDown(IMenuManager manager) {
+ super.fillLocalPullDown(manager);
+ manager.add(new Separator());
+ manager.add(this.writeStatus);
+}
+
+/*
+ * Filter non fingerprints scenarios action run.
+ */
+void filterAdvancedScenarios(boolean fingerprints, boolean updatePreference) {
+ this.results.setFingerprints(fingerprints);
+ if (fingerprints) {
+ this.viewFilters.add(FILTER_ADVANCED_SCENARIOS);
+ } else {
+ this.viewFilters.remove(FILTER_ADVANCED_SCENARIOS);
+ }
+ this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, fingerprints);
+ updateFilters();
+}
+
+/*
+ * Returns the bold font.
+ */
+Font getBoldFont(Font font) {
+ if (this.boldFont == null) {
+ FontData[] fontData = (font==null ? JFaceResources.getDefaultFont() : font).getFontData();
+ FontData boldFontData = new FontData(fontData[0].getName(), fontData[0].getHeight(), SWT.BOLD);
+ this.boldFont = new Font(this.display, boldFontData);
+ }
+ return this.boldFont;
+}
+
+/*
+ * Get all the components from the model.
+ */
+Object[] getElements() {
+ if (this.results == null) {
+ initResults();
+ if (this.filterAdvancedScenarios != null) {
+ this.results.setFingerprints(this.filterAdvancedScenarios.isChecked());
+ }
+ }
+ return this.results.getElements();
+}
+
+/*
+ * Return the components results view.
+ */
+ComponentResultsView getResultsView() {
+ if (this.componentResultsView == null) {
+ this.componentResultsView = (ComponentResultsView) getWorkbenchView("org.eclipse.test.internal.performance.results.ui.ComponentsResultsView");
+ }
+ return this.componentResultsView;
+}
+
+/*
+ * Return the builds view.
+ */
+PerformancesView getSiblingView() {
+ if (this.buildsView == null) {
+ this.buildsView = (PerformancesView) getWorkbenchView("org.eclipse.test.internal.performance.results.ui.BuildsView");
+ }
+ return this.buildsView;
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#makeActions()
+ */
+void makeActions() {
+
+ super.makeActions();
+
+ // Filter non-fingerprints action
+ this.filterAdvancedScenarios = new Action("Advanced &Scenarios", IAction.AS_CHECK_BOX) {
+ public void run() {
+ filterAdvancedScenarios(isChecked(), true/*update preference*/);
+ }
+ };
+ this.filterAdvancedScenarios.setChecked(true);
+ this.filterAdvancedScenarios.setToolTipText("Filter advanced scenarios (i.e. not fingerprint ones)");
+
+ // Write status
+ this.writeStatus = new Action("Write status") {
+ public void run() {
+
+ // Get write directory
+ String filter = (ComponentsView.this.resultsDir == null) ? null : ComponentsView.this.resultsDir.getPath();
+ final File writeDir = changeDir(filter, "Select a directory to write the status");
+ if (writeDir != null) {
+ writeStatus(writeDir);
+ }
+ }
+ };
+ this.writeStatus.setEnabled(true);
+ this.writeStatus.setToolTipText("Write component status to a file");
+
+ // Set filters default
+ this.filterBaselineBuilds.setChecked(true);
+ this.filterNightlyBuilds.setChecked(false);
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
+ */
+public void preferenceChange(PreferenceChangeEvent event) {
+ String propertyName = event.getKey();
+ Object newValue = event.getNewValue();
+
+ // Filter non-fingerprints change
+ if (propertyName.equals(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS)) {
+ boolean checked = newValue == null ? IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS : "true".equals(newValue);
+ filterAdvancedScenarios(checked, false/*do not update preference*/);
+ this.filterAdvancedScenarios.setChecked(checked);
+ }
+
+ // Filter non-milestone change
+ if (propertyName.equals(IPerformancesConstants.PRE_FILTER_OLD_BUILDS)) {
+ boolean checked = newValue == null ? IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS : "true".equals(newValue);
+ filterOldBuilds(checked, false/*do not update preference*/);
+ this.filterOldBuilds.setChecked(checked);
+ }
+
+ // Write status
+ if (propertyName.equals(IPerformancesConstants.PRE_WRITE_STATUS)) {
+ WRITE_STATUS = newValue == null ? IPerformancesConstants.DEFAULT_WRITE_STATUS : Integer.parseInt((String)newValue);
+ }
+
+ super.preferenceChange(event);
+}
+
+void restoreState() {
+ super.restoreState();
+
+ // Filter baselines action default
+ if (this.viewState == null) {
+ this.filterBaselineBuilds.setChecked(true);
+ this.viewFilters.add(FILTER_BASELINE_BUILDS);
+ } else {
+ String dir = this.viewState.getString(IPerformancesConstants.PRE_WRITE_RESULTS_DIR);
+ if (dir != null) {
+ this.resultsDir = new File(dir);
+ }
+ }
+
+ // Filter non fingerprints action state
+ boolean checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS);
+ this.filterAdvancedScenarios.setChecked(checked);
+ if (checked) {
+ this.viewFilters.add(FILTER_ADVANCED_SCENARIOS);
+ }
+}
+
+public void saveState(IMemento memento) {
+ if (this.resultsDir != null) {
+ memento.putString(IPerformancesConstants.PRE_WRITE_RESULTS_DIR, this.resultsDir.getPath());
+ }
+ super.saveState(memento);
+}
+
+/**
+ * Select a results element in the tree.
+ */
+public void select(ComponentResultsElement componentResults, String configName, String scenarioName, String buildName) {
+
+ // Collapse previous expanded components except the requested one
+ // TODO (frederic) also collapse expanded components children elements
+ this.expandedComponents.remove(componentResults);
+ Iterator iterator = this.expandedComponents.iterator();
+ while (iterator.hasNext()) {
+ this.viewer.collapseToLevel(iterator.next(), AbstractTreeViewer.ALL_LEVELS);
+ }
+ this.expandedComponents.clear();
+
+ // Set the tree selection
+ ScenarioResultsElement scenarioResultsElement = (ScenarioResultsElement) componentResults.getResultsElement(scenarioName);
+ if (scenarioResultsElement != null) {
+ ConfigResultsElement configResultsElement = (ConfigResultsElement) scenarioResultsElement.getResultsElement(configName);
+ if (configResultsElement != null) {
+ BuildResultsElement buildResultsElement = (BuildResultsElement) configResultsElement.getResultsElement(buildName);
+ if (buildResultsElement != null) {
+ this.viewer.setSelection(new StructuredSelection(buildResultsElement), true);
+ this.setFocus();
+ }
+ }
+ }
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+public void selectionChanged(SelectionChangedEvent event) {
+ super.selectionChanged(event);
+ ResultsElement eventResultsElement = (ResultsElement) ((StructuredSelection)event.getSelection()).getFirstElement();
+ if (eventResultsElement != null) {
+ ResultsElement eventComponentElement = eventResultsElement;
+ if (!(eventComponentElement instanceof ComponentResultsElement)) {
+ while (!(eventComponentElement instanceof ComponentResultsElement)) {
+ eventComponentElement = (ResultsElement) eventComponentElement.getParent(null);
+ }
+ this.expandedComponents.add(eventComponentElement);
+ }
+ }
+}
+
+protected void writeStatus(File writeDir) {
+ this.resultsDir = writeDir;
+ if (this.filterAdvancedScenarios.isChecked()) {
+ writeDir = new File(writeDir, "fingerprints");
+ } else {
+ writeDir = new File(writeDir, "all");
+ }
+ writeDir.mkdir();
+ if ((WRITE_STATUS & IPerformancesConstants.STATUS_VALUES) != 0) {
+ writeDir = new File(writeDir, "values");
+ }
+ int buildsNumber = WRITE_STATUS & IPerformancesConstants.STATUS_BUILDS_NUMBER_MASK;
+ if (buildsNumber > 1) {
+ writeDir = new File(writeDir, Integer.toString(buildsNumber));
+ }
+ writeDir.mkdirs();
+ String prefix = this.results.getName();
+ File resultsFile = new File(writeDir, prefix+".log");
+ File exclusionDir = new File(writeDir, "excluded");
+ exclusionDir.mkdir();
+ File exclusionFile = new File(exclusionDir, prefix+".log");
+ if (resultsFile.exists()) {
+ int i=0;
+ File saveDir = new File(writeDir, "save");
+ saveDir.mkdir();
+ while (true) {
+ String newFileName = prefix+"_";
+ if (i<10) newFileName += "0";
+ newFileName += i;
+ File renamedFile = new File(saveDir, newFileName+".log");
+ if (resultsFile.renameTo(renamedFile)) {
+ File renamedExclusionFile = new File(exclusionDir, newFileName+".log");
+ exclusionFile.renameTo(renamedExclusionFile);
+ break;
+ }
+ i++;
+ }
+ }
+
+ // Write status
+ StringBuffer excluded = this.results.writeStatus(resultsFile, WRITE_STATUS);
+ if (excluded == null) {
+ MessageDialog.openWarning(this.shell, getTitleToolTip(), "The component is not read, hence no results can be written!");
+ }
+
+ // Write exclusion file
+ try {
+ DataOutputStream stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(exclusionFile)));
+ try {
+ stream.write(excluded.toString().getBytes());
+ }
+ finally {
+ stream.close();
+ }
+ } catch (FileNotFoundException e) {
+ System.err.println("Can't create exclusion file"+exclusionFile); //$NON-NLS-1$
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+}
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ConfigTab.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ConfigTab.java
new file mode 100644
index 0000000..6b50a04
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/ConfigTab.java
@@ -0,0 +1,584 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.ToolTip;
+import org.eclipse.test.internal.performance.results.db.AbstractResults;
+import org.eclipse.test.internal.performance.results.model.BuildResultsElement;
+import org.eclipse.test.internal.performance.results.model.ComponentResultsElement;
+import org.eclipse.test.internal.performance.results.model.ConfigResultsElement;
+import org.eclipse.test.internal.performance.results.model.ResultsElement;
+import org.eclipse.test.internal.performance.results.model.ScenarioResultsElement;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+
+/**
+ * Tab to display all performances results numbers for a configuration (i.e a performance machine).
+ */
+public class ConfigTab {
+
+ // Colors
+ static final Display DEFAULT_DISPLAY = Display.getDefault();
+ static final Color BLUE= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLUE);
+ static final Color DARK_GREEN= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_DARK_GREEN);
+ static final Color GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GRAY);
+ static final Color MAGENTA = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_MAGENTA);
+ static final Color RED = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_RED);
+
+ // SWT resources
+ Shell shell;
+ Display display;
+ Table table;
+ private GC gc;
+ private Color lightred;
+ private Color lightyellow;
+ private Color darkyellow;
+ private Color blueref;
+ private Font boldFont;
+ private Font italicFont;
+ private Font boldItalicFont;
+ Map toolTips;
+
+ // Information
+ String configBox, configName;
+ ComponentResultsElement results;
+ double[][] allValues;
+ double[][] allErrors;
+
+ // Cells management
+ Point tableOrigin, tableSize;
+ int columnsCount, rowsCount;
+ List firstLine;
+
+ // Eclipse preferences
+ private IEclipsePreferences preferences;
+
+/*
+ * Default constructor.
+ */
+public ConfigTab(String name, String box) {
+ this.configName = name;
+ int idx = box.indexOf(" (");
+ this.configBox = idx > 0 ? box.substring(0, idx) : box;
+ this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+}
+
+/**
+ * Creates the tab folder page.
+ *
+ * @param tabFolder org.eclipse.swt.widgets.TabFolder
+ * @param fullSelection Tells whether the table should have a full line selection or not
+ * @return the new page for the tab folder
+ */
+Composite createTabFolderPage (ComponentResultsElement componentResultsElement, CTabFolder tabFolder, boolean fullSelection) {
+ // Cache the shell and display.
+ this.shell = tabFolder.getShell();
+ this.display = this.shell.getDisplay();
+
+ // Remove old table is present
+ boolean initResources = this.table == null;
+ if (this.table != null) {
+ disposeTable();
+ }
+
+ // Store results
+ this.results = componentResultsElement;
+
+ // Create the "children" table
+ int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL;
+ if (fullSelection) style |= SWT.FULL_SELECTION;
+ this.table = new Table(tabFolder, style);
+ this.table.setLinesVisible (true);
+ this.table.setHeaderVisible (true);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
+ gridData.heightHint = 150;
+ this.table.setLayoutData (gridData);
+ this.gc = new GC(this.table);
+
+ // Init resources
+ if (initResources) initResources();
+
+ // Add columns to the table
+ boolean fingerprints = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_ADVANCED_SCENARIOS, IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS);
+ String [] columnHeaders = getLayoutDataFieldNames(fingerprints);
+ int length = columnHeaders.length;
+ for (int i = 0; i < length; i++) {
+ TableColumn column = new TableColumn(this.table, SWT.CENTER);
+ column.setText (columnHeaders [i]);
+ }
+
+ // Add lines to the table
+ this.toolTips = new HashMap();
+ fillTableLines(fingerprints);
+
+ // Updated columns
+ for (int i=0; i<length; i++) {
+ TableColumn column = this.table.getColumn(i);
+ column.setWidth(i==0?120:100);
+ if (i > 0) {
+ String text = (String) this.firstLine.get(i);
+ column.setToolTipText(text);
+ }
+ }
+
+ // Store table info
+ this.columnsCount = length;
+
+ // Listen to mouse events to select the corresponding build in the components view
+ // when a click is done in the table cell.
+ final ComponentsView componentsView = (ComponentsView) PerformancesView.getWorkbenchView("org.eclipse.test.internal.performance.results.ui.ComponentsView");
+ MouseListener mouseListener = new MouseListener() {
+ public void mouseUp(MouseEvent e) {
+ }
+ public void mouseDown(MouseEvent e) {
+ Point cellPosition = currentCellPosition(e.x, e.y);
+ Table tabTable = ConfigTab.this.table;
+ componentsView.select(ConfigTab.this.results, ConfigTab.this.configName, (String) ConfigTab.this.firstLine.get(cellPosition.x), tabTable.getItem(cellPosition.y).getText());
+ }
+ public void mouseDoubleClick(MouseEvent e) {
+ }
+ };
+ this.table.addMouseListener(mouseListener);
+
+ // Listen to mouse track events to display the table cell corresponding tooltip.
+ MouseTrackListener mouseTrackListener = new MouseTrackListener() {
+ ToolTip currentTooltip;
+ public void mouseHover(MouseEvent e) {
+ if (this.currentTooltip != null) {
+ this.currentTooltip.setVisible(false);
+ this.currentTooltip = null;
+ }
+ Point cellPosition = currentCellPosition(e.x, e.y);
+ if (cellPosition != null) {
+ ToolTip tooltip = (ToolTip) ConfigTab.this.toolTips.get(cellPosition);
+ if (tooltip != null) {
+ Point location = ConfigTab.this.table.toDisplay(new Point(e.x, e.y));
+ tooltip.setLocation(location);
+ tooltip.setVisible(true);
+ this.currentTooltip = tooltip;
+ }
+ }
+ }
+ public void mouseEnter(MouseEvent e) {
+ }
+ public void mouseExit(MouseEvent e) {
+ }
+ };
+ this.table.addMouseTrackListener(mouseTrackListener);
+
+ // Select the first line by default (as this is the current build)
+ this.table.select(0);
+
+ // Return the built composite
+ return this.table;
+}
+
+/*
+ * Create and store a tooltip with the given information and at the given position.
+ */
+void createToolTip(String toolTipText, String toolTipMessage, int toolTipStyle, Point position) {
+ ToolTip toolTip = new ToolTip(this.table.getShell(), toolTipStyle);
+ toolTip.setAutoHide(true);
+ toolTip.setText(toolTipText);
+ toolTip.setMessage(/*"("+col+","+row+") "+*/toolTipMessage);
+ this.toolTips.put(position, toolTip);
+}
+
+/*
+ * Get the current cell position (column, row) from a point position.
+ */
+Point currentCellPosition(int x, int y) {
+
+ // Compute the origin of the visible area
+ if (this.tableOrigin == null) {
+ this.tableOrigin = new Point(0, this.table.getHeaderHeight());
+ }
+
+ // Increment width until over current y position
+ int height= this.tableOrigin.y;
+ int row = this.table.getTopIndex();
+ while (row<this.rowsCount && height<y) {
+ height += this.table.getItemHeight();
+ row++;
+ }
+ if (height < y) {
+ // return when position is over the last line
+ return null;
+ }
+ row--;
+
+ // Increment width until being over current x position
+ int col = 0;
+ TableItem tableItem = this.table.getItem(row);
+ Rectangle bounds = tableItem.getBounds(col);
+ while (col<this.columnsCount) {
+ int max = bounds.x + bounds.width + this.table.getGridLineWidth();
+ if (x <= max) break;
+ if (col == this.columnsCount) {
+ // return when position is over the last column
+ return null;
+ }
+ col++;
+ bounds = tableItem.getBounds(col);
+ }
+
+ // Return the found table cell position
+ return new Point(col, row);
+}
+
+/*
+ * Dispose all SWT resources.
+ */
+public void dispose() {
+ if (this.boldFont != null) {
+ this.boldFont.dispose();
+ }
+ if (this.italicFont != null) {
+ this.italicFont.dispose();
+ }
+ if (this.boldItalicFont != null) {
+ this.boldItalicFont.dispose();
+ }
+ if (this.darkyellow != null) {
+ this.darkyellow.dispose();
+ }
+ if (this.lightyellow != null) {
+ this.lightyellow.dispose();
+ }
+ if (this.lightred != null) {
+ this.lightred.dispose();
+ }
+ if (this.blueref != null) {
+ this.blueref.dispose();
+ }
+ disposeTable();
+}
+
+/*
+ * Dispose all SWT controls associated with the table.
+ */
+private void disposeTable() {
+ if (this.toolTips != null) {
+ Iterator cells = this.toolTips.keySet().iterator();
+ while (cells.hasNext()) {
+ ToolTip toolTip = (ToolTip) this.toolTips.get(cells.next());
+ toolTip.dispose();
+ }
+ }
+ this.table.dispose();
+ this.tableOrigin = null;
+ this.firstLine = null;
+}
+
+/*
+ * Fill the lines of the tables.
+ * Get all the information from the model which are returned in a list (lines) of lists (columns).
+ */
+private void fillTableLines(boolean fingerprints) {
+
+ // Get preferences information
+ boolean onlyMilestones = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS);
+ boolean skipNightlyBuilds = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS);
+
+ // Get model information
+ if (this.results == null) return;
+ List differences = this.results.getConfigNumbers(this.configName, fingerprints);
+ if (differences == null) return;
+
+ // Store first information line which are the scenarios full names
+ Iterator lines = differences.iterator();
+ this.firstLine = (List) lines.next();
+
+ // Read each information line (one line per build results)
+ Object[] scenarios = this.results.getChildren(null);
+ ConfigResultsElement[] configs = new ConfigResultsElement[scenarios.length];
+ int row = 0;
+ while (lines.hasNext()) {
+ List line = (List) lines.next();
+ int size = line.size();
+
+ // The first column is the build name
+ String buildName = (String) line.get(0);
+ String milestoneName = Util.getMilestoneName(buildName);
+ TableItem item = null;
+
+ // Set item if the line is not filtered
+ Font italic;
+ if (milestoneName != null) {
+ item = new TableItem (this.table, SWT.NONE);
+ item.setText(milestoneName + " - " + buildName);
+ item.setFont(0, this.boldFont);
+ if (!onlyMilestones) item.setBackground(this.blueref);
+ italic = this.boldItalicFont;
+ } else {
+ if ((onlyMilestones && Util.getNextMilestone(buildName) != null) ||
+ (skipNightlyBuilds && buildName.charAt(0) == 'N')) {
+ // skip line
+ continue;
+ }
+ item = new TableItem (this.table, SWT.NONE);
+ item.setText(0, buildName);
+ italic = this.italicFont;
+ }
+
+ // Read each column value
+ String baselineName = null;
+ for (int col=1; col<size; col++) {
+
+ // Reset tooltip info
+ String toolTipText = null;
+ String toolTipMessage = null;
+ int toolTipStyle = SWT.BALLOON;
+
+ // Otherwise get values for a scenario
+ Font italic2 = italic;
+ ScenarioResultsElement scenarioResultsElement = (ScenarioResultsElement) scenarios[col-1];
+ if (milestoneName != null || (!fingerprints && scenarioResultsElement.hasSummary())) {
+ italic2 = this.boldItalicFont;
+ item.setFont(col, this.boldFont);
+ }
+ // Otherwise get values for a scenario
+ double[] values = (double[]) line.get(col);
+ if (values == AbstractResults.NO_BUILD_RESULTS) {
+ item.setText(col, "Missing");
+ item.setForeground(col, GRAY);
+ item.setFont(col, italic2);
+ } else if (values == AbstractResults.INVALID_RESULTS) {
+ item.setText(col, "Invalid");
+ item.setForeground(col, RED);
+ item.setFont(col, italic2);
+ } else {
+ // Get values array
+ double buildValue = values[AbstractResults.BUILD_VALUE_INDEX];
+ double baselineValue = values[AbstractResults.BASELINE_VALUE_INDEX];
+ double delta = values[AbstractResults.DELTA_VALUE_INDEX];
+ double error = values[AbstractResults.DELTA_ERROR_INDEX];
+
+ // Set text with delta value
+ item.setText(col, Util.PERCENTAGE_FORMAT.format(delta));
+
+ // Compute the tooltip to display on the cell
+ if (error > 0.03) {
+ // error is over the 3% threshold
+ item.setImage(col, ResultsElement.WARN_IMAGE);
+ item.setForeground(col, this.darkyellow);
+ toolTipText = "May be not reliable";
+ toolTipMessage = "The error on this result is "+Util.PERCENTAGE_FORMAT.format(error)+", hence it may be not reliable";
+ toolTipStyle |= SWT.ICON_WARNING;
+ }
+ if (delta < -0.1) {
+ // delta < -10%: failure shown by an red-cross icon + text in red
+ item.setImage(col, ResultsElement.ERROR_IMAGE);
+ item.setForeground(col, RED);
+ } else if (delta < -0.05) {
+ // negative delta over 5% shown in red
+ item.setForeground(col, RED);
+ } else if (delta < 0) {
+ // negative delta shown in magenta
+ item.setForeground(col, MAGENTA);
+ } else if (delta > 0.2) {
+ // positive delta over 20% shown in green
+ item.setForeground(col, DARK_GREEN);
+ } else if (delta > 0.1) {
+ // positive delta between 10% and 20% shown in blue
+ item.setForeground(col, BLUE);
+ }
+
+ // Moderate the status if the build value or the difference is small
+ if (delta < 0) {
+ double diff = Math.abs(baselineValue - buildValue);
+ if (buildValue < 100 || diff < 100) {
+ if (toolTipText == null) {
+ toolTipText = "";
+ } else {
+ toolTipText += ", ";
+ }
+ toolTipText += "Small value";
+ if (toolTipMessage == null) {
+ toolTipMessage = "";
+ } else {
+ toolTipMessage += ".\n";
+ }
+ if (buildValue < 100) {
+ toolTipMessage += "This test has a small value ("+buildValue+"ms)";
+ } else {
+ toolTipMessage += "This test variation has a small value ("+diff+"ms)";
+ }
+ toolTipMessage += ", hence it may not be necessary to spend time on fixing this possible regression";
+ // set the text in italic
+ item.setFont(col, italic2);
+ toolTipStyle |= SWT.ICON_INFORMATION;
+ }
+ }
+
+ // Add information in tooltip when history shows big variation
+ ConfigResultsElement configResultsElement = configs[col-1];
+ if (configResultsElement == null) {
+ configResultsElement = (ConfigResultsElement) scenarioResultsElement.getResultsElement(this.configName);
+ configs[col-1] = configResultsElement;
+ }
+ double deviation = configResultsElement == null ? 0 : configResultsElement.getStatistics()[3];
+ if (deviation > 0.2) {
+ // deviation is over 20% over the entire history
+ if (toolTipText == null) {
+ toolTipText = "";
+ } else {
+ toolTipText += ", ";
+ }
+ toolTipText += "History shows erratic values";
+ if (toolTipMessage == null) {
+ toolTipMessage = "";
+ } else {
+ toolTipMessage += ".\n";
+ }
+ toolTipMessage += "The results history shows that the variation of its delta is over 20% ("+Util.PERCENTAGE_FORMAT.format(deviation)+"), hence its result is surely not reliable";
+ // set the text in italic
+ item.setFont(col, italic2);
+ toolTipStyle |= SWT.ICON_INFORMATION;
+ } else if (deviation > 0.1) { // moderate the status when the test
+ // deviation is between 10% and 20% over the entire history
+ if (toolTipText == null) {
+ toolTipText = "";
+ } else {
+ toolTipText += ", ";
+ }
+ toolTipText += "History shows unstable values";
+ if (toolTipMessage == null) {
+ toolTipMessage = "";
+ } else {
+ toolTipMessage += ".\n";
+ }
+ toolTipMessage += "The results history shows that the variation of its delta is between 10% and 20% ("+Util.PERCENTAGE_FORMAT.format(deviation)+"), hence its result may not be really reliable";
+ // set the text in italic
+ item.setFont(col, italic2);
+ if (toolTipStyle == SWT.BALLOON && delta >= -0.1) {
+ toolTipStyle |= SWT.ICON_INFORMATION;
+ } else {
+ // reduce icon severity from error to warning
+ toolTipStyle |= SWT.ICON_WARNING;
+ }
+ }
+ }
+
+ // Set tooltip
+ if (toolTipText != null) {
+ createToolTip(toolTipText, toolTipMessage, toolTipStyle, new Point(col, row));
+ }
+
+ // Baseline name
+ ConfigResultsElement configResultsElement = (ConfigResultsElement) scenarioResultsElement.getResultsElement(this.configName);
+ if (configResultsElement != null) {
+ String configBaselineName = configResultsElement.getBaselineBuildName(buildName);
+ if (baselineName == null) {
+ baselineName = configBaselineName;
+ } else if (baselineName.indexOf(configBaselineName) < 0) {
+ baselineName += ", " +configBaselineName;
+ }
+ }
+ }
+
+ // Set the tooltip over the build name
+ if (baselineName != null) {
+ createToolTip(buildName, "Baseline: "+baselineName, SWT.BALLOON | SWT.ICON_INFORMATION, new Point(0, row));
+ }
+
+ // Increment row counter
+ row++;
+ }
+ this.rowsCount = row;
+}
+
+/*
+ * Get the columns name.
+ */
+private String[] getLayoutDataFieldNames(boolean fingerprints) {
+ if (this.results == null) {
+ return new String[0];
+ }
+ List labels = this.results.getScenariosLabels(fingerprints);
+ labels.add(0, "Build");
+ String[] names = new String[labels.size()];
+ labels.toArray(names);
+ return names;
+}
+
+/*
+ * The tab text is the full machine name.
+ */
+public String getTabText() {
+ return this.configBox;
+}
+
+/*
+ * Init the SWT resources
+ */
+private void initResources() {
+ // Fonts
+ String fontDataName = this.gc.getFont().getFontData()[0].toString();
+ FontData fdItalic = new FontData(fontDataName);
+ fdItalic.setStyle(SWT.ITALIC);
+ this.italicFont = new Font(this.display, fdItalic);
+ FontData fdBold = new FontData(fontDataName);
+ fdBold.setStyle(SWT.BOLD);
+ this.boldFont = new Font(this.display, fdBold);
+ FontData fdBoldItalic = new FontData(fontDataName);
+ fdBoldItalic.setStyle(SWT.BOLD | SWT.ITALIC);
+ this.boldItalicFont = new Font(this.display, fdBoldItalic);
+
+ // Colors
+ this.lightred = new Color(DEFAULT_DISPLAY, 220, 50, 50);
+ this.lightyellow = new Color(DEFAULT_DISPLAY, 255, 255, 160);
+ this.darkyellow = new Color(DEFAULT_DISPLAY, 160, 160, 0);
+ this.blueref = new Color(DEFAULT_DISPLAY, 200, 200, 255);
+}
+
+/*
+ * Select the line corresponding to the given build.
+ */
+void select(BuildResultsElement buildResultsElement) {
+ int count = this.table.getItemCount();
+ String buildName = buildResultsElement.getName();
+ TableItem[] items = this.table.getItems();
+ for (int i=0; i<count; i++) {
+ if (items[i].getText().endsWith(buildName)) {
+ this.table.deselect(this.table.getSelectionIndex());
+ this.table.select(i);
+ return;
+ }
+ }
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPerspective.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPerspective.java
new file mode 100644
index 0000000..eb0b54a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPerspective.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+/**
+ * Defines the 'Performances' perspective.
+ */
+public class PerformanceResultsPerspective implements IPerspectiveFactory {
+
+ private IPageLayout factory;
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+ */
+public void createInitialLayout(IPageLayout layout) {
+ this.factory = layout;
+ addViews();
+}
+
+/*
+ * Add views to the perspective
+ */
+private void addViews() {
+
+ // Component results view put on bottom
+ IFolderLayout bottom =
+ this.factory.createFolder(
+ "bottomRight", //NON-NLS-1
+ IPageLayout.BOTTOM,
+ 0.5f,
+ this.factory.getEditorArea());
+ bottom.addView("org.eclipse.test.internal.performance.results.ui.ComponentsResultsView");
+
+ // Components and Builds view put on perspective top left
+ IFolderLayout topLeft =
+ this.factory.createFolder(
+ "topLeft", //NON-NLS-1
+ IPageLayout.LEFT,
+ 0.5f,
+ this.factory.getEditorArea());
+ topLeft.addView("org.eclipse.test.internal.performance.results.ui.ComponentsView"); //NON-NLS-1
+ topLeft.addView("org.eclipse.test.internal.performance.results.ui.BuildsView"); //NON-NLS-1
+
+ // Properties view put on perspective top right
+ IFolderLayout topRight =
+ this.factory.createFolder(
+ "topRight", //NON-NLS-1
+ IPageLayout.RIGHT,
+ 0.5f,
+ this.factory.getEditorArea());
+ topRight.addView(IPageLayout.ID_PROP_SHEET); //NON-NLS-1
+
+ this.factory.setEditorAreaVisible(false);
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferenceInitializer.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferenceInitializer.java
new file mode 100644
index 0000000..d6bfb1d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferenceInitializer.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.test.internal.performance.PerformanceTestPlugin;
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.performance.Dimension;
+
+/**
+ * Default performances preferences initializer.
+ */
+public class PerformanceResultsPreferenceInitializer extends AbstractPreferenceInitializer implements IPerformancesConstants {
+
+/*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+ */
+public void initializeDefaultPreferences() {
+ IEclipsePreferences defaultPreferences = ((IScopeContext) new DefaultScope()).getNode(PLUGIN_ID);
+
+ // Eclipse version
+ defaultPreferences.putInt(PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+
+ // Database
+ defaultPreferences.putBoolean(PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+ defaultPreferences.putBoolean(PRE_DATABASE_LOCAL, IPerformancesConstants.DEFAULT_DATABASE_LOCAL);
+ defaultPreferences.put(PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
+
+ // Status
+ defaultPreferences.putInt(PRE_WRITE_STATUS, IPerformancesConstants.DEFAULT_WRITE_STATUS);
+
+ // Config descriptors
+ String[][] configDescriptors = PerformanceTestPlugin.getConfigDescriptors();
+ int cdLength = configDescriptors.length;
+ for (int i = 0; i < cdLength; i++) {
+ String[] descriptor = configDescriptors[i];
+ defaultPreferences.put(PRE_CONFIG_DESCRIPTOR_NAME + "." + i, descriptor[0]);
+ defaultPreferences.put(PRE_CONFIG_DESCRIPTOR_DESCRIPTION + "." + i, descriptor[1]);
+ }
+
+ // Default dimension
+ defaultPreferences.put(PRE_DEFAULT_DIMENSION, ((Dim) PerformanceTestPlugin.getDefaultDimension()).getName());
+
+ // Result dimensions
+ Dimension[] dimensions = PerformanceTestPlugin.getResultsDimensions();
+ int length = dimensions.length;
+ for (int i = 0; i < length; i++) {
+ Dim dim = (Dim) dimensions[i];
+ defaultPreferences.put(PRE_RESULTS_DIMENSION + "." + i, dim.getName());
+ }
+
+ // Filters
+ defaultPreferences.putBoolean(PRE_FILTER_ADVANCED_SCENARIOS, IPerformancesConstants.DEFAULT_FILTER_ADVANCED_SCENARIOS);
+ defaultPreferences.putBoolean(PRE_FILTER_OLD_BUILDS, IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS);
+ defaultPreferences.putBoolean(PRE_FILTER_NIGHTLY_BUILDS, IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS);
+
+ // Milestones
+ String[] milestones = IPerformancesConstants.V35_MILESTONES;
+ String prefix = PRE_MILESTONE_BUILDS + "." + ECLIPSE_MAINTENANCE_VERSION;
+ length = milestones.length;
+ for (int i = 0; i < length; i++) {
+ defaultPreferences.put(prefix + i, milestones[i]);
+ }
+ milestones = IPerformancesConstants.V36_MILESTONES;
+ prefix = PRE_MILESTONE_BUILDS + "." + ECLIPSE_DEVELOPMENT_VERSION;
+ length = milestones.length;
+ for (int i = 0; i < length; i++) {
+ defaultPreferences.put(prefix + i, milestones[i]);
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferencePage.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferencePage.java
new file mode 100644
index 0000000..1c4407f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformanceResultsPreferencePage.java
@@ -0,0 +1,1216 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.test.internal.performance.PerformanceTestPlugin;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.test.performance.ui.UiPlugin;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Defines the 'Performances' preferences page.
+ */
+public class PerformanceResultsPreferencePage extends PreferencePage
+ implements IWorkbenchPreferencePage, SelectionListener, ModifyListener, IPerformancesConstants {
+
+ private Button mVersionRadioButton;
+ private Button dVersionRadionButton;
+ private CCombo databaseLocationCombo;
+ private Button dbConnectionCheckBox;
+ private Button dbLocalBrowseButton;
+ private Button dbRelengRadioButton;
+ private Button dbLocalRadioButton;
+ private CCombo defaultDimensionCombo;
+ private CCombo lastBuildCombo;
+ private List resultsDimensionsList;
+ private CCombo milestonesCombo;
+ private Label dbLocationLabel;
+
+ // Status SWT objects
+ private Button statusValuesCheckBox;
+ private Button statusErrorNoneRadioButton;
+ private Button statusErrorNoticeableRadioButton;
+ private Button statusErrorSuspiciousRadioButton;
+ private Button statusErrorWeirdRadioButton;
+ private Button statusErrorInvalidRadioButton;
+ private Button statusSmallBuildValueCheckBox;
+ private Button statusSmallDeltaValueCheckBox;
+ private Button statusStatisticNoneRadioButton;
+ private Button statusStatisticErraticRadioButton;
+ private Button statusStatisticUnstableRadioButton;
+ private Text statusBuildsToConfirm;
+
+ // TODO See whether config descriptors need to be set as preferences or not...
+ // private Table configDescriptorsTable;
+
+ private BuildsView buildsView;
+
+/**
+ * Utility method that creates a push button instance and sets the default
+ * layout data.
+ *
+ * @param parent
+ * the parent for the new button
+ * @param label
+ * the label for the new button
+ * @return the newly-created button
+ */
+private Button createCheckBox(Composite parent, String label) {
+ Button button = new Button(parent, SWT.CHECK);
+ button.setText(label);
+ button.addSelectionListener(this);
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.horizontalSpan = 5;
+ button.setLayoutData(data);
+ return button;
+}
+
+/**
+ * Create a text field specific for this application
+ *
+ * @param parent
+ * the parent of the new text field
+ * @return the new text field
+ */
+private CCombo createCombo(Composite parent) {
+ CCombo combo= new CCombo(parent, SWT.BORDER);
+ combo.addModifyListener(this);
+ GridData data = new GridData();
+ data.horizontalSpan = 3;
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ data.verticalAlignment = GridData.CENTER;
+ data.grabExcessVerticalSpace = false;
+ combo.setLayoutData(data);
+ return combo;
+}
+
+
+/**
+ * Creates composite control and sets the default layout data.
+ *
+ * @param parent
+ * the parent of the new composite
+ * @param numColumns
+ * the number of columns for the new composite
+ * @param hSpan TODO
+ * @return the newly-created coposite
+ */
+private Composite createComposite(Composite parent, int numColumns, int hSpan) {
+ Composite composite = new Composite(parent, SWT.NULL);
+
+ // GridLayout
+ GridLayout layout = new GridLayout();
+ layout.numColumns = numColumns;
+ composite.setLayout(layout);
+
+ // GridData
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.horizontalAlignment = GridData.FILL;
+ data.horizontalSpan = hSpan;
+ composite.setLayoutData(data);
+ return composite;
+}
+
+/**
+ * (non-Javadoc) Method declared on PreferencePage
+ */
+protected Control createContents(Composite parent) {
+
+ this.buildsView = (BuildsView) PerformancesView.getWorkbenchView("org.eclipse.test.internal.performance.results.ui.BuildsView");
+ if (this.buildsView == null) {
+ Label errorLabel = createLabel(parent, "No performances preferences can be set because the build view has not been created yet!", false);
+ errorLabel.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ } else {
+ // Eclipse version choice
+ Composite composite_eclipseVersion = createComposite(parent, 5, 1);
+ createLabel(composite_eclipseVersion, "Eclipse version", false);
+ Composite composite_versionChoice = createComposite(composite_eclipseVersion, 5, 1);
+ this.mVersionRadioButton = createRadioButton(composite_versionChoice, "v"+ECLIPSE_MAINTENANCE_VERSION);
+ this.dVersionRadionButton = createRadioButton(composite_versionChoice, "v"+ECLIPSE_DEVELOPMENT_VERSION);
+
+ // Database location
+ Composite compositeDatabase = createComposite(parent, 5, 1);
+ Group databaseGroup = createGroup(compositeDatabase, "Database", 5);
+ Composite compositeDatabaseConnection = createComposite(databaseGroup, 3, 5);
+ this.dbConnectionCheckBox = createCheckBox(compositeDatabaseConnection, "Connected");
+ this.dbRelengRadioButton = createRadioButton(compositeDatabaseConnection, "Releng");
+ this.dbLocalRadioButton = createRadioButton(compositeDatabaseConnection, "Local");
+ this.dbLocationLabel = createLabel(databaseGroup, "Location", false);
+ this.databaseLocationCombo = createCombo(databaseGroup);
+ this.databaseLocationCombo.setEditable(false);
+ this.dbLocalBrowseButton = createPushButton(databaseGroup, "Browse");
+
+ // Status
+ Composite compositeStatus = createComposite(parent, 1, 3);
+ Group statusGroup = createGroup(compositeStatus, "Status", 1);
+ this.statusValuesCheckBox = createCheckBox(statusGroup, "Values");
+ this.statusValuesCheckBox.setToolTipText("Include numbers while writing status");
+ Group statusErrorGroup = createGroup(statusGroup, "Error level", 5);
+ statusErrorGroup.setToolTipText("Exclude from the written status failures depending on their build result error...");
+ this.statusErrorNoneRadioButton = createRadioButton(statusErrorGroup, "None");
+ this.statusErrorNoneRadioButton.setToolTipText("Do not exclude failures if they have a noticeable error");
+ this.statusErrorInvalidRadioButton = createRadioButton(statusErrorGroup, "Invalid");
+ this.statusErrorInvalidRadioButton.setToolTipText("Exclude all invalid failures (i.e. result error is over 100%)");
+ this.statusErrorWeirdRadioButton = createRadioButton(statusErrorGroup, "Weird");
+ this.statusErrorWeirdRadioButton.setToolTipText("Exclude all weird failures (i.e. result error is over 50%)");
+ this.statusErrorSuspiciousRadioButton = createRadioButton(statusErrorGroup, "Suspicious");
+ this.statusErrorSuspiciousRadioButton.setToolTipText("Exclude all suspicious failures (i.e. result error is over 25%)");
+ this.statusErrorNoticeableRadioButton = createRadioButton(statusErrorGroup, "Noticeable");
+ this.statusErrorNoticeableRadioButton.setToolTipText("Exclude all failures which have a noticeable error (i.e result error is over 3%)");
+ Group statusSmallGroup = createGroup(statusGroup, "Small value", 5);
+ statusErrorGroup.setToolTipText("Exclude from the written status failures depending on their value");
+ this.statusSmallBuildValueCheckBox = createCheckBox(statusSmallGroup, "Build value");
+ this.statusSmallBuildValueCheckBox.setToolTipText("Exclude all failures which have a build result value smaller than 100ms");
+ this.statusSmallDeltaValueCheckBox = createCheckBox(statusSmallGroup, "Delta value");
+ this.statusSmallDeltaValueCheckBox.setToolTipText("Exclude all failures which have a delta result value smaller than 100ms");
+ Group statusStatisticsGroup = createGroup(statusGroup, "Statistics", 5);
+ statusStatisticsGroup.setToolTipText("Exclude from the written status failures depending on build results statistics...");
+ this.statusStatisticNoneRadioButton = createRadioButton(statusStatisticsGroup, "None");
+ this.statusStatisticNoneRadioButton.setToolTipText("Do not exclude failures which have bad baseline results statistics (i.e. variation is over 10%)");
+ this.statusStatisticUnstableRadioButton = createRadioButton(statusStatisticsGroup, "Unstable");
+ this.statusStatisticUnstableRadioButton.setToolTipText("Exclude all failures which have unstable baseline results statistics (i.e. variation is between 10% and 20%)");
+ this.statusStatisticErraticRadioButton = createRadioButton(statusStatisticsGroup, "Erratic");
+ this.statusStatisticErraticRadioButton.setToolTipText("Exclude all failures which have erratic baseline results statistics (i.e. variation is over 20%)");
+ createLabel(statusGroup, "Builds to confirm:", false);
+ this.statusBuildsToConfirm = createTextField(statusGroup);
+ this.statusBuildsToConfirm.setToolTipText("The number of previous builds to take into account to confirm a regression");
+
+ // Milestones
+ Composite compositeMilestones = createComposite(parent, 3, 1);
+ createLabel(compositeMilestones, "Milestones", false);
+ this.milestonesCombo = createCombo(compositeMilestones);
+ this.milestonesCombo.setToolTipText("Enter the date of the milestone as yyyymmddHHMM");
+
+ // Last build
+ StringBuffer tooltip = new StringBuffer("Select the last build to display performance results\n");
+ tooltip.append("If set then performance results won't be displayed for any build after this date...");
+ String tooltipText = tooltip.toString();
+ Composite compositeLastBuild = createComposite(parent, 3, 1);
+ // this.lastBuildCheckBox = createCheckBox(compositeLastBuild, "Until last build");
+ createLabel(compositeLastBuild, "Last build: ", false);
+ this.lastBuildCombo = createCombo(compositeLastBuild);
+ this.lastBuildCombo.setEditable(false);
+ this.lastBuildCombo.setToolTipText(tooltipText);
+ this.lastBuildCombo.add("");
+ initBuildsList();
+
+ // Default dimension layout
+ tooltip = new StringBuffer("Select the default dimension which will be used for performance results\n");
+ tooltip.append("When changed, the new selected dimension is automatically added to the dimensions list below...");
+ tooltipText = tooltip.toString();
+ Composite compositeDefaultDimension = createComposite(parent, 3, 1);
+ createLabel(compositeDefaultDimension, "Default dimension: ", false);
+ this.defaultDimensionCombo = createCombo(compositeDefaultDimension);
+ this.defaultDimensionCombo.setEditable(false);
+ this.defaultDimensionCombo.setToolTipText(tooltipText);
+
+ // Results dimensions layout
+ tooltip = new StringBuffer("Select the dimensions which will be used while generating performance results\n");
+ tooltip.append("When changed, the default dimension above is automatically added to the new list...");
+ tooltipText = tooltip.toString();
+ Composite compositeResultsDimensions = createComposite(parent, 3, 1);
+ createLabel(compositeResultsDimensions, "Results dimensions: ", true/*beginning*/);
+ this.resultsDimensionsList = createList(compositeResultsDimensions);
+ this.resultsDimensionsList.setToolTipText(tooltipText);
+
+ // Config descriptors layout
+ /* TODO See whether config descriptors need to be set as preferences or not...
+ Composite compositeConfigDescriptors = createComposite(parent, 3);
+ createLabel(compositeConfigDescriptors, "Config descriptors: ", false);
+ this.configDescriptorsTable = createTable(compositeConfigDescriptors);
+ TableColumn firstColumn = new TableColumn(this.configDescriptorsTable, SWT.LEFT);
+ firstColumn.setText ("Name");
+ firstColumn.setWidth(50);
+ TableColumn secondColumn = new TableColumn(this.configDescriptorsTable, SWT.FILL | SWT.LEFT);
+ secondColumn.setText ("Description");
+ secondColumn.setWidth(300);
+ */
+
+ // init values
+ initializeValues();
+ }
+
+ // font = null;
+ Composite contents = new Composite(parent, SWT.NULL);
+ contents.pack(true);
+ return contents;
+}
+
+/**
+ * Utility method that creates a label instance and sets the default layout
+ * data.
+ *
+ * @param parent
+ * the parent for the new label
+ * @param text
+ * the text for the new label
+ * @return the new label
+ */
+private Group createGroup(Composite parent, String text, int columns) {
+ Group group = new Group(parent, SWT.NONE);
+ group.setLayout(new GridLayout(columns, false));
+ group.setText(text);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+// data.horizontalSpan = 1;
+ group.setLayoutData(data);
+ return group;
+}
+
+/**
+ * Utility method that creates a label instance and sets the default layout
+ * data.
+ *
+ * @param parent
+ * the parent for the new label
+ * @param text
+ * the text for the new label
+ * @param beginning TODO
+ * @return the new label
+ */
+private Label createLabel(Composite parent, String text, boolean beginning) {
+ Label label = new Label(parent, SWT.BEGINNING|SWT.LEFT);
+ label.setText(text);
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.verticalAlignment = beginning ? GridData.BEGINNING : GridData.CENTER;
+ label.setLayoutData(data);
+ return label;
+}
+
+/**
+ * Create a text field specific for this application
+ *
+ * @param parent
+ * the parent of the new text field
+ * @return the new text field
+ */
+private List createList(Composite parent) {
+ List list = new List(parent, SWT.MULTI | SWT.BORDER);
+ list.addSelectionListener(this);
+ GridData data = new GridData();
+ data.horizontalSpan = 2;
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ data.verticalAlignment = GridData.CENTER;
+ data.grabExcessVerticalSpace = false;
+ list.setLayoutData(data);
+ return list;
+}
+
+/**
+ * Utility method that creates a push button instance and sets the default
+ * layout data.
+ *
+ * @param parent
+ * the parent for the new button
+ * @param label
+ * the label for the new button
+ * @return the newly-created button
+ */
+private Button createPushButton(Composite parent, String label) {
+ Button button = new Button(parent, SWT.PUSH);
+ button.setText(label);
+ button.addSelectionListener(this);
+ GridData data = new GridData();
+ data.horizontalAlignment = SWT.LEFT;
+ data.grabExcessHorizontalSpace = true;
+// data.horizontalSpan = 2;
+ data.minimumWidth = 100;
+ button.setLayoutData(data);
+ return button;
+}
+
+/**
+ * Utility method that creates a radio button instance and sets the default
+ * layout data.
+ *
+ * @param parent
+ * the parent for the new button
+ * @param label
+ * the label for the new button
+ * @return the newly-created button
+ */
+private Button createRadioButton(Composite parent, String label) {
+ Button button = new Button(parent, SWT.RADIO | SWT.LEFT);
+ button.setText(label);
+ button.addSelectionListener(this);
+ GridData data = new GridData();
+ button.setLayoutData(data);
+ return button;
+}
+
+/*
+ * Create a text field specific for this application
+ *
+ * @param parent
+ * the parent of the new text field
+ * @return the new text field
+ *
+private Table createTable(Composite parent) {
+ Table table = new Table(parent, SWT.BORDER);
+ table.setLinesVisible (true);
+ table.setHeaderVisible (true);
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
+ gridData.heightHint = 150;
+ table.setLayoutData(gridData);
+ return table;
+}
+*/
+
+/*
+ * Create a text field specific for this application
+ *
+ * @param parent
+ * the parent of the new text field
+ * @return the new text field
+ */
+private Text createTextField(Composite parent) {
+ Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
+ text.addModifyListener(this);
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ data.verticalAlignment = GridData.CENTER;
+ data.grabExcessVerticalSpace = false;
+ text.setLayoutData(data);
+ return text;
+}
+
+/**
+ * The <code>ReadmePreferencePage</code> implementation of this
+ * <code>PreferencePage</code> method returns preference store that belongs to
+ * the our plugin. This is important because we want to store our preferences
+ * separately from the workbench.
+ */
+protected IPreferenceStore doGetPreferenceStore() {
+ return UiPlugin.getDefault().getPreferenceStore();
+}
+
+/**
+ * @return The dialog title
+ */
+String getDialogTitle() {
+ String title = DB_Results.getDbTitle();
+ if (title == null) {
+ // DB is not connected
+ int version;
+ if (this.mVersionRadioButton.getSelection()) {
+ version = ECLIPSE_MAINTENANCE_VERSION;
+ } else {
+ version = ECLIPSE_DEVELOPMENT_VERSION;
+ }
+ title = "Eclipse " + version + " - DB not connected";
+ }
+ return title;
+}
+
+/*
+ * Get the directory path using the given location as default.
+ */
+private String getDirectoryPath(String location) {
+ DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
+ dialog.setText(getDialogTitle());
+ dialog.setMessage("Select local database directory:");
+ dialog.setFilterPath(location);
+ String path = dialog.open();
+ if (path != null) {
+ File dir = new File(path);
+ if (dir.exists() && dir.isDirectory()) {
+ return dir.getAbsolutePath();
+ }
+ }
+ return null;
+}
+
+/*
+ * (non-Javadoc) Method declared on IWorkbenchPreferencePage
+ */
+public void init(IWorkbench workbench) {
+ // do nothing
+}
+
+/*
+ * Init he contents of the dimensions list controls.
+ */
+void initDimensionsLists() {
+ // Dimensions lists
+ java.util.List dimensions = PerformanceTestPlugin.getDimensions();
+ Iterator names = dimensions.iterator();
+ while (names.hasNext()) {
+ String name = (String) names.next();
+ this.defaultDimensionCombo.add(name);
+ this.resultsDimensionsList.add(name);
+ }
+}
+
+/*
+ * Init he contents of the dimensions list controls.
+ */
+private void initBuildsList() {
+ String[] builds = DB_Results.getBuilds();
+ Arrays.sort(builds, Util.BUILD_DATE_COMPARATOR);
+ int length = builds.length;
+ for (int i=length-1; i>=0; i--) {
+ this.lastBuildCombo.add(builds[i]);
+ }
+}
+
+/**
+ * Initializes states of the controls using default values in the preference
+ * store.
+ */
+private void initializeDefaults() {
+ IPreferenceStore store = getPreferenceStore();
+
+ // Init default database values
+ this.dbConnectionCheckBox.setSelection(store.getDefaultBoolean(PRE_DATABASE_CONNECTION));
+ this.dbRelengRadioButton.setSelection(false);
+ this.dbLocalRadioButton.setSelection(false);
+ final boolean dbLocal = store.getDefaultBoolean(PRE_DATABASE_LOCAL);
+ if (dbLocal) {
+ this.dbLocalRadioButton.setSelection(true);
+ } else {
+ this.dbRelengRadioButton.setSelection(true);
+ }
+ this.databaseLocationCombo.removeAll();
+ this.databaseLocationCombo.setText(store.getDefaultString(PRE_DATABASE_LOCATION));
+ updateDatabaseGroup();
+
+ // Init default status values
+ int writeStatus = store.getDefaultInt(PRE_WRITE_STATUS);
+ initStatusValues(writeStatus);
+
+ // Init eclipse version
+ this.mVersionRadioButton.setSelection(false);
+ this.dVersionRadionButton.setSelection(false);
+ int version = store.getDefaultInt(PRE_ECLIPSE_VERSION);
+ if (version == ECLIPSE_MAINTENANCE_VERSION) {
+ this.mVersionRadioButton.setSelection(true);
+ } else {
+ this.dVersionRadionButton.setSelection(true);
+ }
+ updateBrowseButtonToolTip(version);
+
+ // Milestones
+ this.milestonesCombo.removeAll();
+ String prefix = PRE_MILESTONE_BUILDS + "." + version;
+ String milestone = store.getDefaultString(prefix + "0");
+ int index = 0;
+ while (milestone != null && milestone.length() > 0) {
+ this.milestonesCombo.add(milestone);
+ milestone = store.getDefaultString(prefix + ++index);
+ }
+
+ // Init last build
+ String lastBuild = store.getDefaultString(PRE_LAST_BUILD);
+// if (lastBuild.length() == 0) {
+// this.lastBuildCheckBox.setSelection(false);
+// this.lastBuildCombo.setEnabled(false);
+// } else {
+// this.lastBuildCombo.setEnabled(true);
+// }
+ this.lastBuildCombo.setText(lastBuild);
+
+ // Init default default dimension
+ String defaultDimension = store.getDefaultString(PRE_DEFAULT_DIMENSION);
+ this.defaultDimensionCombo.setText(defaultDimension);
+
+ // Init default generated dimensions
+ this.resultsDimensionsList.add(store.getDefaultString(PRE_RESULTS_DIMENSION+".0"));
+ this.resultsDimensionsList.add(store.getDefaultString(PRE_RESULTS_DIMENSION+".1"));
+}
+
+/**
+ * Initializes states of the controls from the preference store.
+ */
+private void initializeValues() {
+ IPreferenceStore store = getPreferenceStore();
+
+ // Init database info
+ this.dbConnectionCheckBox.setSelection(store.getBoolean(PRE_DATABASE_CONNECTION));
+ final boolean dbLocal = store.getBoolean(PRE_DATABASE_LOCAL);
+ if (dbLocal) {
+ this.dbLocalRadioButton.setSelection(true);
+ this.dbRelengRadioButton.setToolTipText("");
+ } else {
+ this.dbRelengRadioButton.setSelection(true);
+ this.dbRelengRadioButton.setToolTipText(NETWORK_DATABASE_LOCATION);
+ }
+ this.databaseLocationCombo.removeAll();
+ this.databaseLocationCombo.setText(store.getString(PRE_DATABASE_LOCATION));
+ for (int i = 0; i < 3; i++) {
+ String history = store.getString(PRE_DATABASE_LOCATION + "." + i);
+ if (history.length() == 0)
+ break;
+ this.databaseLocationCombo.add(history);
+ }
+ updateDatabaseGroup();
+
+ // Init status values
+ int writeStatus = store.getInt(PRE_WRITE_STATUS);
+ initStatusValues(writeStatus);
+
+ // Init eclipse version
+ int version = store.getInt(PRE_ECLIPSE_VERSION);
+ if (version == ECLIPSE_MAINTENANCE_VERSION) {
+ this.mVersionRadioButton.setSelection(true);
+ } else {
+ this.dVersionRadionButton.setSelection(true);
+ }
+ updateBrowseButtonToolTip(version);
+
+ // Milestones
+ String prefix = PRE_MILESTONE_BUILDS + "." + version;
+ int index = 0;
+ String milestone = store.getString(prefix + index);
+ while (milestone != null && milestone.length() > 0) {
+ this.milestonesCombo.add(milestone);
+ milestone = store.getString(prefix + ++index);
+ }
+
+ // Init last build
+ String lastBuild = store.getString(PRE_LAST_BUILD);
+// if (lastBuild.length() == 0) {
+// this.lastBuildCheckBox.setSelection(false);
+// this.lastBuildCombo.setEnabled(false);
+// } else {
+// this.lastBuildCombo.setEnabled(true);
+// }
+ this.lastBuildCombo.setText(lastBuild);
+
+ // Init composite lists
+ initDimensionsLists();
+
+ // Init default dimension
+ String defaultDimension = store.getString(PRE_DEFAULT_DIMENSION);
+ this.defaultDimensionCombo.setText(defaultDimension);
+
+ // Init generated dimensions
+ int count = this.resultsDimensionsList.getItemCount();
+ int[] indices = new int[count];
+ int n = 0;
+ String resultsDimension = store.getString(PRE_RESULTS_DIMENSION + "." + n);
+ while (resultsDimension.length() > 0) {
+ indices[n++] = this.resultsDimensionsList.indexOf(resultsDimension);
+ resultsDimension = store.getString(PRE_RESULTS_DIMENSION + "." + n);
+ }
+ if (n < count) {
+ System.arraycopy(indices, 0, indices = new int[n], 0, n);
+ }
+ this.resultsDimensionsList.select(indices);
+
+ // Init config descriptors
+ /* TODO See whether config descriptors need to be set as preferences or not...
+ this.configDescriptorsTable.clearAll();
+ int d = 0;
+ String descriptorName = store.getString(PRE_CONFIG_DESCRIPTOR_NAME + "." + d);
+ String descriptorDescription = store.getString(PRE_CONFIG_DESCRIPTOR_DESCRIPTION + "." + d++);
+ while (descriptorName.length() > 0) {
+ TableItem tableItem = new TableItem (this.configDescriptorsTable, SWT.NONE);
+ tableItem.setText (0, descriptorName);
+ tableItem.setText (1, descriptorDescription);
+ descriptorName = store.getString(PRE_CONFIG_DESCRIPTOR_NAME + "." + d);
+ descriptorDescription = store.getString(PRE_CONFIG_DESCRIPTOR_DESCRIPTION + "." + d++);
+ }
+ */
+}
+
+/**
+ * @param writeStatus The observed status to write
+ */
+private void initStatusValues(int writeStatus) {
+ this.statusValuesCheckBox.setSelection((writeStatus & STATUS_VALUES) != 0);
+ this.statusErrorNoneRadioButton.setSelection(false);
+ this.statusErrorNoticeableRadioButton.setSelection(false);
+ this.statusErrorSuspiciousRadioButton.setSelection(false);
+ this.statusErrorWeirdRadioButton.setSelection(false);
+ this.statusErrorInvalidRadioButton.setSelection(false);
+ switch (writeStatus & STATUS_ERROR_LEVEL_MASK) {
+ case STATUS_ERROR_NONE:
+ this.statusErrorNoneRadioButton.setSelection(true);
+ break;
+ case STATUS_ERROR_NOTICEABLE:
+ this.statusErrorNoticeableRadioButton.setSelection(true);
+ break;
+ case STATUS_ERROR_SUSPICIOUS:
+ this.statusErrorSuspiciousRadioButton.setSelection(true);
+ break;
+ case STATUS_ERROR_WEIRD:
+ this.statusErrorWeirdRadioButton.setSelection(true);
+ break;
+ case STATUS_ERROR_INVALID:
+ this.statusErrorInvalidRadioButton.setSelection(true);
+ break;
+ }
+ this.statusSmallBuildValueCheckBox.setSelection(false);
+ this.statusSmallDeltaValueCheckBox.setSelection(false);
+ switch (writeStatus & STATUS_SMALL_VALUE_MASK) {
+ case STATUS_SMALL_VALUE_BUILD:
+ this.statusSmallBuildValueCheckBox.setSelection(true);
+ break;
+ case STATUS_SMALL_VALUE_DELTA:
+ this.statusSmallDeltaValueCheckBox.setSelection(true);
+ break;
+ }
+ this.statusStatisticNoneRadioButton.setSelection(false);
+ this.statusStatisticErraticRadioButton.setSelection(false);
+ this.statusStatisticUnstableRadioButton.setSelection(false);
+ switch (writeStatus & STATUS_STATISTICS_MASK) {
+ case 0:
+ this.statusStatisticNoneRadioButton.setSelection(true);
+ break;
+ case STATUS_STATISTICS_ERRATIC:
+ this.statusStatisticErraticRadioButton.setSelection(true);
+ break;
+ case STATUS_STATISTICS_UNSTABLE:
+ this.statusStatisticUnstableRadioButton.setSelection(true);
+ break;
+ }
+ this.statusBuildsToConfirm.setText(String.valueOf(writeStatus & STATUS_BUILDS_NUMBER_MASK));
+}
+
+/**
+ * (non-Javadoc) Method declared on ModifyListener
+ */
+public void modifyText(ModifyEvent event) {
+
+ // Add default dimension to results if necessary
+ if (event.getSource() == this.defaultDimensionCombo) {
+ String[] resultsDimensions = this.resultsDimensionsList.getSelection();
+ int length = resultsDimensions.length;
+ String defaultDimension = this.defaultDimensionCombo.getText();
+ for (int i = 0; i < length; i++) {
+ if (resultsDimensions[i].equals(defaultDimension)) {
+ // Default dim is already set as a results dimension, hence nothing has to be done
+ return;
+ }
+ }
+ System.arraycopy(resultsDimensions, 0, resultsDimensions = new String[length + 1], 0, length);
+ resultsDimensions[length] = defaultDimension;
+ this.resultsDimensionsList.setSelection(resultsDimensions);
+ }
+
+ // Add default dimension to results if necessary
+ if (event.getSource() == this.milestonesCombo) {
+
+ // Verify the only digits are entered
+ String milestoneDate = this.milestonesCombo.getText();
+ final int mLength = milestoneDate.length();
+ if (mLength > 0) {
+ for (int i=0; i<mLength; i++) {
+ if (!Character.isDigit(milestoneDate.charAt(i))) {
+ String[] items = this.milestonesCombo.getItems();
+ int length = items.length;
+ for (int j=0; j<length; j++) {
+ if (items[j].equals(milestoneDate)) {
+ // already existing milestone, leave silently
+ if (MessageDialog.openQuestion(getShell(), getDialogTitle(), "Do you want to select milestone "+milestoneDate+" as the last build?")) {
+ String builds[] = this.lastBuildCombo.getItems();
+ int bLength = builds.length;
+ String milestone = milestoneDate.substring(milestoneDate.indexOf('-')+1);
+ for (int b=0; b<bLength; b++) {
+ if (builds[b].length() > 0 && Util.getBuildDate(builds[b]).equals(milestone)) {
+ this.lastBuildCombo.select(b);
+ break;
+ }
+ }
+ }
+ return;
+ }
+ }
+ openMilestoneErrorMessage(milestoneDate);
+ return;
+ }
+ }
+ }
+
+ // Do not verify further until a complete milestone date is entered
+ if (mLength < 12) return;
+
+ // Verify the digits
+ try {
+ String str = milestoneDate.substring(0, 4);
+ int year = Integer.parseInt(str);
+ if (year < 2009 || year > 2020) { // 2020 should be enough!
+ MessageDialog.openError(getShell(), getDialogTitle(), milestoneDate+": "+str+" is an invalid year, only value between 2009 and 2020 is accepted!");
+ return;
+ }
+ str = milestoneDate.substring(4, 6);
+ int month = Integer.parseInt(str);
+ if (month <= 0 || month > 12) {
+ MessageDialog.openError(getShell(), getDialogTitle(), milestoneDate+": "+str+" is an invalid month, it should be only from 01 to 12!");
+ return;
+ }
+ str = milestoneDate.substring(6, 8);
+ int day = Integer.parseInt(str);
+ if (day <= 0 || day > 31) {
+ // TODO improve this verification
+ MessageDialog.openError(getShell(), getDialogTitle(), milestoneDate+": "+str+" is an invalid day, it should be only from 01 to 31!");
+ return;
+ }
+ str = milestoneDate.substring(8, 10);
+ int hour = Integer.parseInt(str);
+ if (hour < 0 || hour > 23) {
+ MessageDialog.openError(getShell(), getDialogTitle(), milestoneDate+": "+str+" is an invalid hour, it should be only from 00 to 23!");
+ return;
+ }
+ str = milestoneDate.substring(10, 12);
+ int min = Integer.parseInt(str);
+ if (min < 0 || min > 59) {
+ MessageDialog.openError(getShell(), getDialogTitle(), milestoneDate+": "+str+" is invalid minutes, it should be only from 00 to 59!");
+ return;
+ }
+ }
+ catch (NumberFormatException nfe) {
+ openMilestoneErrorMessage(milestoneDate);
+ }
+
+ // Get combo info
+ String[] milestones = this.milestonesCombo.getItems();
+ int length = milestones.length;
+ String lastMilestone = length == 0 ? null : milestones[length-1];
+
+ // Verify that the added milestone is valid
+ final String databaseLocation = this.databaseLocationCombo.getText();
+ char version = databaseLocation.charAt(databaseLocation.length()-1);
+
+ // Verify that the milestone follow the last one
+ String milestoneName;
+ if (lastMilestone == null) {
+ // No previous last milestone
+ milestoneName = "M1";
+ } else {
+ // Compare with last milestone
+ if (lastMilestone.charAt(0) == 'M') {
+ char digit = lastMilestone.charAt(1);
+ if (digit == '6') {
+ // M6 is the last dvpt milestone
+ milestoneName = "RC1";
+ } else {
+ milestoneName = "M" +((char)(digit+1));
+ }
+ } else if (lastMilestone.startsWith("RC")) {
+ char digit = lastMilestone.charAt(2);
+ if (digit == '4') {
+ // RC4 is the last release candidate milestone
+ milestoneName = "R3_"+version;
+ } else {
+ milestoneName = "RC" +((char)(digit+1));
+ }
+ } else if (lastMilestone.startsWith("R3_"+version+"-")) {
+ milestoneName = "R3_" + version + "_1";
+ } else if (lastMilestone.startsWith("R3_"+version+"_")) {
+ char digit = lastMilestone.charAt(5);
+ milestoneName = "R3_" + version + "_" + ((char)(digit+1));
+ } else {
+ MessageDialog.openError(getShell(), getDialogTitle(), "Unexpected last milestone name: "+lastMilestone+"!");
+ return;
+ }
+
+ // Verify the date of the new milestone
+ int lastMilestoneDash = lastMilestone.indexOf('-');
+ final String lastMilestoneDate = lastMilestone.substring(lastMilestoneDash+1);
+ if (milestoneDate.compareTo(lastMilestoneDate) <= 0) {
+ // TODO improve this verification
+ MessageDialog.openError(getShell(), getDialogTitle(), "Milestone "+milestoneDate+" should be after the last milestone: "+lastMilestoneDate+"!");
+ return;
+ }
+ }
+
+ // Verification are ok, ask to add the milestone
+ final String milestone = milestoneName + "-" + milestoneDate;
+ if (MessageDialog.openConfirm(getShell(), getDialogTitle(), milestoneDate+" is a valid milestone date.\n\nDo you want to add the milestone '"+milestone+"' to the preferences?")) {
+ this.milestonesCombo.add(milestone);
+ this.milestonesCombo.setText("");
+ }
+ }
+
+ // Verify the 'builds to confirm' number
+ if (event.getSource() == this.statusBuildsToConfirm) {
+ try {
+ int number = Integer.parseInt(this.statusBuildsToConfirm.getText());
+ if (number < 1 ) {
+ this.statusBuildsToConfirm.setText("1");
+ } else {
+ int buildsNumber = DB_Results.getBuildsNumber();
+ if (number > buildsNumber) {
+ this.statusBuildsToConfirm.setText(String.valueOf(buildsNumber));
+ }
+ }
+ }
+ catch (NumberFormatException nfe) {
+ this.statusBuildsToConfirm.setText("1");
+ }
+ }
+}
+
+
+/**
+ * @param milestone
+ */
+void openMilestoneErrorMessage(String milestone) {
+ MessageDialog.openError(getShell(), getDialogTitle(), milestone+" is an invalid milestone date. Only 'yyyymmddHHMM' format is accepted!");
+}
+
+/*
+ * (non-Javadoc) Method declared on PreferencePage
+ */
+protected void performDefaults() {
+ super.performDefaults();
+ initializeDefaults();
+}
+
+/*
+ * (non-Javadoc) Method declared on PreferencePage
+ */
+public boolean performOk() {
+ final boolean hasBuildsView = this.buildsView != null;
+ if (hasBuildsView) {
+ storeValues();
+ try {
+ IEclipsePreferences preferences = new InstanceScope().getNode(PLUGIN_ID);
+ preferences.flush();
+ this.buildsView.resetView();
+ } catch (BackingStoreException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Stores the values of the controls back to the preference store.
+ */
+private void storeValues() {
+ IPreferenceStore store = getPreferenceStore();
+
+ // Set version
+ int version;
+ if (this.mVersionRadioButton.getSelection()) {
+ version = ECLIPSE_MAINTENANCE_VERSION;
+ } else {
+ version = ECLIPSE_DEVELOPMENT_VERSION;
+ }
+ store.setValue(PRE_ECLIPSE_VERSION, version);
+
+ // Set database values
+ store.setValue(PRE_DATABASE_CONNECTION, this.dbConnectionCheckBox.getSelection());
+ final boolean dbLocal = this.dbLocalRadioButton.getSelection();
+ store.setValue(PRE_DATABASE_LOCAL, dbLocal);
+ String location = this.databaseLocationCombo.getText();
+ if (dbLocal) {
+ store.setValue(PRE_DATABASE_LOCATION, location);
+ } else {
+ store.setValue(PRE_DATABASE_LOCATION, NETWORK_DATABASE_LOCATION);
+ }
+ int count = this.databaseLocationCombo.getItemCount();
+ for (int i=0; i<count; i++) {
+ String item = this.databaseLocationCombo.getItem(i);
+ if (item.equals(location)) {
+ this.databaseLocationCombo.remove(i);
+ break;
+ }
+ }
+ if (dbLocal) {
+ this.databaseLocationCombo.add(location, 0);
+ }
+ int i=0;
+ for (; i<count; i++) {
+ String item = this.databaseLocationCombo.getItem(i);
+ if (item.length() == 0) break;
+ store.setValue(PRE_DATABASE_LOCATION+"."+i, item);
+ }
+ while (store.getString(PRE_DATABASE_LOCATION+"."+i).length() > 0) {
+ store.setToDefault(PRE_DATABASE_LOCATION+"."+i);
+ i++;
+ }
+
+ // Set status values
+ int writeStatus = 0;
+ if (this.statusValuesCheckBox.getSelection()) {
+ writeStatus |= STATUS_VALUES;
+ }
+ if (this.statusErrorNoneRadioButton.getSelection()) {
+ writeStatus |= STATUS_ERROR_NONE;
+ } else if (this.statusErrorNoticeableRadioButton.getSelection()) {
+ writeStatus |= STATUS_ERROR_NOTICEABLE;
+ } else if (this.statusErrorSuspiciousRadioButton.getSelection()) {
+ writeStatus |= STATUS_ERROR_SUSPICIOUS;
+ } else if (this.statusErrorWeirdRadioButton.getSelection()) {
+ writeStatus |= STATUS_ERROR_WEIRD;
+ } else if (this.statusErrorInvalidRadioButton.getSelection()) {
+ writeStatus |= STATUS_ERROR_INVALID;
+ }
+ if (this.statusSmallBuildValueCheckBox.getSelection()) {
+ writeStatus |= STATUS_SMALL_VALUE_BUILD;
+ }
+ if (this.statusSmallDeltaValueCheckBox.getSelection()) {
+ writeStatus |= STATUS_SMALL_VALUE_DELTA;
+ }
+ if (this.statusStatisticNoneRadioButton.getSelection()) {
+ writeStatus &= ~STATUS_STATISTICS_MASK;
+ } else if (this.statusStatisticErraticRadioButton.getSelection()) {
+ writeStatus |= STATUS_STATISTICS_ERRATIC;
+ } else if (this.statusStatisticUnstableRadioButton.getSelection()) {
+ writeStatus |= STATUS_STATISTICS_UNSTABLE;
+ }
+ writeStatus += Integer.parseInt(this.statusBuildsToConfirm.getText());
+ store.setValue(PRE_WRITE_STATUS, writeStatus);
+
+ // Set milestones
+ String prefix = PRE_MILESTONE_BUILDS + "." + version;
+ count = this.milestonesCombo.getItemCount();
+ for (i=0; i<count; i++) {
+ store.putValue(prefix + i, this.milestonesCombo.getItem(i));
+ }
+ Util.setMilestones(this.milestonesCombo.getItems());
+
+ // Unset previous additional milestones
+ String milestone = store.getString(prefix + count);
+ while (milestone != null && milestone.length() > 0) {
+ store.putValue(prefix + count++, "");
+ milestone = store.getString(prefix + count);
+ }
+
+ // Set last build
+ String lastBuild = this.lastBuildCombo.getText();
+ store.putValue(PRE_LAST_BUILD, lastBuild);
+
+ // Set default dimension
+ String defaultDimension = this.defaultDimensionCombo.getText();
+ store.putValue(PRE_DEFAULT_DIMENSION, defaultDimension);
+ DB_Results.setDefaultDimension(defaultDimension);
+
+ // Set generated dimensions
+ int[] indices = this.resultsDimensionsList.getSelectionIndices();
+ int length = indices.length;
+ String[] dimensions = new String[length];
+ if (length > 0) {
+ for (i = 0; i < indices.length; i++) {
+ dimensions[i] = this.resultsDimensionsList.getItem(indices[i]);
+ store.putValue(PRE_RESULTS_DIMENSION + "." + i, dimensions[i]);
+ }
+ }
+ int currentLength = DB_Results.getResultsDimensions().length;
+ if (currentLength > length) {
+ for (i = currentLength - 1; i >= length; i--) {
+ store.putValue(PRE_RESULTS_DIMENSION + "." + i, ""); // reset extra dimensions
+ }
+ }
+ DB_Results.setResultsDimensions(dimensions);
+
+ // Set config descriptors
+ /* TODO See whether config descriptors need to be set as preferences or not...
+ TableItem[] items = this.configDescriptorsTable.getItems();
+ length = items.length;
+ for (int i = 0; i < length; i++) {
+ TableItem item = items[i];
+ store.putValue(PRE_CONFIG_DESCRIPTOR_NAME + "." + i, item.getText(0));
+ store.putValue(PRE_CONFIG_DESCRIPTOR_DESCRIPTION + "." + i, item.getText(1));
+ }
+ */
+}
+
+/**
+ * (non-Javadoc) Method declared on SelectionListener
+ */
+public void widgetDefaultSelected(SelectionEvent event) {
+}
+
+/**
+ * (non-Javadoc) Method declared on SelectionListener
+ */
+public void widgetSelected(SelectionEvent event) {
+
+ // As for directory when 'Local' button is pushed
+ final Object source = event.getSource();
+ if (source == this.dbLocalBrowseButton) {
+ String location = this.databaseLocationCombo.getText();
+ String path = getDirectoryPath(location);
+ if (path != null) {
+ // First verify that the selected dir was correct
+ int version;
+ if (this.mVersionRadioButton.getSelection()) {
+ version = ECLIPSE_MAINTENANCE_VERSION;
+ } else {
+ version = ECLIPSE_DEVELOPMENT_VERSION;
+ }
+ File dbDir = new File(path, "perfDb"+version);
+ if (!dbDir.exists() || !dbDir.isDirectory()) {
+ StringBuffer message = new StringBuffer("Invalid performance database directory\n");
+ message.append(path+" should contain 'perfDb");
+ message.append(version);
+ message.append("' directory and none was found!");
+ MessageDialog.openError(getShell(), getDialogTitle(), message.toString());
+ return;
+ }
+
+ // Look for selected dir in combo box list
+ int count = this.databaseLocationCombo.getItemCount();
+ int index = -1;
+ for (int i = 0; i < count; i++) {
+ String item = this.databaseLocationCombo.getItem(i);
+ if (item.length() == 0) { // nothing in the combo-box list
+ break;
+ }
+ if (item.equals(path)) {
+ index = i;
+ break;
+ }
+ }
+ // Set the selected dir the more recent in the previous dirs list
+ if (index != 0) {
+ if (index > 0) {
+ // the dir was used before, but not recently => remove it from previous dirs list
+ this.databaseLocationCombo.remove(index);
+ }
+ // add the selected dir on the top of the previous dirs list
+ this.databaseLocationCombo.add(path, 0);
+ }
+ // Set combo box text
+ this.databaseLocationCombo.setText(path);
+ updateLocalDb();
+ }
+ }
+
+ // Reset dabase location when 'Releng' button is pushed
+ if (source == this.dbConnectionCheckBox) {
+ updateDatabaseGroup();
+ }
+
+ // Reset dabase location when 'Releng' check-box is checked
+ if (source == this.dbLocalRadioButton) {
+ updateLocalDb();
+ }
+
+ // Add default dimension to results if necessary
+ if (source == this.resultsDimensionsList) {
+ String[] resultsDimensions = this.resultsDimensionsList.getSelection();
+ int length = resultsDimensions.length;
+ String defaultDimension = this.defaultDimensionCombo.getText();
+ for (int i = 0; i < length; i++) {
+ if (resultsDimensions[i].equals(defaultDimension)) {
+ // Default dim is already set as a results dimension, hence nothing has to be done
+ return;
+ }
+ }
+ System.arraycopy(resultsDimensions, 0, resultsDimensions = new String[length + 1], 0, length);
+ resultsDimensions[length] = defaultDimension;
+ this.resultsDimensionsList.setSelection(resultsDimensions);
+ }
+
+// if (source == this.lastBuildCheckBox) {
+// this.lastBuildCombo.setEnabled(this.lastBuildCheckBox.getSelection());
+// }
+
+ if (source == this.mVersionRadioButton) {
+ if (this.mVersionRadioButton.getSelection()) {
+ updateBrowseButtonToolTip(ECLIPSE_MAINTENANCE_VERSION);
+ }
+ }
+
+ if (source == this.dVersionRadionButton) {
+ if (this.dVersionRadionButton.getSelection()) {
+ updateBrowseButtonToolTip(ECLIPSE_DEVELOPMENT_VERSION);
+ }
+ }
+}
+
+/*
+ * Update browse tooltip
+ */
+void updateBrowseButtonToolTip(int version) {
+ this.dbLocalBrowseButton.setToolTipText("Select the directory where the database was unzipped\n(i.e. should contain the perfDb"+version+" subdirectory)");
+}
+
+/*
+ * Update database group controls.
+ */
+void updateDatabaseGroup() {
+ if (this.dbConnectionCheckBox.getSelection()) {
+ this.dbRelengRadioButton.setEnabled(true);
+ this.dbLocalRadioButton.setEnabled(true);
+ updateLocalDb();
+ } else {
+ this.dbRelengRadioButton.setEnabled(false);
+ this.dbLocalRadioButton.setEnabled(false);
+ this.databaseLocationCombo.setEnabled(false);
+ this.dbLocalBrowseButton.setEnabled(false);
+ setValid(true);
+ }
+}
+
+/*
+ * Update database location controls.
+ */
+void updateLocalDb() {
+ if (this.dbLocalRadioButton.getSelection()) {
+ this.databaseLocationCombo.setEnabled(true);
+ this.dbLocalBrowseButton.setEnabled(true);
+ if (this.databaseLocationCombo.getItemCount() == 0) {
+ this.databaseLocationCombo.setText("");
+ setValid(false);
+ } else {
+ this.databaseLocationCombo.select(0);
+ setValid(true);
+ }
+ this.dbRelengRadioButton.setToolTipText("");
+ this.dbLocationLabel.setEnabled(true);
+ } else {
+ this.dbRelengRadioButton.setToolTipText(NETWORK_DATABASE_LOCATION);
+ this.databaseLocationCombo.setText("");
+ this.databaseLocationCombo.setEnabled(false);
+ this.dbLocalBrowseButton.setEnabled(false);
+ setValid(true);
+ this.dbLocationLabel.setEnabled(false);
+ }
+}
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformancesView.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformancesView.java
new file mode 100644
index 0000000..470ab35
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/PerformancesView.java
@@ -0,0 +1,710 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.ui;
+
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.text.NumberFormat;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.model.BuildResultsElement;
+import org.eclipse.test.internal.performance.results.model.PerformanceResultsElement;
+import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+import org.osgi.service.prefs.BackingStoreException;
+
+
+/**
+ * Abstract view for performance results.
+ */
+public abstract class PerformancesView extends ViewPart implements ISelectionChangedListener, IPreferenceChangeListener {
+
+ // Format
+ static final NumberFormat DOUBLE_FORMAT = NumberFormat.getNumberInstance(Locale.US);
+ static {
+ DOUBLE_FORMAT.setMaximumFractionDigits(3);
+ }
+
+ // Graphic constants
+ static final Display DEFAULT_DISPLAY = Display.getDefault();
+ static final Color BLACK= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLACK);
+ static final Color BLUE= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLUE);
+ static final Color GREEN= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GREEN);
+ static final Color RED = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_RED);
+ static final Color GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GRAY);
+ static final Color DARK_GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_DARK_GRAY);
+ static final Color YELLOW = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_YELLOW);
+ static final Color WHITE = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_WHITE);
+
+ // Viewer filters
+ static final ViewerFilter[] NO_FILTER = new ViewerFilter[0];
+ final static ViewerFilter FILTER_BASELINE_BUILDS = new ViewerFilter() {
+ public boolean select(Viewer v, Object parentElement, Object element) {
+ if (element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ return !buildElement.getName().startsWith(DB_Results.getDbBaselinePrefix());
+ }
+ return true;
+ }
+ };
+ public final static ViewerFilter FILTER_NIGHTLY_BUILDS = new ViewerFilter() {
+ public boolean select(Viewer v, Object parentElement, Object element) {
+ if (element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ return buildElement.getName().charAt(0) != 'N';
+ }
+ return true;
+ }
+ };
+ final static ViewerFilter FILTER_OLD_BUILDS = new ViewerFilter() {
+ public boolean select(Viewer v, Object parentElement, Object element) {
+ if (element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ return buildElement.isImportant();
+ }
+ return true;
+ }
+ };
+ static String LAST_BUILD;
+ final static ViewerFilter FILTER_LAST_BUILDS = new ViewerFilter() {
+ public boolean select(Viewer v, Object parentElement, Object element) {
+ if (LAST_BUILD != null && element instanceof BuildResultsElement) {
+ BuildResultsElement buildElement = (BuildResultsElement) element;
+ return buildElement.isBefore(LAST_BUILD);
+ }
+ return true;
+ }
+ };
+ Set viewFilters = new HashSet();
+
+ // SWT resources
+ Shell shell;
+ Display display;
+ TreeViewer viewer;
+ IPropertySheetPage propertyPage;
+
+ // Data info
+ File dataDir;
+
+ // Views
+ IMemento viewState;
+
+ // Results model information
+ PerformanceResultsElement results;
+
+ // Actions
+ Action changeDataDir;
+ Action filterBaselineBuilds;
+ Action filterNightlyBuilds;
+ Action filterOldBuilds;
+ Action filterLastBuilds;
+// Action dbConnection;
+
+ // Eclipse preferences
+ IEclipsePreferences preferences;
+
+/**
+ * Get a view from its ID.
+ *
+ * @param viewId The ID of the view
+ * @return The found view or <code>null</null> if not found.
+ */
+static IViewPart getWorkbenchView(String viewId) {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+ int length = windows.length;
+ for (int i=0; i<length; i++) {
+ IWorkbenchWindow window = windows[i];
+ IWorkbenchPage[] pages = window.getPages();
+ int pLength = pages.length;
+ for (int j=0; j<pLength; j++) {
+ IWorkbenchPage page = pages[i];
+ IViewPart view = page.findView(viewId);
+ if (view != null) {
+ return view;
+ }
+ }
+ }
+ return null;
+}
+
+/**
+ * The constructor.
+ */
+public PerformancesView() {
+
+ // Get preferences
+ this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
+
+ // Init db constants
+ int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+ String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
+ boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+ DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
+ this.preferences.addPreferenceChangeListener(this);
+
+ // Init tool tip
+ setTitleToolTip();
+
+ // Init milestones
+ Util.initMilestones(this.preferences);
+
+ // Init last build
+ String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null);
+ LAST_BUILD = lastBuild == null || lastBuild.length() == 0 ? null : lastBuild;
+}
+
+File changeDataDir() {
+ String localDataDir = this.preferences.get(IPerformancesConstants.PRE_LOCAL_DATA_DIR, "");
+ String filter = (this.dataDir == null) ? localDataDir : this.dataDir.getPath();
+ File dir = this.dataDir;
+ this.dataDir = changeDir(filter, "Select directory for data local files");
+ boolean refresh = false;
+ if (this.dataDir != null) {
+ this.preferences.put(IPerformancesConstants.PRE_LOCAL_DATA_DIR, this.dataDir.getAbsolutePath());
+ if (dir != null && dir.getPath().equals(this.dataDir.getPath())) {
+ refresh = MessageDialog.openQuestion(this.shell, getTitleToolTip(), "Do you want to read local file again?");
+ } else {
+ refresh = true;
+ }
+ if (refresh) {
+ // Confirm the read when there's a last build set
+ if (LAST_BUILD != null) {
+ if (!MessageDialog.openConfirm(PerformancesView.this.shell, getTitleToolTip(), "Only builds before "+LAST_BUILD+" will be taken into account!\nDo you want to continue?")) {
+ return null;
+ }
+ }
+
+ // Read local files
+ readLocalFiles();
+
+ // Refresh views
+ refreshInput();
+ PerformancesView resultsView = getSiblingView();
+ resultsView.refreshInput();
+ return resultsView.dataDir = this.dataDir;
+ }
+ }
+ return null;
+}
+
+/*
+ * Select a directory.
+ */
+File changeDir(String filter, String msg) {
+ DirectoryDialog dialog = new DirectoryDialog(getSite().getShell(), SWT.OPEN);
+ dialog.setText(getTitleToolTip());
+ dialog.setMessage(msg);
+ if (filter != null) {
+ dialog.setFilterPath(filter);
+ }
+ String path = dialog.open();
+ if (path != null) {
+ File dir = new File(path);
+ if (dir.exists() && dir.isDirectory()) {
+ return dir;
+ }
+ }
+ return null;
+}
+
+/*
+ * Contribute actions to bars.
+ */
+void contributeToActionBars() {
+ IActionBars bars = getViewSite().getActionBars();
+ fillLocalPullDown(bars.getMenuManager());
+ fillLocalToolBar(bars.getToolBarManager());
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+public void createPartControl(Composite parent) {
+ // Cache the shell and display.
+ this.shell = parent.getShell ();
+ this.display = this.shell.getDisplay ();
+}
+
+/*
+ * Fill the context menu.
+ */
+void fillContextMenu(IMenuManager manager) {
+ // no default contextual action
+}
+
+/*
+ * Fill the filters drop-down menu.
+ */
+void fillFiltersDropDown(IMenuManager manager) {
+ manager.add(this.filterBaselineBuilds);
+ manager.add(this.filterNightlyBuilds);
+}
+
+/*
+ * Fill the local data drop-down menu
+ */
+void fillLocalDataDropDown(IMenuManager manager) {
+ manager.add(this.changeDataDir);
+}
+
+/*
+ * Fill the local pull down menu.
+ */
+void fillLocalPullDown(IMenuManager manager) {
+
+ // Filters menu
+ MenuManager filtersManager= new MenuManager("Filters");
+ fillFiltersDropDown(filtersManager);
+ manager.add(filtersManager);
+
+ // Local data menu
+ MenuManager localDataManager= new MenuManager("Local data");
+ fillLocalDataDropDown(localDataManager);
+ manager.add(localDataManager);
+}
+
+/*
+ * Fill the local toolbar.
+ */
+void fillLocalToolBar(IToolBarManager manager) {
+ // no default toolbar action
+}
+
+/*
+ * Filter non fingerprints scenarios action run.
+ */
+void filterLastBuilds(boolean filter, boolean updatePreference) {
+ if (filter) {
+ this.viewFilters.add(FILTER_LAST_BUILDS);
+ } else {
+ this.viewFilters.remove(FILTER_LAST_BUILDS);
+ }
+ this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_LAST_BUILDS, filter);
+ updateFilters();
+}
+
+/*
+ * Filter non milestone builds action run.
+ */
+void filterNightlyBuilds(boolean filter, boolean updatePreference) {
+ if (filter) {
+ this.viewFilters.add(FILTER_NIGHTLY_BUILDS);
+ } else {
+ this.viewFilters.remove(FILTER_NIGHTLY_BUILDS);
+ }
+ this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, filter);
+ updateFilters();
+}
+
+/*
+ * Filter non milestone builds action run.
+ */
+void filterOldBuilds(boolean filter, boolean updatePreference) {
+ if (filter) {
+ this.viewFilters.add(FILTER_OLD_BUILDS);
+ } else {
+ this.viewFilters.remove(FILTER_OLD_BUILDS);
+ }
+ this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, filter);
+ updateFilters();
+}
+
+/*
+ * Finalize the viewer creation
+ */
+void finalizeViewerCreation() {
+ makeActions();
+ hookContextMenu();
+ contributeToActionBars();
+ restoreState();
+ updateFilters();
+ this.viewer.setInput(getViewSite());
+ this.viewer.addSelectionChangedListener(this);
+}
+
+/* (non-Javadoc)
+ * Method declared on IAdaptable
+ */
+public Object getAdapter(Class adapter) {
+ if (adapter.equals(IPropertySheetPage.class)) {
+ return getPropertySheet();
+ }
+ return super.getAdapter(adapter);
+}
+
+/**
+ * Returns the property sheet.
+ */
+protected IPropertySheetPage getPropertySheet() {
+ if (this.propertyPage == null) {
+ this.propertyPage = new PropertySheetPage();
+ }
+ return this.propertyPage;
+}
+
+/*
+ * Get the sibling view (see subclasses).
+ */
+abstract PerformancesView getSiblingView();
+
+/*
+ * Hook the context menu.
+ */
+void hookContextMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ fillContextMenu(manager);
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(this.viewer.getControl());
+ this.viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, this.viewer);
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
+ */
+public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+ this.viewState = memento;
+}
+
+/*
+ * Init results
+ */
+void initResults() {
+ this.results = PerformanceResultsElement.PERF_RESULTS_MODEL;
+ if (this.results.isInitialized()) {
+ this.dataDir = getSiblingView().dataDir;
+ } else {
+ String localDataDir = this.preferences.get(IPerformancesConstants.PRE_LOCAL_DATA_DIR, null);
+ if (localDataDir != null) {
+ File dir = new File(localDataDir);
+ if (dir.exists() && dir.isDirectory()) {
+ this.dataDir = dir;
+ readLocalFiles();
+ }
+ }
+ }
+}
+
+/*
+ * Make common actions to performance views.
+ */
+void makeActions() {
+
+ // Change data dir action
+ this.changeDataDir = new Action("&Read...") {
+ public void run() {
+ changeDataDir();
+ }
+ };
+ this.changeDataDir.setToolTipText("Change the directory of the local data files");
+// this.changeDataDir.setImageDescriptor(ResultsElement.FOLDER_IMAGE_DESCRIPTOR);
+
+ // Filter baselines action
+ this.filterBaselineBuilds = new Action("&Baselines", IAction.AS_CHECK_BOX) {
+ public void run() {
+ if (isChecked()) {
+ PerformancesView.this.viewFilters.add(FILTER_BASELINE_BUILDS);
+ } else {
+ PerformancesView.this.viewFilters.remove(FILTER_BASELINE_BUILDS);
+ }
+ updateFilters();
+ }
+ };
+ this.filterBaselineBuilds.setToolTipText("Filter baseline builds");
+
+ // Filter baselines action
+ this.filterNightlyBuilds = new Action("&Nightly", IAction.AS_CHECK_BOX) {
+ public void run() {
+ filterNightlyBuilds(isChecked(), true/*update preference*/);
+ }
+ };
+ this.filterNightlyBuilds.setToolTipText("Filter nightly builds");
+
+ // Filter non-important builds action
+ this.filterOldBuilds = new Action("&Old Builds", IAction.AS_CHECK_BOX) {
+ public void run() {
+ filterOldBuilds(isChecked(), true/*update preference*/);
+ }
+ };
+ this.filterOldBuilds.setChecked(false);
+ this.filterOldBuilds.setToolTipText("Filter old builds (i.e. before last milestone) but keep all previous milestones)");
+
+ // Filter non-important builds action
+ this.filterLastBuilds = new Action("&Last Builds", IAction.AS_CHECK_BOX) {
+ public void run() {
+ filterLastBuilds(isChecked(), true/*update preference*/);
+ }
+ };
+ final String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null);
+ this.filterLastBuilds.setChecked(false);
+ if (lastBuild == null) {
+ this.filterLastBuilds.setEnabled(false);
+ } else {
+ this.filterLastBuilds.setToolTipText("Filter last builds (i.e. after "+lastBuild+" build)");
+ }
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
+ */
+public void preferenceChange(PreferenceChangeEvent event) {
+ String propertyName = event.getKey();
+// String newValue = (String) event.getNewValue();
+
+ // Eclipse version change
+ if (propertyName.equals(IPerformancesConstants.PRE_ECLIPSE_VERSION)) {
+// int eclipseVersion = newValue == null ? IPerformancesConstants.DEFAULT_ECLIPSE_VERSION : Integer.parseInt(newValue);
+// String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
+// boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+// DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
+// setTitleToolTip();
+ }
+
+ // Database location change
+ if (propertyName.equals(IPerformancesConstants.PRE_DATABASE_LOCATION)) {
+// boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+// int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+// DB_Results.updateDbConstants(connected, eclipseVersion, newValue);
+// setTitleToolTip();
+ }
+
+ // Database connection
+ if (propertyName.equals(IPerformancesConstants.PRE_DATABASE_CONNECTION)) {
+// boolean connected = newValue == null ? IPerformancesConstants.DEFAULT_DATABASE_CONNECTION : newValue.equals(Boolean.TRUE);
+// int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+// String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
+// DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
+// setTitleToolTip();
+ }
+
+ // Last build
+ if (propertyName.equals(IPerformancesConstants.PRE_LAST_BUILD)) {
+// if (newValue == null || newValue.length() == 0) {
+// this.filterLastBuilds.setEnabled(false);
+// LAST_BUILD = null;
+// } else {
+// this.filterLastBuilds.setEnabled(true);
+// this.filterLastBuilds.setToolTipText("Filter last builds (i.e. after "+newValue+" build)");
+// LAST_BUILD = newValue;
+// }
+ }
+}
+
+/*
+ * Read local files
+ */
+void readLocalFiles() {
+
+ // Create runnable to read local files
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try {
+ monitor.beginTask("Read local files", 1000);
+ PerformancesView.this.results.readLocal(PerformancesView.this.dataDir, monitor, LAST_BUILD);
+ monitor.done();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ };
+
+ // Execute the runnable with progress
+ ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell());
+ try {
+ readProgress.run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ // skip
+ } catch (InterruptedException e) {
+ // skip
+ }
+}
+
+/*
+ * Refresh the entire view by resetting its input.
+ */
+void refreshInput() {
+ this.viewer.setInput(getViewSite());
+ this.viewer.refresh();
+}
+
+/*
+ * Clear view content.
+ */
+void resetInput() {
+ this.results.reset(null);
+ this.viewer.setInput(getViewSite());
+ this.viewer.refresh();
+}
+
+/*
+ * Restore the view state from the memento information.
+ */
+void restoreState() {
+
+ // Filter baselines action state
+ if (this.viewState != null) {
+ Boolean filterBaselinesState = this.viewState.getBoolean(IPerformancesConstants.PRE_FILTER_BASELINE_BUILDS);
+ boolean filterBaselinesValue = filterBaselinesState == null ? false : filterBaselinesState.booleanValue();
+ this.filterBaselineBuilds.setChecked(filterBaselinesValue);
+ if (filterBaselinesValue) {
+ this.viewFilters.add(FILTER_BASELINE_BUILDS);
+ }
+ }
+
+ // Filter nightly builds action
+ boolean checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS);
+ this.filterNightlyBuilds.setChecked(checked);
+ if (checked) {
+ this.viewFilters.add(FILTER_NIGHTLY_BUILDS);
+ }
+
+ // Filter non important builds action state
+ checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS);
+ this.filterOldBuilds.setChecked(checked);
+ if (checked) {
+ this.viewFilters.add(FILTER_OLD_BUILDS);
+ }
+
+ // Filter last builds action state
+ checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_LAST_BUILDS, IPerformancesConstants.DEFAULT_FILTER_LAST_BUILDS);
+ this.filterLastBuilds.setChecked(checked);
+ if (checked) {
+ this.viewFilters.add(FILTER_LAST_BUILDS);
+ }
+}
+
+public void saveState(IMemento memento) {
+ super.saveState(memento);
+ memento.putBoolean(IPerformancesConstants.PRE_FILTER_BASELINE_BUILDS, this.filterBaselineBuilds.isChecked());
+ try {
+ this.preferences.flush();
+ } catch (BackingStoreException e) {
+ // ignore
+ }
+}
+
+/*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+public void selectionChanged(SelectionChangedEvent event) {
+ if (this.propertyPage != null) {
+ this.propertyPage.selectionChanged(this, event.getSelection());
+ }
+}
+
+/**
+ * Passing the focus request to the viewer's control.
+ */
+public void setFocus() {
+ this.viewer.getControl().setFocus();
+}
+
+/*
+ * Set the view tooltip to reflect the DB connection kind.
+ */
+void setTitleToolTip() {
+ String title = DB_Results.getDbTitle();
+ if (title == null) {
+ // DB is not connected
+ int version = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+ title = "Eclipse v" + version + " - DB not connected";
+ }
+ setTitleToolTip(title);
+}
+
+/*
+ * Set/unset the database connection.
+ *
+void toogleDbConnection() {
+
+ // Toogle DB connection and store new state
+ boolean dbConnected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
+ DB_Results.DB_CONNECTION = !dbConnected;
+ getSiblingView().dbConnection.setChecked(DB_Results.DB_CONNECTION);
+ this.preferences.putBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, DB_Results.DB_CONNECTION);
+
+ // First close DB connection
+ if (!DB_Results.DB_CONNECTION) {
+ DB_Results.shutdown();
+ }
+
+ // Read local files if any
+ if (this.dataDir != null) {
+ readLocalFiles();
+ }
+
+ // Refresh views
+ refreshInput();
+ getSiblingView().refreshInput();
+}
+*/
+
+/*
+ * Update the filters from the stored list and apply them to the view.
+ */
+final void updateFilters() {
+ ViewerFilter[] filters = new ViewerFilter[this.viewFilters.size()];
+ this.viewFilters.toArray(filters);
+ this.viewer.setFilters(filters);
+}
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/filter_ps.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/filter_ps.gif
new file mode 100644
index 0000000..a4c9e60
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/filter_ps.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/help.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/help.gif
new file mode 100644
index 0000000..ae2c4c0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/help.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/icallout_obj.gif b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/icallout_obj.gif
new file mode 100644
index 0000000..f52d86a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/ui/icallout_obj.gif
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/IPerformancesConstants.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/IPerformancesConstants.java
new file mode 100644
index 0000000..f04d5b8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/IPerformancesConstants.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.utils;
+
+/**
+ * Interface to define all constants used for performances.
+ */
+public interface IPerformancesConstants {
+ public static final String PLUGIN_ID = "org.eclipse.test.performance.ui"; //$NON-NLS-1$
+
+ public static final String PREFIX = PLUGIN_ID + "."; //$NON-NLS-1$
+
+ // State constants
+ public static final String PRE_FILTER_BASELINE_BUILDS = PREFIX + "filter.baseline.builds"; //$NON-NLS-1$
+ public static final String PRE_FULL_LINE_SELECTION = PREFIX + "full.line.selection"; //$NON-NLS-1$
+ public static final String PRE_WRITE_RESULTS_DIR = PREFIX + "write.results.dir"; //$NON-NLS-1$
+
+ // Preference constants
+ public static final String PRE_ECLIPSE_VERSION = PREFIX + "eclipse.version"; //$NON-NLS-1$
+ public static final String PRE_DATABASE_CONNECTION = PREFIX + "database.connection"; //$NON-NLS-1$
+ public static final String PRE_DATABASE_LOCAL = PREFIX + "local"; //$NON-NLS-1$
+ public static final String PRE_DATABASE_LOCATION = PREFIX + "database.location"; //$NON-NLS-1$
+ public static final String PRE_LOCAL_DATA_DIR = PREFIX + "local.data.dir"; //$NON-NLS-1$
+ public static final String PRE_RESULTS_GENERATION_DIR = PREFIX + "results.generation.dir"; //$NON-NLS-1$
+ public static final String PRE_CONFIG_DESCRIPTOR_NAME = PREFIX + "config.descriptor.name"; //$NON-NLS-1$
+ public static final String PRE_CONFIG_DESCRIPTOR_DESCRIPTION = PREFIX + "config.descriptor.description"; //$NON-NLS-1$
+ public static final String PRE_LAST_BUILD = PREFIX + "last.build"; //$NON-NLS-1$
+ public static final String PRE_DEFAULT_DIMENSION = PREFIX + "default.dimension"; //$NON-NLS-1$
+ public static final String PRE_RESULTS_DIMENSION = PREFIX + "results.dimension"; //$NON-NLS-1$
+ public static final String PRE_MILESTONE_BUILDS = PREFIX + "milestone.builds"; //$NON-NLS-1$
+ public static final String PRE_STATUS_COMMENT_PREFIX = PREFIX + "status.comment"; //$NON-NLS-1$
+ public static final String PRE_FILTER_ADVANCED_SCENARIOS = PREFIX + "filter.non.fingerprints.scenarios"; //$NON-NLS-1$
+ public static final String PRE_FILTER_OLD_BUILDS = PREFIX + "filter.non.milestones.builds"; //$NON-NLS-1$
+ public static final String PRE_FILTER_NIGHTLY_BUILDS = PREFIX + "filter.nightly.builds"; //$NON-NLS-1$
+ public static final String PRE_FILTER_LAST_BUILDS = PREFIX + "filter.last.builds"; //$NON-NLS-1$
+
+ // Other constants
+ public static final int ECLIPSE_MAINTENANCE_VERSION = 35;
+ public static final int ECLIPSE_DEVELOPMENT_VERSION = 36;
+
+ // Default values
+ public static final String DATABASE_NAME_PREFIX = "perfDb";
+ public static final String NETWORK_DATABASE_LOCATION = "net://minsky.ottawa.ibm.com:1528";
+ public static final int DEFAULT_ECLIPSE_VERSION = ECLIPSE_DEVELOPMENT_VERSION;
+ public static final boolean DEFAULT_FILTER_ADVANCED_SCENARIOS = true;
+ public static final boolean DEFAULT_FILTER_OLD_BUILDS = false;
+ public static final boolean DEFAULT_FILTER_LAST_BUILDS = false;
+ public static final boolean DEFAULT_FILTER_NIGHTLY_BUILDS = false;
+ public static final boolean DEFAULT_DATABASE_CONNECTION = false;
+ public static final boolean DEFAULT_DATABASE_LOCAL = false;
+
+ // Status
+ public static final String PRE_WRITE_STATUS = PREFIX + "write.status"; //$NON-NLS-1$
+ public static final int STATUS_BUILDS_NUMBER_MASK= 0x00FF;
+ public static final int DEFAULT_BUILDS_NUMBER = 3;
+ public static final int STATUS_VALUES = 0x0100;
+ public static final int STATUS_ERROR_NONE = 0x0200;
+ public static final int STATUS_ERROR_NOTICEABLE = 0x0400;
+ public static final int STATUS_ERROR_SUSPICIOUS = 0x0600;
+ public static final int STATUS_ERROR_WEIRD = 0x0800;
+ public static final int STATUS_ERROR_INVALID = 0x0A00;
+ public static final int STATUS_ERROR_LEVEL_MASK = 0x0E00;
+ public static final int STATUS_SMALL_VALUE_BUILD = 0x1000;
+ public static final int STATUS_SMALL_VALUE_DELTA = 0x2000;
+ public static final int STATUS_SMALL_VALUE_MASK = 0x3000;
+ public static final int STATUS_STATISTICS_ERRATIC = 0x4000;
+ public static final int STATUS_STATISTICS_UNSTABLE = 0x8000;
+ public static final int STATUS_STATISTICS_MASK = 0xC000;
+ public static final int DEFAULT_WRITE_STATUS = STATUS_ERROR_NONE | DEFAULT_BUILDS_NUMBER;
+
+ // Default milestones nowadays
+ public static final String[] V36_MILESTONES = new String[] {
+ "M1-200908060100",
+ "M2-200909170100",
+ "M3-200910301201",
+ "M4-200912101301",
+ "M5-201001291300",
+ "M6-201003121448",
+ };
+ public static final String[] V35_MILESTONES = new String[] {
+ "M1-200808071402",
+ "M2-200809180100",
+ "M3-200810301917",
+ "M4-200812111908",
+ "M5-200902021535",
+ "M6-200903130100",
+ "M7-200904302300",
+ "RC1-200905151143",
+ "RC2-200905221710",
+ "RC3-200905282000",
+ "RC4-200906051444",
+ "R3_5-200906111540"
+ };
+ /** @deprecated */
+ public static final String[] V34_MILESTONES = new String[] {
+ "M1-200708091105",
+ "M2-200709210919",
+ "M3-200711012000",
+ "M4-200712131700",
+ "M5-200802071530",
+ "M6a-200804091425",
+ "M7-200805020100",
+ "RC1-200805161333",
+ "RC2-200805230100",
+ "RC3-200805301730",
+ "RC4-200806091311",
+ "R3_4-200806172000"
+ };
+ /** @deprecated */
+ public static final String[] V33_MILESTONES = new String[] {
+ "M1-200608101230",
+ "M2-200609220010",
+ "M3-200611021715",
+ "M4-200612141445",
+ "M5-200702091006",
+ "M5eh-200702220951",
+ "M6-200703231616",
+ "M7-200705031400",
+ "RC1-200705171700",
+ "RC2-200705251350",
+ "RC3-200706011539",
+ "RC4-200706081718",
+ "R3_3-200706251500",
+ "R3_3_1-200709211145",
+ "R3_3_2-200802211800"
+ };
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/Util.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/Util.java
new file mode 100644
index 0000000..5199381
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/internal/performance/results/utils/Util.java
@@ -0,0 +1,557 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.internal.performance.results.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+
+/**
+ * Utility methods for statistics. Got from org.eclipse.test.performance
+ * framework
+ */
+public final class Util implements IPerformancesConstants {
+
+ // Percentages
+ public static final NumberFormat PERCENTAGE_FORMAT = NumberFormat.getPercentInstance(Locale.US);
+ static {
+ PERCENTAGE_FORMAT.setMaximumFractionDigits(2);
+ }
+ public static final NumberFormat DOUBLE_FORMAT = NumberFormat.getNumberInstance(Locale.US);
+ static {
+ DOUBLE_FORMAT.setMaximumFractionDigits(2);
+ }
+
+ // Strings
+ public static final String LINE_SEPARATOR = System.getProperty("line.separator");
+
+ // Build prefixes
+ public static final List ALL_BUILD_PREFIXES = new ArrayList(3);
+ static {
+ ALL_BUILD_PREFIXES.add("I");
+ ALL_BUILD_PREFIXES.add("N");
+ ALL_BUILD_PREFIXES.add("M");
+ }
+ public static final List BUILD_PREFIXES = new ArrayList(2);
+ static {
+ BUILD_PREFIXES.add("I");
+ BUILD_PREFIXES.add("N");
+ }
+ public static final List MAINTENANCE_BUILD_PREFIXES = new ArrayList(2);
+ static {
+ MAINTENANCE_BUILD_PREFIXES.add("I");
+ MAINTENANCE_BUILD_PREFIXES.add("M");
+ }
+ public static final List BASELINE_BUILD_PREFIXES = new ArrayList(1);
+ static {
+ BASELINE_BUILD_PREFIXES.add(DB_Results.getDbBaselinePrefix());
+ }
+
+ // Milestones constants
+ private static String[] MILESTONES;
+ public static final BuildDateComparator BUILD_DATE_COMPARATOR = new BuildDateComparator();
+
+static class BuildDateComparator implements Comparator {
+ public int compare(Object o1, Object o2) {
+ String s1 = (String) o1;
+ String s2 = (String) o2;
+ return getBuildDate(s1).compareTo(getBuildDate(s2));
+ }
+}
+
+private static void initMilestones() {
+ String version = DB_Results.getDbVersion();
+
+ // Initialize reference version and database directory
+ char mainVersion = version.charAt(1);
+ char minorVersion = version.charAt(2);
+
+ // Initialize milestones
+ if (mainVersion == '3') {
+ switch (minorVersion) {
+ case '3':
+ case '4':
+ throw new RuntimeException("Version "+mainVersion+'.'+minorVersion+" is no longer supported!");
+ case '5':
+ MILESTONES = V35_MILESTONES;
+ break;
+ case '6':
+ MILESTONES = V36_MILESTONES;
+ break;
+ default:
+ throw new RuntimeException("Version "+mainVersion+'.'+minorVersion+" is not supported yet!");
+ }
+ } else {
+ throw new RuntimeException("Version "+mainVersion+'.'+minorVersion+" is not supported yet!");
+ }
+}
+
+// Static information for time and date
+public static final int ONE_MINUTE = 60000;
+public static final long ONE_HOUR = 3600000L;
+public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmm"); //$NON-NLS-1$
+
+/**
+ * Compute the student t-test values.
+ *
+ * @see "http://en.wikipedia.org/wiki/Student's_t-test"
+ *
+ * @param baselineResults The baseline build
+ * @param buildResults The current build
+ * @return The student t-test value as a double.
+ */
+public static double computeTTest(BuildResults baselineResults, BuildResults buildResults) {
+
+ double ref = baselineResults.getValue();
+ double val = buildResults.getValue();
+
+ double delta = ref - val;
+ long dfRef = baselineResults.getCount() - 1;
+ double sdRef = baselineResults.getDeviation();
+ long dfVal = buildResults.getCount() - 1;
+ double sdVal = buildResults.getDeviation();
+ // TODO if the stdev's are not sufficiently similar, we have to take a
+ // different approach
+
+ if (!Double.isNaN(sdRef) && !Double.isNaN(sdVal) && dfRef > 0 && dfVal > 0) {
+ long df = dfRef + dfVal;
+ double sp_square = (dfRef * sdRef * sdRef + dfVal * sdVal * sdVal) / df;
+
+ double se_diff = Math.sqrt(sp_square * (1.0 / (dfRef + 1) + 1.0 / (dfVal + 1)));
+ double t = Math.abs(delta / se_diff);
+ return t;
+ }
+
+ return -1;
+}
+
+/**
+ * Copy a file to another location.
+ *
+ * @param src the source file.
+ * @param dest the destination.
+ * @return <code>true</code> if the file was successfully copied,
+ * <code>false</code> otherwise.
+ */
+public static boolean copyFile(File src, File dest) {
+
+ try {
+ InputStream in = new FileInputStream(src);
+ OutputStream out = new FileOutputStream(dest);
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ in.close();
+ out.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return false;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Copy a file content to another location.
+ *
+ * @param in the input stream.
+ * @param dest the destination.
+ * @return <code>true</code> if the file was successfully copied,
+ * <code>false</code> otherwise.
+ */
+public static boolean copyStream(InputStream in, File dest) {
+
+ try {
+ OutputStream out = new FileOutputStream(dest);
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ in.close();
+ out.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return false;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Return the build date as yyyyMMddHHmm.
+ *
+ * @param buildName The build name (e.g. I20090806-0100)
+ * @return The date as a string.
+ */
+public static String getBuildDate(String buildName) {
+ return getBuildDate(buildName, DB_Results.getDbBaselinePrefix());
+}
+
+/**
+ * Return the build date as yyyyMMddHHmm.
+ *
+ * @param buildName The build name (e.g. I20090806-0100)
+ * @param baselinePrefix The baseline prefix (e.g. {@link DB_Results#getDbBaselinePrefix()})
+ * @return The date as a string.
+ */
+public static String getBuildDate(String buildName, String baselinePrefix) {
+
+ // Baseline name
+ if (baselinePrefix != null && buildName.startsWith(baselinePrefix)) {
+ int length = buildName.length();
+ return buildName.substring(length-12, length);
+ }
+
+ // Build name
+ char first = buildName.charAt(0);
+ if (first == 'N' || first == 'I' || first == 'M') { // TODO (frederic) should be buildIdPrefixes...
+ return buildName.substring(1, 9)+buildName.substring(10, 14);
+ }
+
+ // Try with date format
+ int length = buildName.length() - 12 /* length of date */;
+ for (int i=0; i<=length; i++) {
+ try {
+ String substring = i == 0 ? buildName : buildName.substring(i);
+ Util.DATE_FORMAT.parse(substring);
+ return substring; // if no exception is raised then the substring has a correct date format => return it
+ } catch(ParseException ex) {
+ // skip
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns the date of the milestone corresponding at the given index.
+ *
+ * @param index The index of the milestone
+ * @return The date as a YYYYMMDD-hhmm string.
+ */
+public static String getMilestoneDate(int index) {
+ int length = getMilestonesLength();
+ if (index >= length) return null;
+ int dash = MILESTONES[index].indexOf('-');
+ return MILESTONES[index].substring(dash+1);
+}
+
+/**
+ * Returns the milestone matching the given build name.
+ *
+ * @param buildName The name of the build
+ * @return The milestone as a string (e.g. M1)
+ */
+public static String getMilestone(String buildName) {
+ if (buildName != null && buildName.length() >= 12) {
+ int length = getMilestonesLength();
+ String buildDate = getBuildDate(buildName, DB_Results.getDbBaselinePrefix());
+ for (int i=0; i<length; i++) {
+ int start = MILESTONES[i].indexOf(buildDate);
+ if (start > 0) {
+ return MILESTONES[i];
+ }
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns the name the milestone matching the given build name.
+ *
+ * @param buildName The name of the build
+ * @return The milestone name as a string (e.g. M1)
+ */
+public static String getMilestoneName(String buildName) {
+ if (buildName != null && buildName.length() >= 12) {
+ int length = getMilestonesLength();
+ String buildDate = getBuildDate(buildName, DB_Results.getDbBaselinePrefix());
+ for (int i=0; i<length; i++) {
+ int start = MILESTONES[i].indexOf(buildDate);
+ if (start > 0) {
+ return MILESTONES[i].substring(0, start - 1);
+ }
+ }
+ }
+ return null;
+}
+
+/**
+ * Returns whether the given build name is a milestone or not.
+ *
+ * @param buildName The build name
+ * @return <code>true</code> if the build name matches a milestone one,
+ * <code>false</code> otherwise.
+ */
+public static boolean isMilestone(String buildName) {
+ return getMilestoneName(buildName) != null;
+}
+
+/**
+ * Returns the name of the milestone which run after the given build name
+ * or <code>null</code> if there's no milestone since the build has run.
+ *
+ * @param buildName The build name
+ * @return <code>true</code> if the build name matches a milestone one,
+ * <code>false</code> otherwise.
+ */
+public static String getNextMilestone(String buildName) {
+ int length = getMilestonesLength();
+ String buildDate = getBuildDate(buildName);
+ for (int i=0; i<length; i++) {
+ String milestoneDate = MILESTONES[i].substring(MILESTONES[i].indexOf('-')+1);
+ if (milestoneDate.compareTo(buildDate) > 0) {
+ return milestoneDate;
+ }
+ }
+ return null;
+}
+
+/**
+ * Return the number of milestones.
+ *
+ * @return The number as an int
+ */
+public static int getMilestonesLength() {
+ if (MILESTONES == null) initMilestones();
+ int length = MILESTONES.length;
+ return length;
+}
+
+/**
+ * @deprecated
+ */
+public static boolean matchPattern(String name, String pattern) {
+ if (pattern.equals("*")) return true; //$NON-NLS-1$
+ if (pattern.indexOf('*') < 0 && pattern.indexOf('?') < 0) {
+ pattern += "*"; //$NON-NLS-1$
+ }
+ StringTokenizer tokenizer = new StringTokenizer(pattern, "*?", true); //$NON-NLS-1$
+ int start = 0;
+ String previous = ""; //$NON-NLS-1$
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (!token.equals("*") && !token.equals("?")) { //$NON-NLS-1$ //$NON-NLS-2$
+ if (previous.equals("*")) { //$NON-NLS-1$
+ int idx = name.substring(start).indexOf(token);
+ if (idx < 0) return false;
+ start += idx;
+ } else {
+ if (previous.equals("?")) start++; //$NON-NLS-1$
+ if (!name.substring(start).startsWith(token)) return false;
+ }
+ start += token.length();
+ }
+ previous = token;
+ }
+ if (previous.equals("*")) { //$NON-NLS-1$
+ return true;
+ } else if (previous.equals("?")) { //$NON-NLS-1$
+ return name.length() == start;
+ }
+ return name.endsWith(previous);
+}
+
+/**
+ * @deprecated
+ */
+public static double round(double value) {
+ return Math.round(value * 10000) / 10000.0;
+}
+
+/**
+ * @deprecated
+ */
+public static double round(double value, int precision) {
+ if (precision < 0) {
+ throw new IllegalArgumentException("Should have a precision at least greater than 0!");
+ }
+ if (precision == 0) return (long) Math.floor(value);
+ double factor = 10;
+ int n = 1;
+ while (n++ < precision)
+ factor *= 10;
+ return Math.round(value * factor) / factor;
+}
+
+/**
+ * Returns a string to display the given time as a duration
+ * formatted as "hh:mm:ss".
+ *
+ * @param time The time to format as a long.
+ * @return The formatted string.
+ */
+public static String timeChrono(long time) {
+ if (time < 1000) { // less than 1s
+ return "00:00:00"; //$NON-NLS-1$
+ }
+ StringBuffer buffer = new StringBuffer();
+ int seconds = (int) (time / 1000);
+ if (seconds < 60) {
+ buffer.append("00:00:"); //$NON-NLS-1$
+ if (seconds < 10) buffer.append('0');
+ buffer.append(seconds);
+ } else {
+ int minutes = seconds / 60;
+ if (minutes < 60) {
+ buffer.append("00:"); //$NON-NLS-1$
+ if (minutes < 10) buffer.append('0');
+ buffer.append(minutes);
+ buffer.append(':');
+ seconds = seconds % 60;
+ if (seconds < 10) buffer.append('0');
+ buffer.append(seconds);
+ } else {
+ int hours = minutes / 60;
+ if (hours < 10) buffer.append('0');
+ buffer.append(hours);
+ buffer.append(':');
+ minutes = minutes % 60;
+ if (minutes < 10) buffer.append('0');
+ buffer.append(minutes);
+ buffer.append(':');
+ seconds = seconds % 60;
+ if (seconds < 10) buffer.append('0');
+ buffer.append(seconds);
+ }
+ }
+ return buffer.toString();
+}
+
+/**
+ * Returns a string to display the given time as the hour of the day
+ * formatted as "hh:mm:ss".
+ *
+ * @param time The time to format as a long.
+ * @return The formatted string.
+ */
+public static String timeEnd(long time) {
+ GregorianCalendar calendar = new GregorianCalendar();
+ calendar.add(Calendar.SECOND, (int)(time/1000));
+ Date date = calendar.getTime();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("KK:mm:ss"); //$NON-NLS-1$
+ return dateFormat.format(date);
+}
+
+/**
+ * Returns a string to display the given time as a duration
+ * formatted as:
+ * <ul>
+ * <li>"XXXms" if the duration is less than 0.1s (e.g. "543ms")</li>
+ * <li>"X.YYs" if the duration is less than 1s (e.g. "5.43s")</li>
+ * <li>"XX.Ys" if the duration is less than 1mn (e.g. "54.3s")</li>
+ * <li>"XXmn XXs" if the duration is less than 1h (e.g. "54mn 3s")</li>
+ * <li>"XXh XXmn XXs" if the duration is over than 1h (e.g. "5h 4mn 3s")</li>
+ * </ul>
+ *
+ * @param time The time to format as a long.
+ * @return The formatted string.
+ */
+public static String timeString(long time) {
+ NumberFormat format = NumberFormat.getInstance();
+ format.setMaximumFractionDigits(1);
+ StringBuffer buffer = new StringBuffer();
+ if (time == 0) {
+ // print nothing
+ } if (time < 100) { // less than 0.1s
+ buffer.append(time);
+ buffer.append("ms"); //$NON-NLS-1$
+ } else if (time < 1000) { // less than 1s
+ if ((time%100) != 0) {
+ format.setMaximumFractionDigits(2);
+ }
+ buffer.append(format.format(time/1000.0));
+ buffer.append("s"); //$NON-NLS-1$
+ } else if (time < Util.ONE_MINUTE) { // less than 1mn
+ if ((time%1000) == 0) {
+ buffer.append(time/1000);
+ } else {
+ buffer.append(format.format(time/1000.0));
+ }
+ buffer.append("s"); //$NON-NLS-1$
+ } else if (time < Util.ONE_HOUR) { // less than 1h
+ buffer.append(time/Util.ONE_MINUTE).append("mn "); //$NON-NLS-1$
+ long seconds = time%Util.ONE_MINUTE;
+ buffer.append(seconds/1000);
+ buffer.append("s"); //$NON-NLS-1$
+ } else { // more than 1h
+ long h = time / Util.ONE_HOUR;
+ buffer.append(h).append("h "); //$NON-NLS-1$
+ long m = (time % Util.ONE_HOUR) / Util.ONE_MINUTE;
+ buffer.append(m).append("mn "); //$NON-NLS-1$
+ long seconds = m%Util.ONE_MINUTE;
+ buffer.append(seconds/1000);
+ buffer.append("s"); //$NON-NLS-1$
+ }
+ return buffer.toString();
+}
+
+private Util() {
+ // don't instantiate
+}
+
+/**
+ * Set the milestones.
+ *
+ * @param items The milestones list (e.g. {@link IPerformancesConstants#V35_MILESTONES}).
+ */
+public static void setMilestones(String[] items) {
+ MILESTONES = items;
+}
+
+/**
+ * Init the milestones from preferences
+ *
+ * @param preferences The preferences from which got milestones list
+ */
+public static void initMilestones(IEclipsePreferences preferences) {
+ int eclipseVersion = preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
+ String prefix = IPerformancesConstants.PRE_MILESTONE_BUILDS + "." + eclipseVersion;
+ int index = 0;
+ String milestone = preferences.get(prefix + index, null);
+ String[] milestones = new String[20];
+ while (milestone != null) {
+ milestones[index] = milestone;
+ index++;
+ milestone = preferences.get(prefix + index, null);
+ }
+ int length = milestones.length;
+ if (index < length) {
+ System.arraycopy(milestones, 0, milestones = new String[index], 0, index);
+ }
+ MILESTONES = milestones;
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/BarGraph.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/BarGraph.java
new file mode 100644
index 0000000..438909c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/BarGraph.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+
+public class BarGraph {
+
+ private static final int MARGIN= 5; // margin on all four sides
+ private static final int BARHEIGHT= 8; // height of bar
+ private static final int GAP= 10; // gap between bars
+ private static final int TGAP= 5; // gap between lines and labels
+
+ private static final boolean NO_SCALE= true; //
+
+ // if NO_SCALE is true the following values are used:
+ private static final double RATIO= 0.6; // fraction of width reserved for bar graph; needs tweaking
+ private static final int FROM_END= 20; // a break (//) is shown this far from end of bar
+ private static final int SLANT= 8; // slant of break
+ private static final int GAP2= 5; // width of break
+
+ private StringBuffer fAreaBuffer;
+
+ private static class BarItem {
+
+ String title;
+ double value;
+ String url;
+ String slowdownExpected;
+ boolean significant;
+
+ BarItem(String t, double[] stats, String u, String slow, boolean sig) {
+ this.title= t;
+ this.value= stats[0]==0 ? 0 : -stats[0] * 100;
+ this.url= u;
+ this.slowdownExpected= slow;
+ this.significant= sig;
+ }
+ }
+
+ private String fTitle;
+ private List fItems;
+
+ BarGraph(String title) {
+ this.fTitle= title;
+ this.fItems= new ArrayList();
+ }
+
+ public void addItem(String name, double[] stats, String url, String slow, boolean significant) {
+ this.fItems.add(new BarItem(name, stats, url, slow, significant));
+ }
+
+ public int getHeight() {
+ int n= this.fItems.size();
+ int textHeight= 16;
+ int titleHeight= 0;
+ if (this.fTitle != null)
+ titleHeight= textHeight + GAP;
+ return MARGIN + titleHeight + n * (GAP + BARHEIGHT) + GAP + textHeight + MARGIN;
+ }
+
+ public void paint(Display display, int width, int height, GC gc) {
+
+ NumberFormat nf= NumberFormat.getInstance();
+
+ BarItem[] bars= (BarItem[]) this.fItems.toArray(new BarItem[this.fItems.size()]);
+
+ // draw white background
+ Color bg= display.getSystemColor(SWT.COLOR_WHITE);
+ gc.setBackground(bg);
+ gc.fillRectangle(0, 0, width, height);
+
+ // determine the widths of the bar and the label areas
+ int w;
+ if (NO_SCALE) {
+ // we use a fixed width
+ w= (int) (RATIO * width);
+ } else {
+ // we calculate the max width
+ int maxNameLength= 0;
+ for (int i= 0; i < bars.length; i++) {
+ Point es= gc.stringExtent(bars[i].title);
+ maxNameLength= Math.max(maxNameLength, es.x);
+ }
+ w= width - maxNameLength - TGAP - 2 * MARGIN;
+ }
+
+ Color fg= display.getSystemColor(SWT.COLOR_BLACK);
+
+ int vstart= 0; // start rows here
+ if (this.fTitle != null) {
+ vstart= gc.stringExtent(this.fTitle).y + GAP;
+ gc.drawString(this.fTitle, MARGIN, MARGIN, true); // draw title left aligned
+ }
+
+ int center= MARGIN + w / 2;
+ int w2= w / 2 - gc.stringExtent("-999.9").x - TGAP; // reserve space //$NON-NLS-1$
+
+ // determine maximum of values
+ double max= 0.0;
+ for (int i= 0; i < bars.length; i++)
+ max= Math.max(max, Math.abs(bars[i].value));
+
+ double d;
+ if (NO_SCALE) {
+ d= 25;
+ max= 125;
+ } else {
+ if (max > 400.0) {
+ d= 200;
+ } else if (max > 200.0) {
+ d= 100;
+ } else if (max > 100.0) {
+ d= 50;
+ } else if (max > 50) {
+ d= 25;
+ } else if (max > 25) {
+ d= 10;
+ } else if (max > 10) {
+ d= 5;
+ } else if (max > 5) {
+ d= 2.5;
+ } else {
+ d= 1.0;
+ }
+ }
+
+ // draw striped background
+ int y= MARGIN + vstart;
+ Color lightblue= new Color(display, 237, 243, 254);
+ gc.setBackground(lightblue);
+ for (int i= 0; i < bars.length; i++)
+ if (i % 2 == 0)
+ gc.fillRectangle(0, y + i * (BARHEIGHT + GAP), width, BARHEIGHT + GAP);
+
+ // draw grid
+ int yy= y + bars.length * (BARHEIGHT + GAP);
+ gc.drawLine(center, y, center, yy + TGAP);
+ Color grey= display.getSystemColor(SWT.COLOR_GRAY);
+ for (int i= 1; d * i < max; i++) {
+
+ double xx= d * i;
+ int x= (int) ((xx / max) * w2);
+
+ gc.setForeground(grey);
+ gc.drawLine(center - x, y, center - x, yy + TGAP);
+ gc.drawLine(center + x, y, center + x, yy + TGAP);
+
+ gc.setForeground(fg);
+
+ String s3= nf.format(-xx) + "%"; //$NON-NLS-1$
+ Point es3= gc.stringExtent(s3);
+ gc.drawString(s3, center - x - es3.x / 2, yy + TGAP, true);
+
+ String s4= nf.format(xx) + "%"; //$NON-NLS-1$
+ Point es4= gc.stringExtent(s4);
+ gc.drawString(s4, center + x - es4.x / 2, yy + TGAP, true);
+ }
+ gc.drawLine(0, yy, w, yy);
+
+ nf.setMaximumFractionDigits(1);
+
+ // link color
+ Color blue= display.getSystemColor(SWT.COLOR_BLUE);
+ // draw bars
+// Color green= display.getSystemColor(SWT.COLOR_GREEN);
+// Color red= display.getSystemColor(SWT.COLOR_RED);
+ Color green = new Color(display, 95, 191, 95);
+ Color red = new Color(display, 225, 50, 50);
+ Color gray= display.getSystemColor(SWT.COLOR_GRAY);
+ Color yellow= display.getSystemColor(SWT.COLOR_YELLOW);
+ Color white= display.getSystemColor(SWT.COLOR_WHITE);
+ for (int i= 0; i < bars.length; i++) {
+
+ BarItem bar= bars[i];
+ double delta = bar.value;
+ double orgDelta= delta;
+
+ boolean clamped= false;
+ if (NO_SCALE) {
+ if (delta > max) {
+ delta= max;
+ clamped= true;
+ } else if (delta < -max) {
+ delta= -max;
+ clamped= true;
+ }
+ }
+
+ int barLength= (int) (delta / max * w2);
+
+ if (delta < 0) {
+ if (bar.slowdownExpected != null) {
+ gc.setBackground(gray);
+ } else if (!bar.significant) {
+ gc.setBackground(yellow);
+ } else {
+ gc.setBackground(red);
+ }
+ } else if (!bar.significant) {
+ gc.setBackground(yellow);
+ } else {
+ gc.setBackground(green);
+ }
+
+ if (barLength > 0) {
+ gc.fillRectangle(center, y + (GAP / 2), barLength, BARHEIGHT);
+ gc.drawRectangle(center, y + (GAP / 2), barLength, BARHEIGHT);
+ } else if (barLength < 0) {
+ gc.fillRectangle(center+barLength, y + (GAP / 2), -barLength, BARHEIGHT);
+ gc.drawRectangle(center+barLength, y + (GAP / 2), -barLength, BARHEIGHT);
+ }
+
+ if (clamped) {
+
+ int h2= (BARHEIGHT + GAP);
+ int x= center + barLength;
+ if (barLength > 0)
+ x-= FROM_END;
+ else
+ x+= FROM_END - GAP2 - SLANT;
+ int[] pts= new int[] { x, y + h2 - 1, x + SLANT, y + 1, x + SLANT + GAP2, y + 1, x + GAP2, y + h2 - 1};
+ if (i % 2 == 0)
+ gc.setBackground(lightblue);
+ else
+ gc.setBackground(white);
+ gc.fillPolygon(pts);
+ gc.drawLine(pts[0], pts[1], pts[2], pts[3]);
+ gc.drawLine(pts[4], pts[5], pts[6], pts[7]);
+ }
+
+ String label= nf.format(orgDelta);
+ Point labelExtent= gc.stringExtent(label);
+ int labelxpos= center + barLength;
+ int labelvpos= y + (BARHEIGHT + GAP - labelExtent.y) / 2;
+ if (orgDelta > 0.0) {
+ gc.drawString(label, labelxpos + TGAP, labelvpos, true);
+ } else {
+ gc.drawString(label, labelxpos - TGAP - labelExtent.x, labelvpos, true);
+ }
+
+ int x= MARGIN + w + TGAP;
+ String title= bar.title;
+ boolean hasURL= bar.url != null;
+ Color oldfg= gc.getForeground();
+ if (hasURL) {
+ gc.setForeground(blue);
+ Point e= gc.stringExtent(title);
+ gc.drawLine(x, labelvpos + e.y - 1, x + e.x, labelvpos + e.y - 1);
+ }
+ gc.drawString(title, x, labelvpos, true);
+ if (hasURL)
+ gc.setForeground(oldfg);
+
+ int y0= y;
+ y+= BARHEIGHT + GAP;
+
+ if (hasURL) {
+ if (this.fAreaBuffer == null)
+ this.fAreaBuffer= new StringBuffer();
+ this.fAreaBuffer.append(" echo '<area shape=\"RECT\" coords=\"0," + y0 + ',' + width + ',' + y + "\" href=\"" + bar.url + "\">';\n");
+ }
+ }
+
+ lightblue.dispose();
+ red.dispose();
+ green.dispose();
+ }
+
+ public String getAreas() {
+ if (this.fAreaBuffer != null) {
+ String s= this.fAreaBuffer.toString();
+ this.fAreaBuffer= null;
+ return s;
+ }
+ return null;
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrint.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrint.java
new file mode 100644
index 0000000..c9002a3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrint.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.db.PerformanceResults;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+
+/**
+ * Class used to create scenario fingerprint.
+ */
+public class FingerPrint {
+
+private static final int GRAPH_WIDTH = 1000;
+
+ String component;
+ PrintStream stream;
+ File outputDir;
+
+public FingerPrint(String name, PrintStream ps, File outputDir) {
+ if (!name.startsWith("global")) this.component = name;
+ this.stream = ps;
+ this.outputDir = outputDir;
+}
+
+/**
+ * Create and save fingerprints as image and print their reference in the current stream.
+ *
+ * @param performanceResults The performance results used to print the fingerprints
+ */
+public void print(final PerformanceResults performanceResults) {
+ String buildName = performanceResults.getName();
+
+ // Compute fingerprint output file name prefix
+ int currentUnderscoreIndex = buildName.indexOf('_');
+ if (currentUnderscoreIndex != -1){
+ buildName = buildName.substring(0, currentUnderscoreIndex);
+ }
+ StringBuffer buffer = new StringBuffer("FP_");
+ if (this.component != null) {
+ buffer.append(this.component);
+ buffer.append('_');
+ }
+ buffer.append(DB_Results.getDbBaselineRefVersion());
+ buffer.append('_');
+ buffer.append(buildName);
+ String filePrefix = buffer.toString();
+
+ // Print the legend
+ this.stream.print("The following fingerprints show results for the most representative tests of the ");
+ if (this.component == null) {
+ this.stream.print("current build.<br>\n");
+ } else {
+ this.stream.print(this.component);
+ this.stream.print(" component.<br>\n");
+ }
+ this.stream.print("<table border=\"0\">\n");
+ this.stream.print("<tr><td valign=\"top\">Select which kind of scale you want to use:</td>\n");
+ this.stream.print("<td valign=\"top\">\n");
+ this.stream.print(" <form>\n");
+ this.stream.print(" <select onChange=\"toggleFingerprints();\">\n");
+ this.stream.print(" <option>percentage</option>\n");
+ this.stream.print(" <option>time (linear)</option>\n");
+ this.stream.print(" <option>time (log)</option>\n");
+ this.stream.print(" </select>\n");
+ this.stream.print(" </form>\n");
+ this.stream.print("</td>\n");
+// this.stream.print("<td valign=\"top\">\n");
+// this.stream.print("<a href=\"help.html\"><img hspace=\"10\" border=\"0\" src=\""+Utils.LIGHT+"\" title=\"Some tips on fingerprints\"/></a>\n");
+// this.stream.print("</td></tr></table>\n");
+ this.stream.print("</tr></table>\n");
+ this.stream.print("<img hspace=\"10\" border=\"0\" src=\""+Utils.LIGHT+"\"><a href=\""+Utils.HELP+"\">Help on fingerprints</a>\n");
+
+ // Print script to reset dropdown list selection
+ this.stream.print("<script type=\"text/javascript\">\n");
+ this.stream.print(" setFingerprintsType();\n");
+ this.stream.print("</script>\n");
+
+ // Create each fingerprint and save it
+ String[] configNames = performanceResults.getConfigNames(false/* not sorted*/);
+ String[] configBoxes = performanceResults.getConfigBoxes(false/* not sorted*/);
+ int length = configNames.length;
+ for (int c=0; c<length; c++) {
+ String configName = configNames[c];
+ List scenarios = performanceResults.getComponentSummaryScenarios(this.component, configName);
+ if (scenarios == null) continue;
+
+ // Create BarGraph
+ // TODO use FingerPrintGraph instead
+ BarGraph barGraph = null;
+ List allResults = new ArrayList();
+ String defaultDimName = DB_Results.getDefaultDimension().getName();
+ for (int i=0, size=scenarios.size(); i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.get(i);
+ ConfigResults configResults = scenarioResults.getConfigResults(configName);
+ if (configResults == null || !configResults.isValid()) continue;
+ double[] results = configResults.getCurrentBuildDeltaInfo();
+ double percent = -results[0] * 100.0;
+ if (results != null && Math.abs(percent) < 200) {
+ String name = scenarioResults.getLabel() + " (" + defaultDimName + ")";
+ if (!configResults.getCurrentBuildName().equals(buildName)) {
+ continue; // the test didn't run on last build, skip it
+ }
+ if (!configResults.isBaselined()) {
+ name = "*" + name + " (" + configResults.getBaselineBuildName() + ")";
+ }
+ if (barGraph == null) {
+ barGraph = new BarGraph(null);
+ }
+ barGraph.addItem(name,
+ results,
+ configName + "/" + scenarioResults.getFileName() + ".html",
+ configResults.getCurrentBuildResults().getComment(),
+ (Utils.confidenceLevel(results) & Utils.ERR) == 0);
+
+ // add results
+ allResults.add(configResults);
+ }
+ }
+ if (barGraph == null) continue;
+
+ // Save image file
+ String fileName = filePrefix + '.' + configName ;
+ File outputFile = new File(this.outputDir, fileName+".gif");
+ save(barGraph, outputFile);
+
+ // Print image file reference in stream
+ String boxName = configBoxes[c];
+ if (outputFile.exists()) {
+ String areas = barGraph.getAreas();
+ if (areas == null) areas = "";
+ this.stream.print("<h4>");
+ this.stream.print(boxName);
+ this.stream.print("</h4>\n");
+ this.stream.print("<?php\n");
+ this.stream.print(" $type=$_SERVER['QUERY_STRING'];\n");
+ this.stream.print(" if ($type==\"\" || $type==\"fp_type=0\") {\n");
+ this.stream.print(" echo '<img src=\"");
+ this.stream.print(fileName);
+ this.stream.print(".gif\" usemap=\"#");
+ this.stream.print(fileName);
+ this.stream.print("\" name=\"");
+ this.stream.print(configName);
+ this.stream.print("\">';\n");
+ this.stream.print(" echo '<map name=\"");
+ this.stream.print(fileName);
+ this.stream.print("\">';\n");
+ this.stream.print(areas);
+ this.stream.print(" echo '</map>';\n");
+ this.stream.print(" }\n");
+ } else {
+ this.stream.print("<br><br>There is no fingerprint for ");
+ this.stream.print(boxName);
+ this.stream.print("<br><br>\n");
+ }
+
+ // Create, paint and print the time bars graph
+ FingerPrintGraph graph = new FingerPrintGraph(this.outputDir, fileName, GRAPH_WIDTH, allResults);
+ graph.paint(this.stream);
+ this.stream.print("?>\n");
+ }
+}
+
+/*
+ * Save the computed bar graph.
+ */
+private void save(BarGraph barGraph, File outputFile) {
+
+ // Create and paint image
+ Display display = Display.getDefault();
+ int height = barGraph.getHeight();
+ Image image = new Image(display, GRAPH_WIDTH, height);
+ GC gc = new GC(image);
+ barGraph.paint(display, GRAPH_WIDTH, height, gc);
+ gc.dispose();
+
+ saveImage(outputFile, image);
+}
+
+/**
+ * @param outputFile
+ * @param image
+ */
+private void saveImage(File outputFile, Image image) {
+ // Save image
+ ImageData data = Utils.downSample(image);
+ ImageLoader imageLoader = new ImageLoader();
+ imageLoader.data = new ImageData[] { data };
+
+ OutputStream out = null;
+ try {
+ out = new BufferedOutputStream(new FileOutputStream(outputFile));
+ imageLoader.save(out, SWT.IMAGE_GIF);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ image.dispose();
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e1) {
+ // silently ignored
+ }
+ }
+ }
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrintGraph.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrintGraph.java
new file mode 100644
index 0000000..7fec6d6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/FingerPrintGraph.java
@@ -0,0 +1,672 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Resource;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Abstract class to build graph with bars
+ */
+public class FingerPrintGraph {
+
+ // Sizes
+ static final int MARGIN= 5; // margin on all four sides
+ static final int BAR_HEIGHT= 6; // height of bar
+ static final int GAP= 10; // gap between bars
+ static final int TGAP= 5; // gap between lines and labels
+ static final int LINE_HEIGHT = 2*BAR_HEIGHT + GAP;
+
+ // fraction of width reserved for bar graph
+ static final double RATIO= 0.6;
+
+ // Formatting constants
+ static final NumberFormat NUMBER_FORMAT;
+ static {
+ NUMBER_FORMAT = NumberFormat.getInstance();
+ NUMBER_FORMAT.setMaximumFractionDigits(1);
+ }
+
+ // Graphic constants
+ static final Display DEFAULT_DISPLAY = Display.getDefault();
+ static final Color BLACK= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLACK);
+ static final Color BLUE= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLUE);
+ static final Color GREEN= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GREEN);
+ static final Color RED = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_RED);
+ static final Color GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GRAY);
+ static final Color DARK_GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_DARK_GRAY);
+ static final Color YELLOW = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_YELLOW);
+ static final Color WHITE = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_WHITE);
+
+ // Bar graph kinds
+ static final int NO_TIME = 0; // i.e. percentage
+ static final int TIME_LINEAR = 1;
+ static final int TIME_LOG = 2;
+ static final int[] SUPPORTED_GRAPHS = {
+// NO_TIME,
+ TIME_LINEAR,
+ TIME_LOG,
+ };
+
+ // Graphic fields
+ GC gc;
+ Image image;
+ int imageWidth;
+ int imageHeight;
+ int graphWidth;
+ int graphHeight;
+ Map resources = new HashMap();
+
+ // Data fields
+ int count = 0;
+ ConfigResults[] results = new ConfigResults[10];
+ BarGraphArea[] areas;
+
+ // Values
+ double maxValue = 0.0;
+ double minValue = Double.MAX_VALUE;
+
+ // File info
+ File outputDir;
+ String imageName;
+ private final String defaultDimName = DB_Results.getDefaultDimension().getName();
+
+ /*
+ * Member class defining a bar graph area.
+ * This area applies to a configuration results and is made of several zones.
+ */
+ class BarGraphArea {
+ List zones;
+ private ConfigResults configResults;
+
+ /*
+ * Member class defining a zone inside a bar graph area.
+ * Typically made of a rectangle and an associated text used as tooltip.
+ */
+ class AreaZone {
+ Rectangle zone;
+ String title;
+
+ AreaZone(Rectangle zone, String tooltip) {
+ super();
+ this.zone = zone;
+ this.title = tooltip;
+ }
+
+ void print(String url, PrintStream stream) {
+ stream.print(" echo '<area shape=\"RECT\"");
+ if (this.title != null) {
+ stream.print(" title=\""+this.title+"\"");
+ }
+ stream.print("coords=\"");
+ stream.print(this.zone.x);
+ stream.print(',');
+ stream.print(this.zone.y);
+ stream.print(',');
+ stream.print(this.zone.x+this.zone.width);
+ stream.print(',');
+ stream.print(this.zone.y+this.zone.height);
+ stream.print('"');
+ if (url != null) {
+ stream.print(" href=\"");
+ stream.print(url);
+ stream.print('"');
+ }
+ stream.print(">';\n");
+ }
+ }
+
+ BarGraphArea(ConfigResults results) {
+ this.configResults = results;
+ this.zones = new ArrayList();
+ }
+
+ void print(PrintStream stream) {
+ String url = this.configResults.getName() + "/" + ((ScenarioResults) this.configResults.getParent()).getFileName() + ".html";
+ int size = this.zones.size();
+ for (int i=0; i<size; i++) {
+ AreaZone zone = (AreaZone) this.zones.get(i);
+ zone.print(url, stream);
+ }
+ }
+
+ void addArea(Rectangle rec, String tooltip) {
+ AreaZone zone = new AreaZone(rec, tooltip);
+ this.zones.add(zone);
+ }
+
+ }
+
+
+FingerPrintGraph(File dir, String fileName, int width, List results) {
+ super();
+ this.imageWidth = width;
+ this.count = results.size();
+ this.results = new ConfigResults[this.count];
+ results.toArray(this.results);
+ this.outputDir = dir;
+ this.imageName = fileName;
+}
+
+/**
+ */
+void drawBars(int kind) {
+
+ // Get/Set graphical resources
+ Font italicFont = (Font) this.resources.get("italicFont");
+ if (italicFont == null) {
+ String fontDataName = this.gc.getFont().getFontData()[0].toString();
+ FontData fdItalic = new FontData(fontDataName);
+ fdItalic.setStyle(SWT.ITALIC);
+ italicFont = new Font(DEFAULT_DISPLAY, fdItalic);
+ this.resources.put("italicFont", italicFont);
+ }
+ Color blueref = (Color) this.resources.get("blueref");
+ if (blueref == null) {
+ blueref = new Color(DEFAULT_DISPLAY, 200, 200, 255);
+ this.resources.put("blueref", blueref);
+ }
+ Color lightyellow= (Color) this.resources.get("lightyellow");
+ if (lightyellow == null) {
+ lightyellow = new Color(DEFAULT_DISPLAY, 255, 255, 160);
+ this.resources.put("lightyellow", lightyellow);
+ }
+ Color darkyellow= (Color) this.resources.get("darkyellow");
+ if (darkyellow == null) {
+ darkyellow = new Color(DEFAULT_DISPLAY, 160, 160, 0);
+ this.resources.put("darkyellow", darkyellow);
+ }
+ Color okColor= (Color) this.resources.get("lightgreen");
+ if (okColor == null) {
+ okColor = new Color(DEFAULT_DISPLAY, 95, 191, 95);
+ this.resources.put("lightgreen", okColor);
+ }
+ Color failureColor = (Color) this.resources.get("lightred");
+ if (failureColor == null) {
+ failureColor = new Color(DEFAULT_DISPLAY, 220, 50, 50);
+ this.resources.put("lightred", failureColor);
+ }
+
+ // Build each scenario bar graph
+ this.areas = new BarGraphArea[this.count];
+ double max = kind == TIME_LOG ? Math.log(this.maxValue) : this.maxValue;
+ for (int i=0, y=MARGIN; i < this.count; i++, y+=LINE_HEIGHT) {
+
+ // get builds info
+ ConfigResults configResults = this.results[i];
+ this.areas[i] = new BarGraphArea(configResults);
+ BarGraphArea graphArea = this.areas[i];
+ BuildResults currentBuildResults = configResults.getCurrentBuildResults();
+ double currentValue = currentBuildResults.getValue();
+ double currentError = currentBuildResults.getError();
+ double error = configResults.getError();
+ boolean singleTest = Double.isNaN(error);
+ boolean isSignificant = singleTest || error < Utils.STANDARD_ERROR_THRESHOLD;
+ boolean isCommented = currentBuildResults.getComment() != null;
+ BuildResults baselineBuildResults = configResults.getBaselineBuildResults();
+ double baselineValue = baselineBuildResults.getValue();
+ double baselineError = baselineBuildResults.getError();
+
+ // draw baseline build bar
+ Color whiteref = (Color) this.resources.get("whiteref");
+ if (whiteref == null) {
+ whiteref = new Color(DEFAULT_DISPLAY, 240, 240, 248);
+ this.resources.put("whiteref", whiteref);
+ }
+ this.gc.setBackground(whiteref);
+ double baselineGraphValue = kind == TIME_LOG ? Math.log(baselineValue) : baselineValue;
+ int baselineBarLength= (int) (baselineGraphValue / max * this.graphWidth);
+ int baselineErrorLength= (int) (baselineError / max * this.graphWidth / 2);
+ int labelxpos = MARGIN + baselineBarLength;
+ if (kind == TIME_LOG || baselineErrorLength <= 1) {
+ this.gc.fillRectangle(MARGIN, y + (GAP/2), baselineBarLength, BAR_HEIGHT);
+ Rectangle rec = new Rectangle(MARGIN, y + (GAP/2), baselineBarLength, BAR_HEIGHT);
+ this.gc.drawRectangle(rec);
+ graphArea.addArea(rec, "Time for baseline build "+baselineBuildResults.getName()+": "+Util.timeString((long)baselineValue));
+ } else {
+ int wr = baselineBarLength - baselineErrorLength;
+ Rectangle recValue = new Rectangle(MARGIN, y + (GAP/2), wr, BAR_HEIGHT);
+ this.gc.fillRectangle(recValue);
+ this.gc.setBackground(YELLOW);
+ Rectangle recError = new Rectangle(MARGIN+wr, y + (GAP/2), baselineErrorLength*2, BAR_HEIGHT);
+ this.gc.fillRectangle(recError);
+ Rectangle rec = new Rectangle(MARGIN, y + (GAP/2), baselineBarLength+baselineErrorLength, BAR_HEIGHT);
+ this.gc.drawRectangle(rec);
+ StringBuffer tooltip = new StringBuffer("Time for baseline build ");
+ tooltip.append(baselineBuildResults.getName());
+ tooltip.append(": ");
+ tooltip.append(Util.timeString((long)baselineValue));
+ tooltip.append(" [&#177;");
+ tooltip.append(Util.timeString((long)baselineError));
+ tooltip.append(']');
+ graphArea.addArea(rec, tooltip.toString());
+ labelxpos += baselineErrorLength;
+ }
+
+ // set current build bar color
+ if (baselineValue < currentValue) {
+ if (isCommented) {
+ this.gc.setBackground(GRAY);
+ } else {
+ this.gc.setBackground(failureColor);
+ }
+ } else {
+ this.gc.setBackground(okColor);
+ }
+
+ // draw current build bar
+ double currentGraphValue = kind == TIME_LOG ? Math.log(currentValue) : currentValue;
+ int currentBarLength= (int) (currentGraphValue / max * this.graphWidth);
+ int currentErrorLength= (int) (currentError / max * this.graphWidth / 2);
+ if (kind == TIME_LOG || currentErrorLength <= 1) {
+ this.gc.fillRectangle(MARGIN, y + (GAP/2) + BAR_HEIGHT, currentBarLength, BAR_HEIGHT);
+ Rectangle rec = new Rectangle(MARGIN, y + (GAP/2) + BAR_HEIGHT, currentBarLength, BAR_HEIGHT);
+ this.gc.drawRectangle(rec);
+ String tooltip = "Time for current build "+currentBuildResults.getName()+": "+Util.timeString((long)currentValue);
+ if (isCommented) {
+ tooltip += ". " + currentBuildResults.getComment();
+ }
+ graphArea.addArea(rec, tooltip);
+ if (labelxpos < (MARGIN+currentBarLength)) {
+ labelxpos = MARGIN + currentBarLength;
+ }
+ } else {
+ int wr = currentBarLength - currentErrorLength;
+ Rectangle recValue = new Rectangle(MARGIN, y + (GAP/2) + BAR_HEIGHT, wr, BAR_HEIGHT);
+ this.gc.fillRectangle(recValue);
+ this.gc.setBackground(YELLOW);
+ Rectangle recError = new Rectangle(MARGIN+wr, y + (GAP/2) + BAR_HEIGHT, currentErrorLength*2, BAR_HEIGHT);
+ this.gc.fillRectangle(recError);
+ Rectangle rec = new Rectangle(MARGIN, y + (GAP/2) + BAR_HEIGHT, currentBarLength+currentErrorLength, BAR_HEIGHT);
+ this.gc.drawRectangle(rec);
+ StringBuffer tooltip = new StringBuffer("Time for current build ");
+ tooltip.append(currentBuildResults.getName());
+ tooltip.append(": ");
+ tooltip.append(Util.timeString((long)currentValue));
+ tooltip.append(" [&#177;");
+ tooltip.append(Util.timeString((long)currentError));
+ tooltip.append(']');
+ if (isCommented) {
+ tooltip.append(". ");
+ tooltip.append(currentBuildResults.getComment());
+ }
+ graphArea.addArea(rec, tooltip.toString());
+ if (labelxpos < (MARGIN+currentBarLength+currentErrorLength)) {
+ labelxpos = MARGIN + currentBarLength+currentErrorLength;
+ }
+ }
+
+ // set delta value style and color
+ boolean hasFailure = currentBuildResults.getFailure() != null;
+ if (hasFailure) {
+ if (isCommented) {
+ this.gc.setForeground(DARK_GRAY);
+ } else {
+ this.gc.setForeground(RED);
+ }
+ } else {
+ this.gc.setForeground(BLACK);
+ }
+
+ // draw delta value
+ double delta = -configResults.getDelta();
+ String label = delta > 0 ? "+" : "";
+ label += NUMBER_FORMAT.format(delta*100) + "%";
+ Point labelExtent= this.gc.stringExtent(label);
+ int labelvpos= y + (LINE_HEIGHT - labelExtent.y) / 2;
+ this.gc.drawString(label, labelxpos+TGAP, labelvpos, true);
+ this.gc.setForeground(BLACK);
+ this.gc.setFont(null);
+ int titleStart = (int) (RATIO * this.imageWidth);
+ if (singleTest || !isSignificant) {
+ String deltaTooltip = null;
+ if (singleTest) {
+ deltaTooltip = "This test performed only one iteration; hence its reliability cannot be assessed";
+ } else if (!isSignificant) {
+ deltaTooltip = "This test has a bad reliability: error is "+NUMBER_FORMAT.format(error*100)+"% (> 3%)!";
+ }
+ Image warning = (Image) this.resources.get("warning");
+ int xi = labelxpos+TGAP+labelExtent.x;
+ this.gc.drawImage(warning, xi, labelvpos);
+ ImageData imageData = warning.getImageData();
+ // Set zones
+ // - first one is between end of bar and warning image beginning
+ Rectangle deltaZone = new Rectangle(labelxpos, labelvpos-2, xi-labelxpos, labelExtent.y+4);
+ graphArea.addArea(deltaZone, null);
+ // - second one is the warning image
+ Rectangle warningZone = new Rectangle(xi, labelvpos, imageData.width, imageData.height);
+ graphArea.addArea(warningZone, deltaTooltip);
+ // - last one is between end of the warning image and the scenario title beginning
+ int warningImageEnd = xi+imageData.width;
+ Rectangle emptyZone = new Rectangle(warningImageEnd, labelvpos, titleStart-warningImageEnd, imageData.height);
+ graphArea.addArea(emptyZone, deltaTooltip);
+ } else {
+ // No tooltip => delta zone is between end of bar and the scenario title beginning
+ Rectangle deltaZone = new Rectangle(labelxpos, labelvpos-2, titleStart-labelxpos, labelExtent.y+4);
+ graphArea.addArea(deltaZone, null);
+ }
+
+ // set title style
+ Color oldfg= this.gc.getForeground();
+ this.gc.setForeground(BLUE);
+
+ // draw scenario title
+ int x= titleStart;
+ ScenarioResults scenarioResults = (ScenarioResults) configResults.getParent();
+ String title = scenarioResults.getLabel() + " (" + this.defaultDimName + ")";
+ Point e= this.gc.stringExtent(title);
+ this.gc.drawLine(x, labelvpos + e.y - 1, x + e.x, labelvpos + e.y - 1);
+ this.gc.drawString(title, x, labelvpos, true);
+ this.gc.setForeground(oldfg);
+ this.gc.setFont(null);
+ Rectangle titleZone = new Rectangle(x, labelvpos, e.x, e.y);
+ graphArea.addArea(titleZone, null/*no tooltip*/);
+ if (!configResults.isBaselined()) {
+ Image warning = (Image) this.resources.get("warning");
+ this.gc.drawImage(warning, x+e.x, labelvpos);
+ ImageData imageData = warning.getImageData();
+ Rectangle warningZone = new Rectangle(x+e.x, labelvpos, imageData.width, imageData.height);
+ String titleTooltip = "This test has no baseline result, hence use build "+configResults.getBaselineBuildName()+" for reference!";
+ graphArea.addArea(warningZone, titleTooltip);
+ }
+ }
+}
+
+void drawLinearScale() {
+
+ // Draw scale background
+ drawScaleBackground();
+
+ // Draw scale grid lines
+ int gridValue = 100;
+ int n = (int) (this.maxValue / gridValue);
+ while (n > 10) {
+ switch (gridValue) {
+ case 100:
+ gridValue = 200;
+ break;
+ case 200:
+ gridValue = 500;
+ break;
+ case 500:
+ gridValue = 1000;
+ break;
+ default:
+ gridValue += 1000;
+ break;
+ }
+ n = (int) (this.maxValue / gridValue);
+ }
+ int gridWidth = (int) (this.graphWidth * gridValue / this.maxValue);
+ int x = MARGIN;
+ long value = 0; // TODO use minValue instead
+ while (x < this.graphWidth) {
+
+ // draw line
+ this.gc.setForeground(GRAY);
+ if (x > 0) {
+ this.gc.setLineStyle(SWT.LINE_DOT);
+ this.gc.drawLine(x, MARGIN, x, this.graphHeight + TGAP);
+ }
+
+ // draw value
+ this.gc.setForeground(BLACK);
+ String val= Util.timeString(value);
+ Point point= this.gc.stringExtent(val);
+ this.gc.drawString(val, x - point.x / 2, this.graphHeight + TGAP, true);
+
+ // compute next grid position
+ x += gridWidth;
+ value += gridValue; // value is expressed in seconds
+ }
+ this.gc.setLineStyle(SWT.LINE_SOLID);
+ this.gc.drawLine(0, this.graphHeight, this.graphWidth, this.graphHeight);
+}
+
+void drawLogarithmScale() {
+
+ // Draw scale background
+ drawScaleBackground();
+
+ // Draw scale grid lines
+ double max = Math.log(this.maxValue);
+ int gridValue = 100;
+ int x = MARGIN;
+ long value = 0; // TODO use minValue instead
+ while (x < this.graphWidth) {
+
+ // draw line
+ this.gc.setForeground(GRAY);
+ if (x > MARGIN) {
+ this.gc.setLineStyle(SWT.LINE_DOT);
+ this.gc.drawLine(x, MARGIN, x, this.graphHeight + TGAP);
+ }
+
+ // draw value
+ this.gc.setForeground(BLACK);
+ String str = Util.timeString(value);
+ Point point= this.gc.stringExtent(str);
+ this.gc.drawString(str, x - point.x / 2, this.graphHeight + TGAP, true);
+
+ // compute next grid position
+ value += gridValue;
+ int v = (int) (value / 100);
+ int c = 1;
+ while (v > 10) {
+ v = v / 10;
+ c *= 10;
+ }
+ switch (v) {
+ case 3:
+ gridValue = 200*c;
+ break;
+ case 5:
+ gridValue = 500*c;
+ break;
+ case 10:
+ gridValue = 1000*c;
+ break;
+ }
+ x = MARGIN + (int) (this.graphWidth * Math.log(value) / max);
+ }
+ this.gc.setLineStyle(SWT.LINE_SOLID);
+ this.gc.drawLine(0, this.graphHeight, this.graphWidth, this.graphHeight);
+}
+
+/**
+ * Draw the scale depending on the bar time graph kind.
+ */
+void drawScale(int kind) {
+ switch (kind) {
+ case TIME_LINEAR:
+ drawLinearScale();
+ break;
+ case TIME_LOG:
+ drawLogarithmScale();
+ break;
+ }
+}
+
+private void drawScaleBackground() {
+
+ // Draw striped background
+ Color lightblue = (Color) this.resources.get("lightblue");
+ if (lightblue == null) {
+ lightblue = new Color(DEFAULT_DISPLAY, 237, 243, 254);
+ this.resources.put("lightblue", lightblue);
+ }
+ this.gc.setBackground(lightblue);
+ for (int i= 0; i<this.count; i++) {
+ if (i % 2 == 0) {
+ this.gc.fillRectangle(0, MARGIN + i * LINE_HEIGHT, this.imageWidth, LINE_HEIGHT);
+ }
+ }
+
+ // Draw bottom vertical line
+ int yy= MARGIN + this.count * LINE_HEIGHT;
+ this.gc.drawLine(MARGIN, MARGIN, MARGIN, yy + TGAP);
+}
+
+String getImageName(int kind) {
+ switch (kind) {
+ case TIME_LINEAR:
+ return this.imageName+"_linear";
+ case TIME_LOG:
+ return this.imageName+"_log";
+ }
+ return this.imageName;
+}
+
+void paint(int kind) {
+
+ // Set image
+ this.graphHeight = MARGIN + this.count * LINE_HEIGHT;
+ this.imageHeight = this.graphHeight + GAP + 16 + MARGIN;
+ this.image = new Image(DEFAULT_DISPLAY, this.imageWidth, this.imageHeight);
+ this.gc = new GC(this.image);
+
+ // draw white background
+ this.gc.setBackground(WHITE);
+ this.gc.fillRectangle(0, 0, this.imageWidth, this.imageHeight);
+
+ // Set widths and heights
+ int width= (int) (RATIO * this.imageWidth); // width for results bar
+ this.graphWidth= width - this.gc.stringExtent("-999.9%").x - TGAP - MARGIN; // reserve space //$NON-NLS-1$
+
+ // Get warning image width
+ Image warning = (Image) this.resources.get("warning");
+ if (warning == null) {
+ warning = new Image(this.gc.getDevice(), new File(this.outputDir, Utils.WARNING_OBJ).toString());
+ this.resources.put("warning", warning);
+ }
+ this.graphWidth -= warning.getImageData().width;
+
+ // Set maximum of values
+ this.maxValue = 0.0;
+ this.minValue = Double.MAX_VALUE;
+ for (int i= 0; i<this.count; i++) {
+ BuildResults baselineBuildResults = this.results[i].getBaselineBuildResults();
+ double value = baselineBuildResults.getValue();
+ double error = baselineBuildResults.getError();
+ if (!Double.isNaN(error)) value += Math.abs(error);
+ if (value < 1000000 && value > this.maxValue) {
+ this.maxValue = value;
+ }
+ if (value < this.minValue) {
+ this.minValue = value;
+ }
+ BuildResults currentBuildResults = this.results[i].getCurrentBuildResults();
+ value = currentBuildResults.getValue();
+ error = currentBuildResults.getError();
+ if (!Double.isNaN(error)) value += Math.abs(error);
+ if (value < 1000000 && value > this.maxValue) {
+ this.maxValue = value;
+ }
+ if (value < this.minValue) {
+ this.minValue = value;
+ }
+ }
+ this.minValue = 0; // do not use minValue for now...
+
+ // Draw the scale
+ drawScale(kind);
+
+ // Draw the bars
+ drawBars(kind);
+
+ // Dispose
+ this.gc.dispose();
+}
+
+/**
+ * Create, paint and save all supported bar graphs and add the corresponding
+ * image and map references in the given stream.
+ *
+ * @param stream
+ */
+final public void paint(PrintStream stream) {
+
+ // Paint supported graphs
+ int length = SUPPORTED_GRAPHS.length;
+ for (int i=0; i<length; i++) {
+ int kind = SUPPORTED_GRAPHS[i];
+ paint(kind);
+ save(kind, stream);
+ }
+
+ // Dispose created graphic resources
+ Iterator iterator = this.resources.values().iterator();
+ while (iterator.hasNext()) {
+ Resource resource = (Resource) iterator.next();
+ resource.dispose();
+ }
+ this.resources.clear();
+}
+
+void print(int kind, PrintStream stream) {
+ String imgName = getImageName(kind);
+ stream.print(" if ($type==\"fp_type="+kind+"\") {\n");
+ stream.print(" echo '<img src=\"");
+ stream.print(imgName);
+ stream.print(".gif\" usemap=\"#");
+ stream.print(imgName);
+ stream.print("\" name=\"");
+ stream.print(imgName.substring(imgName.lastIndexOf('.')));
+ stream.print("\">';\n");
+ stream.print(" echo '<map name=\"");
+ stream.print(imgName);
+ stream.print("\">';\n");
+ if (this.areas != null) {
+ for (int i=0; i<this.count; i++) {
+ this.areas[i].print(stream);
+ }
+ }
+ stream.print(" echo '</map>';\n");
+ stream.print(" }\n");
+}
+
+void save(int kind, PrintStream stream) {
+ File file = new File(this.outputDir, getImageName(kind)+".gif");
+ Utils.saveImage(file, this.image);
+ if (file.exists()) {
+ print(kind, stream);
+ } else {
+ stream.print("<br><br>There is no fingerprint for ");
+ stream.print(this.imageName);
+ stream.print(" (kind=");
+ stream.print(kind);
+ stream.print(")<br><br>\n");
+ }
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/GenerateResults.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/GenerateResults.java
new file mode 100644
index 0000000..0a283c6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/GenerateResults.java
@@ -0,0 +1,1050 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.db.PerformanceResults;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.osgi.framework.Bundle;
+
+/**
+ * Main class to generate performance results of all scenarios matching a given pattern
+ * in one HTML page per component.
+ *
+ * @see #printUsage() method to see a detailed parameters usage
+ */
+public class GenerateResults {
+
+/**
+ * Prefix of baseline builds displayed in data graphs.
+ * This field is set using <b>-baseline.prefix</b> argument.
+ * <p>
+ * Example:
+ * <pre>-baseline.prefix 3.2_200606291905</pre>
+ *
+ * @see #currentBuildPrefixes
+ */
+String baselinePrefix = null;
+
+/**
+ * Root directory where all files are generated.
+ * This field is set using <b>-output</b> argument.
+ * <p>
+ * Example:
+ * <pre>-output /releng/results/I20070615-1200/performance</pre>
+ */
+File outputDir;
+
+/**
+ * Root directory where all data are locally stored to speed-up generation.
+ * This field is set using <b>-dataDir</b> argument.
+ * <p>
+ * Example:
+ * <pre>-dataDir /tmp</pre>
+ */
+File dataDir;
+
+/**
+ * Arrays of 2 strings which contains config information: name and description.
+ * This field is set using <b>-config</b> and/or <b>-config.properties</b> arguments.
+ * <p>
+ * Example:
+ * <pre>
+ * -config eclipseperflnx3_R3.3,eclipseperfwin2_R3.3,eclipseperflnx2_R3.3,eclipseperfwin1_R3.3,eclipseperflnx1_R3.3
+ * -config.properties
+ * "eclipseperfwin1_R3.3,Win XP Sun 1.4.2_08 (2 GHz 512 MB);
+ * eclipseperflnx1_R3.3,RHEL 3.0 Sun 1.4.2_08 (2 GHz 512 MB);
+ * eclipseperfwin2_R3.3,Win XP Sun 1.4.2_08 (3 GHz 2 GB);
+ * eclipseperflnx2_R3.3,RHEL 3.0 Sun 1.4.2_08 (3 GHz 2 GB);
+ * eclipseperflnx3_R3.3,RHEL 4.0 Sun 1.4.2_08 (3 GHz 2.5 GB)"
+ * </pre>
+ * Note that:
+ * <ul>
+ * <li>if only <b>-config</b> is set, then configuration name is used for description </li>
+ * <li>if only <b>-config.properties</b> is set, then all configurations defined with this argument are generated
+ * <li>if both arguments are defined, then only configurations defined by <b>-config</b> argument are generated,
+ * <b>-config.properties</b> argument is only used to set the configuration description.</li>
+ * </ul>
+ */
+String[][] configDescriptors;
+
+/**
+ * Scenario pattern used to generate performance results.
+ * This field is set using <b>-scenarioPattern</b> argument.
+ * <p>
+ * Note that this pattern uses SQL conventions, not RegEx ones,
+ * which means that '%' is used to match several consecutive characters
+ * and '_' to match a single character.
+ * <p>
+ * Example:
+ * <pre>-scenario.pattern org.eclipse.%.test</pre>
+ */
+String scenarioPattern;
+
+/**
+ * A list of prefixes for builds displayed in data graphs.
+ * This field is set using <b>-currentPrefix</b> argument.
+ * <p>
+ * Example:
+ * <pre>-current.prefix N, I</pre>
+ *
+ * @see #baselinePrefix
+ */
+List currentBuildPrefixes;
+
+/**
+ * A list of prefixes of builds to highlight in displayed data graphs.
+ * This field is set using <b>-highlight</b> and/or <b>-highlight.latest</b> arguments.
+ * <p>
+ * Example:
+ * <pre>-higlight 3_2</pre>
+ */
+List pointsOfInterest;
+
+/**
+ * Tells whether only fingerprints has to be generated.
+ * This field is set to <code>true</code> if <b>-fingerprints</b> argument is specified.
+ * <p>
+ * Default is <code>false</code> which means that scenario data
+ * will also be generated.
+ *
+ * @see #genData
+ * @see #genAll
+ */
+boolean genFingerPrints = false;
+
+/**
+ * Tells whether only fingerprints has to be generated.
+ * This field is set to <code>true</code> if <b>-data</b> argument is specified.
+ * <p>
+ * Default is <code>false</code> which means that fingerprints
+ * will also be generated.
+ *
+ * @see #genFingerPrints
+ * @see #genAll
+ */
+boolean genData = false;
+
+/**
+ * Tells whether only fingerprints has to be generated.
+ * This field is set to <code>false</code>
+ * if <b>-fingerprints</b> or <b>-data</b> argument is specified.
+ * <p>
+ * Default is <code>true</code> which means that scenario data
+ * will also be generated.
+ *
+ * @see #genData
+ * @see #genFingerPrints
+ */
+boolean genAll = true;
+
+/**
+ * Tells whether information should be displayed in the console while generating.
+ * This field is set to <code>true</code> if <b>-print</b> argument is specified.
+ * <p>
+ * Default is <code>false</code> which means that nothing is print during the generation.
+ */
+PrintStream printStream = null;
+
+/**
+ * Tells what should be the failure percentage threshold.
+ * <p>
+ * Default is 10%.
+ */
+int failure_threshold = 10; // PerformanceTestPlugin.getDBLocation().startsWith("net://");
+
+PerformanceResults performanceResults;
+
+public GenerateResults() {
+}
+
+public GenerateResults(PerformanceResults results, String current, String baseline, boolean fingerprints, File data, File output) {
+ this.dataDir = data;
+ this.outputDir = output;
+ this.genFingerPrints = fingerprints;
+ this.genAll = !fingerprints;
+ this.performanceResults = results;
+ this.printStream = System.out;
+ setDefaults(current, baseline);
+}
+
+/*
+ * Parse the command arguments and create corresponding performance
+ * results object.
+ */
+private void parse(String[] args) {
+ StringBuffer buffer = new StringBuffer("Parameters used to generate performance results (");
+ buffer.append(new SimpleDateFormat().format(new Date(System.currentTimeMillis())));
+ buffer.append("):\n");
+ int i = 0;
+ int argsLength = args.length;
+ if (argsLength == 0) {
+ printUsage();
+ }
+
+ String currentBuildId = null;
+ String baseline = null;
+ String jvm = null;
+ this.configDescriptors = null;
+
+ while (i < argsLength) {
+ String arg = args[i];
+ if (!arg.startsWith("-")) {
+ i++;
+ continue;
+ }
+ if (argsLength == i + 1 && i != argsLength - 1) {
+ System.out.println("Missing value for last parameter");
+ printUsage();
+ }
+ if (arg.equals("-baseline")) {
+ baseline = args[i + 1];
+ if (baseline.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" -baseline = "+baseline+'\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-baseline.prefix")) {
+ this.baselinePrefix = args[i + 1];
+ if (this.baselinePrefix.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ").append(this.baselinePrefix).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-current.prefix")) {
+ String idPrefixList = args[i + 1];
+ if (idPrefixList.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ");
+ String[] ids = idPrefixList.split(",");
+ this.currentBuildPrefixes = new ArrayList();
+ for (int j = 0; j < ids.length; j++) {
+ this.currentBuildPrefixes.add(ids[j]);
+ buffer.append(ids[j]);
+ }
+ buffer.append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-highlight") || arg.equals("-highlight.latest")) {
+ if (args[i + 1].startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ");
+ String[] ids = args[i + 1].split(",");
+ this.pointsOfInterest = new ArrayList();
+ for (int j = 0; j < ids.length; j++) {
+ this.pointsOfInterest.add(ids[j]);
+ buffer.append(ids[j]);
+ }
+ buffer.append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-current")) {
+ currentBuildId = args[i + 1];
+ if (currentBuildId.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ").append(currentBuildId).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-jvm")) {
+ jvm = args[i + 1];
+ if (jvm.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ").append(jvm).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-output")) {
+ String dir = args[++i];
+ if (dir.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ this.outputDir = new File(dir);
+ if (!this.outputDir.exists() && !this.outputDir.mkdirs()) {
+ System.err.println("Cannot create directory "+dir+" to write results in!");
+ System.exit(2);
+ }
+ buffer.append(" ").append(arg).append(" = ").append(dir).append('\n');
+ continue;
+ }
+ if (arg.equals("-dataDir")) {
+ String dir = args[++i];
+ if (dir.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ this.dataDir = new File(dir);
+ if (!this.dataDir.exists() && !this.dataDir.mkdirs()) {
+ System.err.println("Cannot create directory "+dir+" to save data locally!");
+ System.exit(2);
+ }
+ buffer.append(" ").append(arg).append(" = ").append(dir).append('\n');
+ continue;
+ }
+ if (arg.equals("-config")) {
+ String configs = args[i + 1];
+ if (configs.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ String[] names = configs.split(",");
+ int length = names.length;
+ buffer.append(" ").append(arg).append(" = ");
+ for (int j=0; j<length; j++) {
+ if (j>0) buffer.append(',');
+ buffer.append(names[j]);
+ }
+ if (this.configDescriptors == null) {
+ this.configDescriptors = new String[length][2];
+ for (int j=0; j<length; j++) {
+ this.configDescriptors[j][0] = names[j];
+ this.configDescriptors[j][1] = names[j];
+ }
+ } else {
+ int confLength = this.configDescriptors[0].length;
+ int newLength = confLength;
+ mainLoop: for (int j=0; j<confLength; j++) {
+ for (int k=0; k<length; k++) {
+ if (this.configDescriptors[j][0].equals(names[k])) {
+ continue mainLoop;
+ }
+ }
+ this.configDescriptors[j][0] = null;
+ this.configDescriptors[j][1] = null;
+ newLength--;
+ }
+ if (newLength < confLength) {
+ String[][] newDescriptors = new String[newLength][2];
+ for (int j=0, c=0; j<newLength; j++) {
+ if (this.configDescriptors[c] != null) {
+ newDescriptors[j][0] = this.configDescriptors[c][0];
+ newDescriptors[j][1] = this.configDescriptors[c][1];
+ } else {
+ c++;
+ }
+ }
+ this.configDescriptors = newDescriptors;
+ }
+ }
+ buffer.append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-config.properties")) {
+ String configProperties = args[i + 1];
+ if (configProperties.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ if (this.configDescriptors == null) {
+ System.out.println("Missing -config parameter");
+ printUsage();
+ }
+ int length = this.configDescriptors.length;
+ StringTokenizer tokenizer = new StringTokenizer(configProperties, ";");
+ buffer.append('\t').append(arg).append(" = '").append(configProperties).append("' splitted in ").append(length).append(" configs:");
+ while (tokenizer.hasMoreTokens()) {
+ String labelDescriptor = tokenizer.nextToken();
+ String[] elements = labelDescriptor.trim().split(",");
+ for (int j=0; j<length; j++) {
+ if (elements[0].equals(this.configDescriptors[j][0])) {
+ this.configDescriptors[j][1] = elements[1];
+ buffer.append("\n\t\t+ ");
+ buffer.append(elements[0]);
+ buffer.append(" -> ");
+ buffer.append(elements[1]);
+ }
+ }
+ }
+ buffer.append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-scenario.filter") || arg.equals("-scenario.pattern")) {
+ this.scenarioPattern= args[i + 1];
+ if (this.scenarioPattern.startsWith("-")) {
+ System.out.println("Missing value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ").append(this.scenarioPattern).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-fingerprints")) {
+ this.genFingerPrints = true;
+ this.genAll = false;
+ buffer.append(" ").append(arg).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-data")) {
+ this.genData = true;
+ this.genAll = false;
+ buffer.append(" ").append(arg).append('\n');
+ i++;
+ continue;
+ }
+ if (arg.equals("-print")) {
+ this.printStream = System.out; // default is to print to console
+ buffer.append(" ").append(arg);
+ i++;
+ String printFile = i==argsLength ? null : args[i];
+ if (printFile==null ||printFile.startsWith("-")) {
+ buffer.append(" (to the console)").append('\n');
+ } else {
+ try {
+ this.printStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(printFile)));
+ }
+ catch (FileNotFoundException fnfe) {
+ // use the console if the output file cannot be created
+ }
+ buffer.append(" (to file: ").append(printFile).append(")\n");
+ }
+ continue;
+ }
+ if (arg.equals("-failure.threshold")) {
+ String value = args[i + 1];
+ try {
+ this.failure_threshold = Integer.parseInt(value);
+ if (this.failure_threshold < 0) {
+ System.out.println("Value for "+arg+" parameter must be positive.");
+ printUsage();
+ }
+ }
+ catch (NumberFormatException nfe) {
+ System.out.println("Invalid value for "+arg+" parameter");
+ printUsage();
+ }
+ buffer.append(" ").append(arg).append(" = ").append(value).append('\n');
+ i++;
+ continue;
+ }
+ i++;
+ }
+ if (this.printStream != null) {
+ this.printStream.print(buffer.toString());
+ }
+
+ // Stop if some mandatory parameters are missing
+ if (this.outputDir == null || this.configDescriptors == null || jvm == null) {
+ printUsage();
+ }
+
+ // Set performance results
+ setPerformanceResults(currentBuildId, baseline);
+}
+
+/*
+ * Print component PHP file
+ */
+private void printComponent(/*PerformanceResults performanceResults, */String component) throws FileNotFoundException {
+ if (this.printStream != null) this.printStream.print(".");
+ File outputFile = new File(this.outputDir, component + ".php");
+ PrintStream stream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
+
+ // Print header
+ boolean isGlobal = component.startsWith("global");
+ if (isGlobal) {
+ File globalFile = new File(this.outputDir, "global.php");
+ PrintStream gStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(globalFile)));
+ gStream.print(Utils.HTML_OPEN);
+ gStream.print("</head>\n");
+ gStream.print("<body>\n");
+ gStream.print("<?php\n");
+ gStream.print(" include(\"global_fp.php\");\n");
+ gStream.print("?>\n");
+ gStream.print("<table border=0 cellpadding=2 cellspacing=5 width=\"100%\">\n");
+ gStream.print("<tbody><tr> <td colspan=3 align=\"left\" bgcolor=\"#0080c0\" valign=\"top\"><b><font color=\"#ffffff\" face=\"Arial,Helvetica\">\n");
+ gStream.print("Detailed performance data grouped by scenario prefix</font></b></td></tr></tbody></table>\n");
+ gStream.print("<a href=\"org.eclipse.ant.php?\">org.eclipse.ant*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.compare.php?\">org.eclipse.compare*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.core.php?\">org.eclipse.core*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.jdt.core.php?\">org.eclipse.jdt.core*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.jdt.debug.php?\">org.eclipse.jdt.debug*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.jdt.text.php?\">org.eclipse.jdt.text*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.jdt.ui.php?\">org.eclipse.jdt.ui*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.jface.php?\">org.eclipse.jface*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.osgi.php?\">org.eclipse.osgi*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.pde.api.tools.php?\">org.eclipse.pde.api.tools*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.pde.ui.php?\">org.eclipse.pde.ui*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.swt.php?\">org.eclipse.swt*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.team.php?\">org.eclipse.team*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.ua.php?\">org.eclipse.ua*</a><br>\n");
+ gStream.print("<a href=\"org.eclipse.ui.php?\">org.eclipse.ui*</a><br><p><br><br>\n");
+ gStream.print("</body>\n");
+ gStream.print(Utils.HTML_CLOSE);
+ gStream.close();
+ } else {
+ stream.print(Utils.HTML_OPEN);
+ }
+ stream.print("<link href=\""+Utils.TOOLTIP_STYLE+"\" rel=\"stylesheet\" type=\"text/css\">\n");
+ stream.print("<script src=\""+Utils.TOOLTIP_SCRIPT+"\"></script>\n");
+ stream.print("<script src=\""+Utils.FINGERPRINT_SCRIPT+"\"></script>\n");
+ stream.print(Utils.HTML_DEFAULT_CSS);
+
+ // Print title
+ stream.print("<body>");
+ printComponentTitle(/*performanceResults, */component, isGlobal, stream);
+
+ // print the html representation of fingerprint for each config
+ Display display = Display.getDefault();
+ if (this.genFingerPrints || this.genAll) {
+ final FingerPrint fingerprint = new FingerPrint(component, stream, this.outputDir);
+ display.syncExec(
+ new Runnable() {
+ public void run(){
+ try {
+ fingerprint.print(GenerateResults.this.performanceResults);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ );
+ }
+// FingerPrint fingerprint = new FingerPrint(component, stream, this.outputDir);
+// fingerprint.print(performanceResults);
+
+ // print scenario status table
+ if (!isGlobal) {
+ // print the component scenario status table beneath the fingerprint
+ final ScenarioStatusTable sst = new ScenarioStatusTable(component, stream);
+ display.syncExec(
+ new Runnable() {
+ public void run(){
+ try {
+ sst.print(GenerateResults.this.performanceResults);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ );
+// ScenarioStatusTable sst = new ScenarioStatusTable(component, stream);
+// sst.print(performanceResults);
+ }
+
+ stream.print(Utils.HTML_CLOSE);
+ stream.close();
+}
+
+private void printComponentTitle(/*PerformanceResults performanceResults, */String component, boolean isGlobal, PrintStream stream) {
+ String baselineName = this.performanceResults.getBaselineName();
+ String currentName = this.performanceResults.getName();
+
+ // Print title line
+ stream.print("<h3>Performance of ");
+ if (!isGlobal) {
+ stream.print(component);
+ stream.print(": ");
+ }
+ stream.print(currentName);
+ stream.print(" relative to ");
+ int index = baselineName.indexOf('_');
+ if (index > 0) {
+ stream.print(baselineName.substring(0, index));
+ stream.print(" (");
+ index = baselineName.lastIndexOf('_');
+ stream.print(baselineName.substring(index+1, baselineName.length()));
+ stream.print(')');
+ } else {
+ stream.print(baselineName);
+ }
+ stream.print("</h3>\n");
+
+ // Print reference to global results
+ if (!isGlobal) {
+ stream.print("<?php\n");
+ stream.print(" $type=$_SERVER['QUERY_STRING'];\n");
+ stream.print(" if ($type==\"\") {\n");
+ stream.print(" $type=\"fp_type=0\";\n");
+ stream.print(" }\n");
+ stream.print(" $href=\"<a href=\\\"performance.php?\";\n");
+ stream.print(" $href=$href . $type . \"\\\">Back to global results</a><br><br>\";\n");
+ stream.print(" echo $href;\n");
+ stream.print("?>\n");
+ }
+}
+
+/*
+ * Print summary of coefficient of variation for each scenario of the given pattern
+ * both for baseline and current builds.
+ */
+private void printSummary(/*PerformanceResults performanceResults*/) {
+ long start = System.currentTimeMillis();
+ if (this.printStream != null) this.printStream.print("Print scenarios variations summary...");
+ File outputFile = new File(this.outputDir, "cvsummary.html");
+ PrintStream stream = null;
+ try {
+ stream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
+ printSummaryPresentation(stream);
+// List scenarioNames = DB_Results.getScenarios();
+// int size = scenarioNames.size();
+ String[] components = this.performanceResults.getComponents();
+ int componentsLength = components.length;
+ printSummaryColumnsTitle(stream/*, performanceResults*/);
+ String[] configs = this.performanceResults.getConfigNames(true/*sorted*/);
+ int configsLength = configs.length;
+ for (int i=0; i<componentsLength; i++) {
+ String componentName = components[i];
+ List scenarioNames = this.performanceResults.getComponentScenarios(componentName);
+ int size = scenarioNames.size();
+ for (int s=0; s<size; s++) {
+ String scenarioName = ((ScenarioResults) scenarioNames.get(s)).getName();
+ if (scenarioName == null) continue;
+ ScenarioResults scenarioResults = this.performanceResults.getScenarioResults(scenarioName);
+ if (scenarioResults != null) {
+ stream.print("<tr>\n");
+ for (int j=0; j<2; j++) {
+ for (int c=0; c<configsLength; c++) {
+ printSummaryScenarioLine(j, configs[c], scenarioResults, stream);
+ }
+ }
+ stream.print("<td>");
+ stream.print(scenarioName);
+ stream.print("</td></tr>\n");
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ stream.print("</table></body></html>\n");
+ stream.flush();
+ stream.close();
+ }
+ if (this.printStream != null) this.printStream.println("done in "+(System.currentTimeMillis()-start)+"ms");
+}
+
+/*
+ * Print summary presentation (eg. file start and text presenting the purpose of this file contents)..
+ */
+private void printSummaryPresentation(PrintStream stream) {
+ stream.print(Utils.HTML_OPEN);
+ stream.print(Utils.HTML_DEFAULT_CSS);
+ stream.print("<title>Summary of Elapsed Process Variation Coefficients</title></head>\n");
+ stream.print("<body><h3>Summary of Elapsed Process Variation Coefficients</h3>\n");
+ stream.print("<p> This table provides a bird's eye view of variability in elapsed process times\n");
+ stream.print("for baseline and current build stream performance scenarios.");
+ stream.print(" This summary is provided to facilitate the identification of scenarios that should be examined due to high variability.");
+ stream.print("The variability for each scenario is expressed as a <a href=\"http://en.wikipedia.org/wiki/Coefficient_of_variation\">coefficient\n");
+ stream.print("of variation</a> (CV). The CV is calculated by dividing the <b>standard deviation\n");
+ stream.print("of the elapse process time over builds</b> by the <b>average elapsed process\n");
+ stream.print("time over builds</b> and multiplying by 100.\n");
+ stream.print("</p><p>High CV values may be indicative of any of the following:<br></p>\n");
+ stream.print("<ol><li> an unstable performance test. </li>\n");
+ stream.print("<ul><li>may be evidenced by an erratic elapsed process line graph.<br><br></li></ul>\n");
+ stream.print("<li>performance regressions or improvements at some time in the course of builds.</li>\n");
+ stream.print("<ul><li>may be evidenced by plateaus in elapsed process line graphs.<br><br></li></ul>\n");
+ stream.print("<li>unstable testing hardware.\n");
+ stream.print("<ul><li>consistent higher CV values for one test configuration as compared to others across");
+ stream.print(" scenarios may be related to hardward problems.</li></ul></li></ol>\n");
+ stream.print("<p> Scenarios are listed in alphabetical order in the far right column. A scenario's\n");
+ stream.print("variation coefficients (CVs) are in columns to the left for baseline and current\n");
+ stream.print("build streams for each test configuration. Scenarios with CVs > 10% are highlighted\n");
+ stream.print("in yellow (10%<CV>&lt;CV<20%) and orange(CV>20%). </p>\n");
+ stream.print("<p> Each CV value links to the scenario's detailed results to allow viewers to\n");
+ stream.print("investigate the variability.</p>\n");
+}
+
+/*
+ * Print columns titles of the summary table.
+ */
+private void printSummaryColumnsTitle(PrintStream stream/*, PerformanceResults performanceResults*/) {
+ String[] configBoxes = this.performanceResults.getConfigBoxes(true/*sorted*/);
+ int length = configBoxes.length;
+ stream.print("<table border=\"1\"><tr><td colspan=\"");
+ stream.print(length);
+ stream.print("\"><b>Baseline CVs</b></td><td colspan=\"");
+ stream.print(length);
+ stream.print("\"><b>Current Build Stream CVs</b></td><td rowspan=\"2\"><b>Scenario Name</b></td></tr>\n");
+ stream.print("<tr>");
+ for (int n=0; n<2; n++) {
+ for (int c=0; c<length; c++) {
+ stream.print("<td>");
+ stream.print(configBoxes[c]);
+ stream.print("</td>");
+ }
+ }
+ stream.print("</tr>\n");
+}
+
+/*
+ * Print a scenario line in the summary table.
+ */
+private void printSummaryScenarioLine(int i, String config, ScenarioResults scenarioResults, PrintStream stream) {
+ ConfigResults configResults = scenarioResults.getConfigResults(config);
+ if (configResults == null || !configResults.isValid()) {
+ stream.print("<td>n/a</td>");
+ return;
+ }
+ String url = config + "/" + scenarioResults.getFileName()+".html";
+ double[] stats = null;
+ if (i==0) { // baseline results
+ List baselinePrefixes;
+ if (this.baselinePrefix == null) {
+ baselinePrefixes = Util.BASELINE_BUILD_PREFIXES;
+ } else {
+ baselinePrefixes = new ArrayList();
+ baselinePrefixes.add(this.baselinePrefix);
+ }
+ stats = configResults.getStatistics(baselinePrefixes);
+ } else {
+ stats = configResults.getStatistics(this.currentBuildPrefixes);
+ }
+ double variation = stats[3];
+ if (variation > 0.1 && variation < 0.2) {
+ stream.print("<td bgcolor=\"yellow\">");
+ } else if (variation >= 0.2) {
+ stream.print("<td bgcolor=\"FF9900\">");
+ } else {
+ stream.print("<td>");
+ }
+ stream.print("<a href=\"");
+ stream.print(url);
+ stream.print("\"/>");
+ stream.print(Util.PERCENTAGE_FORMAT.format(variation));
+ stream.print("</a></td>");
+}
+
+/*
+ * Print usage in case one of the argument of the line was incorrect.
+ * Note that calling this method ends the program run due to final System.exit()
+ */
+private void printUsage() {
+ System.out.println(
+ "Usage:\n\n" +
+ "-baseline\n" +
+ " Build id against which to compare results.\n" +
+ " Same as value specified for the \"build\" key in the eclipse.perf.config system property.\n\n" +
+
+ "[-baseline.prefix]\n" +
+ " Optional. Build id prefix used in baseline test builds and reruns. Used to plot baseline historical data.\n" +
+ " A common prefix used for the value of the \"build\" key in the eclipse.perf.config system property when rerunning baseline tests.\n\n" +
+
+ "-current\n" +
+ " build id for which to generate results. Compared to build id specified in -baseline parameter above.\n" +
+ " Same as value specified for the \"build\" key in the eclipse.perf.config system property. \n\n" +
+
+ "[-current.prefix]\n" +
+ " Optional. Comma separated list of build id prefixes used in current build stream.\n" +
+ " Used to plot current build stream historical data. Defaults to \"N,I\".\n" +
+ " Prefixes for values specified for the \"build\" key in the eclipse.perf.config system property. \n\n" +
+
+ "-jvm\n" +
+ " Value specified in \"jvm\" key in eclipse.perf.config system property for current build.\n\n" +
+
+ "-config\n" +
+ " Comma separated list of config names for which to generate results.\n" +
+ " Same as values specified in \"config\" key in eclipse.perf.config system property.\n\n" +
+
+ "-output\n" +
+ " Path to default output directory.\n\n" +
+
+ "[-config.properties]\n" +
+ " Optional. Used by scenario status table to provide the following:\n" +
+ " alternate descriptions of config values to use in columns.\n" +
+ " The value should be specified in the following format:\n" +
+ " name1,description1;name2,description2;etc..\n\n" +
+
+ "[-highlight]\n" +
+ " Optional. Comma-separated list of build Id prefixes used to find most recent matching for each entry.\n" +
+ " Result used to highlight points in line graphs.\n\n" +
+
+ "[-scenario.pattern]\n" +
+ " Optional. Scenario prefix pattern to query database. If not specified,\n" +
+ " default of % used in query.\n\n" +
+
+ "[-fingerprints]\n" +
+ " Optional. Use to generate fingerprints only.\n\n" +
+
+ "[-data]\n" +
+ " Optional. Generates table of scenario reference and current data with line graphs.\n\n" +
+
+ "[-print]\n" +
+ " Optional. Display output in the console while generating.\n" +
+
+ "[-nophp]\n" +
+ " Optional. Generate files for non-php server.\n" +
+
+ "[-failure.threshold]\n" +
+ " Optional. Set the failure percentage threshold (default is 10%).\n"
+ );
+
+ System.exit(1);
+}
+
+/**
+ * Run the generation from a list of arguments.
+ * Typically used to generate results from an application.
+ */
+public IStatus run(String[] args) {
+ parse(args);
+ return run((IProgressMonitor) null);
+}
+
+/**
+ * Run the generation using a progress monitor.
+ * Note that all necessary information to generate properly must be set before
+ * calling this method
+ *
+ * @see #run(String[])
+ */
+public IStatus run(final IProgressMonitor monitor) {
+ long begin = System.currentTimeMillis();
+ int work = 1100;
+ int dataWork = 1000 * this.performanceResults.getConfigBoxes(false).length;
+ if (this.genAll || this.genData) {
+ work += dataWork;
+ }
+ SubMonitor subMonitor = SubMonitor.convert(monitor, work);
+ try {
+
+ // Print whole scenarios summary
+ if (this.printStream != null) this.printStream.println();
+ printSummary(/*performanceResults*/);
+
+ // Copy images and scripts to output dir
+ Bundle bundle = UiPlugin.getDefault().getBundle();
+// URL images = bundle.getEntry("images");
+// if (images != null) {
+// images = FileLocator.resolve(images);
+// Utils.copyImages(new File(images.getPath()), this.outputDir);
+// }
+ /* New way to get images
+ File content = FileLocator.getBundleFile(bundle);
+ BundleFile bundleFile;
+ if (content.isDirectory()) {
+ bundleFile = new DirBundleFile(content);
+ Utils.copyImages(bundleFile.getFile("images", true), this.outputDir);
+ } else {
+ bundleFile = new ZipBundleFile(content, null);
+ Enumeration imageFiles = bundle.findEntries("images", "*.gif", false);
+ while (imageFiles.hasMoreElements()) {
+ URL url = (URL) imageFiles.nextElement();
+ Utils.copyFile(bundleFile.getFile("images"+File.separator+, true), this.outputDir);
+ }
+ }
+ */
+ // Copy bundle files
+ Utils.copyBundleFiles(bundle, "images", "*.gif", this.outputDir); // images
+ Utils.copyBundleFiles(bundle, "scripts", "*.js", this.outputDir); // java scripts
+ Utils.copyBundleFiles(bundle, "scripts", "*.css", this.outputDir); // styles
+ Utils.copyBundleFiles(bundle, "doc", "*.html", this.outputDir); // doc
+ Utils.copyBundleFiles(bundle, "doc/images", "*.png", this.outputDir); // images for doc
+ /*
+ URL doc = bundle.getEntry("doc");
+ if (doc != null) {
+ doc = FileLocator.resolve(doc);
+ File docDir = new File(doc.getPath());
+ FileFilter filter = new FileFilter() {
+ public boolean accept(File pathname) {
+ return !pathname.getName().equals("CVS");
+ }
+ };
+ File[] docFiles = docDir.listFiles(filter);
+ for (int i=0; i<docFiles.length; i++) {
+ File file = docFiles[i];
+ if (file.isDirectory()) {
+ File subdir = new File(this.outputDir, file.getName());
+ subdir.mkdir();
+ File[] subdirFiles = file.listFiles(filter);
+ for (int j=0; j<subdirFiles.length; j++) {
+ if (subdirFiles[i].isDirectory()) {
+ // expect only one sub-directory
+ } else {
+ Util.copyFile(subdirFiles[j], new File(subdir, subdirFiles[j].getName()));
+ }
+ }
+ } else {
+ Util.copyFile(file, new File(this.outputDir, file.getName()));
+ }
+ }
+ }
+ */
+
+ // Print HTML pages and all linked files
+ if (this.printStream != null) {
+ this.printStream.println("Print performance results HTML pages:");
+ this.printStream.print(" - components main page");
+ }
+ long start = System.currentTimeMillis();
+ subMonitor.setTaskName("Write fingerprints: 0%");
+ subMonitor.subTask("Global...");
+ printComponent(/*performanceResults, */"global_fp");
+ subMonitor.worked(100);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+ String[] components = this.performanceResults.getComponents();
+ int length = components.length;
+ int step = 1000 / length;
+ int progress = 0;
+ for (int i=0; i<length; i++) {
+ int percentage = (int) ((progress / ((double) length)) * 100);
+ subMonitor.setTaskName("Write fingerprints: "+percentage+"%");
+ subMonitor.subTask(components[i]+"...");
+ printComponent(/*performanceResults, */components[i]);
+ subMonitor.worked(step);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+ progress++;
+ }
+ if (this.printStream != null) {
+ String duration = Util.timeString(System.currentTimeMillis()-start);
+ this.printStream.println(" done in "+duration);
+ }
+
+ // Print the scenarios data
+ if (this.genData || this.genAll) {
+ start = System.currentTimeMillis();
+ if (this.printStream != null) this.printStream.println(" - all scenarios data:");
+ ScenarioData data = new ScenarioData(this.baselinePrefix, this.pointsOfInterest, this.currentBuildPrefixes, this.outputDir);
+ try {
+ data.print(this.performanceResults, this.printStream, subMonitor.newChild(dataWork));
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ if (this.printStream != null) {
+ String duration = Util.timeString(System.currentTimeMillis()-start);
+ this.printStream.println(" => done in "+duration);
+ }
+ }
+ if (this.printStream != null) {
+ long time = System.currentTimeMillis();
+ this.printStream.println("End of generation: "+new SimpleDateFormat("H:mm:ss").format(new Date(time)));
+ String duration = Util.timeString(System.currentTimeMillis()-begin);
+ this.printStream.println("=> done in "+duration);
+ }
+ return new Status(IStatus.OK, UiPlugin.getDefault().toString(), "Everything is OK");
+ }
+ catch (OperationCanceledException oce) {
+ return new Status(IStatus.OK, UiPlugin.getDefault().toString(), "Generation was cancelled!");
+ }
+ catch (Exception ex) {
+ return new Status(IStatus.ERROR, UiPlugin.getDefault().toString(), "An unexpected exception occurred!", ex);
+ }
+ finally {
+ if (this.printStream != null) {
+ this.printStream.flush();
+ if (this.printStream != System.out) {
+ this.printStream.close();
+ }
+ }
+ }
+}
+
+private void setDefaults(String buildName, String baseline) {
+ if (buildName == null) {
+ buildName = this.performanceResults.getName();
+ }
+
+ // Set default output dir if not set
+ if (this.outputDir.getPath().indexOf(buildName) == -1) {
+ File dir = new File(this.outputDir, buildName);
+ if (dir.exists() || dir.mkdir()) {
+ this.outputDir = dir;
+ if (this.printStream != null) {
+ this.printStream.println(" + changed output dir to: "+dir.getPath());
+ }
+ }
+ }
+
+ // Verify that build is known
+ String[] builds = this.performanceResults.getAllBuildNames();
+ if (builds == null || builds.length == 0) {
+ System.err.println("Cannot connect to database to generate results build '"+buildName+"'");
+ System.exit(1);
+ }
+ if (Arrays.binarySearch(builds, buildName, Util.BUILD_DATE_COMPARATOR) < 0) {
+ throw new RuntimeException("No results in database for build '"+buildName+"'");
+ }
+ if (this.printStream != null) {
+ this.printStream.println();
+ this.printStream.flush();
+ }
+
+ // Init baseline prefix if not set
+ if (this.baselinePrefix == null) {
+ int index = baseline.lastIndexOf('_');
+ if (index > 0) {
+ this.baselinePrefix = baseline.substring(0, index);
+ } else {
+ this.baselinePrefix = DB_Results.getDbBaselinePrefix();
+ }
+ }
+
+ // Init current build prefixes if not set
+ if (this.currentBuildPrefixes == null) {
+ this.currentBuildPrefixes = new ArrayList();
+ if (buildName.charAt(0) == 'M') {
+ this.currentBuildPrefixes.add("M");
+ } else {
+ this.currentBuildPrefixes.add("N");
+ }
+ this.currentBuildPrefixes.add("I");
+ }
+}
+
+private void setPerformanceResults(String buildName, String baselineName) {
+
+ // Set performance results
+ this.performanceResults = new PerformanceResults(buildName, baselineName, this.baselinePrefix, this.printStream);
+
+ // Set defaults
+ setDefaults(buildName, this.performanceResults.getBaselineName());
+
+ // Read performance results data
+ this.performanceResults.readAll(buildName, this.configDescriptors, this.scenarioPattern, this.dataDir, this.failure_threshold, null);
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.equinox.app.IApplication#stop()
+ */
+public void stop() {
+ // Do nothing
+}
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/LineGraph.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/LineGraph.java
new file mode 100644
index 0000000..b7e7eeb
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/LineGraph.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.util.*;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.test.internal.performance.data.Dim;
+
+public class LineGraph {
+
+ StringBuffer fAreaBuffer;
+
+ private static class GraphItem {
+
+ String title;
+ String description=null;
+ double value;
+ Color color;
+ boolean displayDescription=false;
+
+ GraphItem(String title, String description,double value, Color color,boolean display) {
+ this(title, description, value, color);
+ this.displayDescription=display;
+ }
+
+ GraphItem(String title, String description, double value, Color color) {
+ this.title= title;
+ this.value= value;
+ this.color= color;
+ this.description= description;
+ }
+
+ Point getSize(GC g) {
+ Point e1= g.stringExtent(this.description);
+ Point e2= g.stringExtent(this.title);
+ return new Point(Math.max(e1.x, e2.x), e1.y+e2.y);
+ }
+ }
+
+ static final int PADDING= 15;
+
+
+ String fTitle;
+ List fItems;
+ Dim fDimension;
+
+
+ public LineGraph(String title, Dim dim) {
+ this.fTitle= title;
+ this.fItems= new ArrayList();
+ this.fDimension= dim;
+ }
+
+ public void paint(Image im) {
+
+ Rectangle bounds= im.getBounds();
+
+ GC g= new GC(im);
+
+ Point ee= g.stringExtent(this.fTitle);
+ int titleHeight= ee.y;
+
+ double maxItem= getMaxItem();
+ double minItem= getMinItem();
+
+ int max= (int) (Math.ceil(maxItem * (maxItem < 0 ? 0.9 : 1.2)));
+ int min= (int) (Math.floor(minItem * (minItem < 0 ? 1.2 : 0.9)));
+
+ String smin= this.fDimension.getDisplayValue(min);
+ Point emin= g.stringExtent(smin);
+
+ String smax= this.fDimension.getDisplayValue(max);
+ Point emax= g.stringExtent(smax);
+
+ int labelWidth= Math.max(emin.x, emax.x) + 2;
+
+ int top= PADDING;
+ int bottom= bounds.height - titleHeight - PADDING;
+ int left= PADDING + labelWidth;
+
+ GraphItem lastItem= (GraphItem) this.fItems.get(this.fItems.size()-1);
+ int right= bounds.width - lastItem.getSize(g).x - PADDING/2;
+
+ // draw the title
+ //g.drawString(fTitle, (bounds.width - titleWidth) / 2, titleHeight, true);
+
+ // draw the max and min values
+ g.drawString(smin, PADDING/2+labelWidth-emin.x, bottom-titleHeight, true);
+ g.drawString(smax, PADDING/2+labelWidth-emax.x, top, true);
+
+ // draw the vertical and horizontal lines
+ g.drawLine(left, top, left, bottom);
+ g.drawLine(left, bottom, right, bottom);
+
+ Color oldbg= g.getBackground();
+ Color oldfg= g.getForeground();
+
+ int n= this.fItems.size();
+ int xincrement= n > 1 ? (right-left) / (n-1) : 0;
+
+ int graduations= max - min;
+ if (graduations == 0)
+ graduations= 1;
+
+ int lastx= 0;
+ int lasty= 0;
+
+ int xposition= left;
+
+ for (int i= 0; i < n; i++) {
+ GraphItem thisItem= (GraphItem) this.fItems.get(i);
+
+ int yposition= (int) (bottom - (((thisItem.value-min) * (bottom-top)) / graduations));
+
+ if (i > 0) // don't draw for first segment
+ g.drawLine(lastx, lasty, xposition, yposition);
+
+ g.setBackground(thisItem.color);
+ g.setForeground(thisItem.color);
+ g.fillOval(xposition-2, yposition-2, 5, 5);
+
+ if (this.fAreaBuffer == null)
+ this.fAreaBuffer= new StringBuffer();
+
+ this.fAreaBuffer.append("\r<area shape=\"CIRCLE\" coords=\""+(xposition-2)+','+(yposition-2)+','+5+" alt=\""+ thisItem.title+": "+thisItem.description+"\""+ " title=\""+ thisItem.title+": "+thisItem.description+"\">");
+
+
+ int shift;
+ if (i > 0 && yposition < lasty)
+ shift= 3; // below dot
+ else
+ shift= -(2*titleHeight+3); // above dot
+ if (thisItem.displayDescription){
+ g.drawString(thisItem.title, xposition+2, yposition+shift, true);
+ g.drawString(thisItem.description, xposition+2, yposition+shift+titleHeight, true);
+ }
+ g.setBackground(oldbg);
+ g.setForeground(oldfg);
+
+ lastx= xposition;
+ lasty= yposition;
+ xposition+= xincrement;
+ }
+
+ g.dispose();
+ }
+
+ public void addItem(String name, String description, double value, Color col) {
+ addItem(name, description, value, col,false);
+ }
+
+ public void addItem(String name, String description, double value, Color col, boolean display) {
+ this.fItems.add(new GraphItem(name, description, value, col,display));
+ }
+
+ public double getMaxItem() {
+ double maxItem= 0;
+ for (int i= 0; i < this.fItems.size(); i++) {
+ GraphItem graphItem= (GraphItem) this.fItems.get(i);
+ if (graphItem.value > maxItem)
+ maxItem= graphItem.value;
+ }
+ if (maxItem == 0)
+ return 1;
+ return maxItem;
+ }
+
+ public double getMinItem() {
+ double minItem= getMaxItem();
+ for (int i= 0; i < this.fItems.size(); i++) {
+ GraphItem graphItem= (GraphItem) this.fItems.get(i);
+ if (graphItem.value < minItem)
+ minItem= graphItem.value;
+ }
+ if (minItem == 0)
+ return -1;
+ return minItem;
+ }
+ public String getAreas() {
+ if (this.fAreaBuffer != null) {
+ String s= this.fAreaBuffer.toString();
+ this.fAreaBuffer= null;
+ return s;
+ }
+ return null;
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Main.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Main.java
new file mode 100644
index 0000000..dfe3312
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Main.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+
+/**
+ * Main class to generate performance results of all scenarios matching a given pattern
+ * in one HTML page per component.
+ *
+ * @see GenerateResults for the complete implementation
+ */
+public class Main implements IApplication {
+
+/**
+ * Generate the performance results for a specified build regarding to a specific reference.
+ * This action generates following HTML files:
+ * <ul>
+ * <li>A summary table to see the variations for all the concerned scenarios</li>
+ * <li>A global php file including global scenario fingerprints and links for all concerned components results php files</li>
+ * <li>A php file for each component including scenario fingerprints and status table with links to a scenario data file</li>
+ * <li>A data HTML file for each config of each scenario included in status table</li>
+ * </ul>
+ * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+ */
+public Object start(IApplicationContext context) throws Exception {
+ DB_Results.DB_CONNECTION = true; // force DB connection while running the application
+ GenerateResults generation = new GenerateResults();
+ String[] args = (String[]) context.getArguments().get("application.args");
+ generation.run(args);
+ return null;
+}
+
+/* (non-Javadoc)
+ * @see org.eclipse.equinox.app.IApplication#stop()
+ */
+public void stop() {
+ // Do nothing
+}
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Messages.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Messages.java
new file mode 100644
index 0000000..615d686
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Messages.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.text.MessageFormat;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+
+ private static final String BUNDLE_NAME = "org.eclipse.test.performance.ui.messages";//$NON-NLS-1$
+
+ private Messages() {
+ // Do not instantiate
+ }
+
+ public static String standardError;
+
+ static {
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ /**
+ * Bind the given message's substitution locations with the given string values.
+ *
+ * @param message the message to be manipulated
+ * @return the manipulated String
+ */
+ public static String bind(String message) {
+ return bind(message, null);
+ }
+
+ /**
+ * Bind the given message's substitution locations with the given string values.
+ *
+ * @param message the message to be manipulated
+ * @param binding the object to be inserted into the message
+ * @return the manipulated String
+ */
+ public static String bind(String message, Object binding) {
+ return bind(message, new Object[] {binding});
+ }
+
+ /**
+ * Bind the given message's substitution locations with the given string values.
+ *
+ * @param message the message to be manipulated
+ * @param binding1 An object to be inserted into the message
+ * @param binding2 A second object to be inserted into the message
+ * @return the manipulated String
+ */
+ public static String bind(String message, Object binding1, Object binding2) {
+ return bind(message, new Object[] {binding1, binding2});
+ }
+
+ /**
+ * Bind the given message's substitution locations with the given string values.
+ *
+ * @param message the message to be manipulated
+ * @param bindings An array of objects to be inserted into the message
+ * @return the manipulated String
+ */
+ public static String bind(String message, Object[] bindings) {
+ return MessageFormat.format(message, bindings);
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/RawDataTable.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/RawDataTable.java
new file mode 100644
index 0000000..124bdfa
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/RawDataTable.java
@@ -0,0 +1,185 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Class used to fill details file of scenario builds data.
+ * @see ScenarioData
+ */
+public class RawDataTable {
+
+ private ConfigResults configResults;
+ private List buildPrefixes;
+ private PrintStream stream;
+ private Dim[] dimensions = DB_Results.getResultsDimensions();
+ private boolean debug = false;
+
+private RawDataTable(ConfigResults results, PrintStream ps) {
+ this.configResults = results;
+ this.stream = ps;
+}
+
+public RawDataTable(ConfigResults results, List prefixes, PrintStream ps) {
+ this(results, ps);
+ this.buildPrefixes = prefixes;
+}
+public RawDataTable(ConfigResults results, String baselinePrefix, PrintStream ps) {
+ this(results, ps);
+ this.buildPrefixes = new ArrayList();
+ this.buildPrefixes.add(baselinePrefix);
+}
+
+/**
+ * Print all build data to the current stream.
+ */
+public void print(){
+ this.stream.print("<table border=\"1\">");
+ printSummary();
+ printDetails();
+ this.stream.print("</table>\n");
+}
+
+/*
+ * Print table columns headers.
+ */
+private void printColumnHeaders() {
+ StringBuffer buffer = new StringBuffer();
+ int length = this.dimensions.length;
+ for (int i=0; i<length; i++) {
+ buffer.append("<td><b>");
+ buffer.append(this.dimensions[i].getName());
+ buffer.append("</b></td>");
+ }
+ this.stream.print(buffer.toString());
+}
+
+/*
+ * Print all build results in the table.
+ */
+private void printDetails() {
+ this.stream.print("<tr><td><b>Build ID</b></td>");
+ printColumnHeaders();
+ this.stream.print("</tr>\n");
+
+ List builds = this.configResults.getBuildsMatchingPrefixes(this.buildPrefixes);
+ Collections.reverse(builds);
+ int size = builds.size();
+ for (int i=0; i<size; i++) {
+ BuildResults buildResults = (BuildResults) builds.get(i);
+ this.stream.print("<tr><td>");
+ this.stream.print(buildResults.getName());
+ this.stream.print("</td>");
+ int dimLength = this.dimensions.length;
+ for (int d=0; d<dimLength; d++) {
+ Dim dimension = this.dimensions[d];
+ int dim_id = dimension.getId();
+ double value = buildResults.getValue(dim_id);
+ printDimTitle(dimension.getName());
+ String displayValue = dimension.getDisplayValue(value);
+ this.stream.print(displayValue);
+ if (this.debug) System.out.print("\t"+displayValue);
+ this.stream.print("</td>");
+ }
+ if (this.debug) System.out.println();
+ this.stream.print("</tr>\n");
+ }
+ if (this.debug) System.out.println("\n");
+}
+
+/*
+ * Print summary on top of the table.
+ */
+private void printSummary() {
+ this.stream.print("<tr><td><b>Stats</b></td>");
+ printColumnHeaders();
+ this.stream.print("</tr>\n");
+
+ int length = this.dimensions.length;
+ double[][] dimStats = new double[length][];
+ for (int i=0; i<length; i++) {
+ dimStats[i] = this.configResults.getStatistics(this.buildPrefixes, this.dimensions[i].getId());
+ }
+
+ this.stream.print("<tr><td>#BUILDS SAMPLED</td>");
+ for (int i=0; i<length; i++) {
+ String dimName = this.dimensions[i].getName();
+ printDimTitle(dimName);
+ this.stream.print((int)dimStats[i][0]);
+ this.stream.print("</td>");
+ }
+ this.stream.print("</tr>\n");
+ this.stream.print("<tr><td>MEAN</td>");
+ printRowDoubles(dimStats, 1);
+ this.stream.print("</tr>\n");
+ this.stream.print("<tr><td>STD DEV</td>");
+ printRowDoubles(dimStats, 2);
+ this.stream.print("</tr>\n");
+ this.stream.print("<tr><td>COEF. VAR</td>");
+ printRowDoubles(dimStats, 3);
+ this.stream.print("</tr>\n");
+
+ // Blank line
+ this.stream.print("<tr>");
+ for (int i=0; i<length+1; i++){
+ this.stream.print("<td>&nbsp;</td>");
+ }
+ this.stream.print("</tr>\n");
+}
+
+/*
+ * Print values in table row.
+ */
+private void printRowDoubles(double[][] stats, int idx) {
+ int length = this.dimensions.length;
+ for (int i=0; i<length; i++) {
+ double value = stats[i][idx];
+ String dimName = this.dimensions[i].getName();
+ if (idx == 3) {
+ if (value > 0.1 && value < 0.2) {
+ this.stream.print("<td bgcolor=\"yellow\" title=\"");
+ } else if (value >= 0.2) {
+ this.stream.print("<td bgcolor=\"FF9900\" title=\"");
+ } else {
+ this.stream.print("<td title=\"");
+ }
+ this.stream.print(dimName);
+ this.stream.print("\">");
+ this.stream.print(Util.PERCENTAGE_FORMAT.format(value));
+ this.stream.print("</td>");
+ } else {
+ printDimTitle(dimName);
+ this.stream.print(this.dimensions[i].getDisplayValue(value));
+ this.stream.print("</td>");
+ }
+ }
+}
+
+/*
+ * Print dim title inside value reference.
+ * TODO (frederic) See if this title is really necessary
+ */
+private void printDimTitle(String dimName) {
+ this.stream.print("<td title=\"");
+ this.stream.print(dimName);
+ this.stream.print("\">");
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioData.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioData.java
new file mode 100644
index 0000000..9278a1c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioData.java
@@ -0,0 +1,469 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
+
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.test.internal.performance.data.Dim;
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.ComponentResults;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.DB_Results;
+import org.eclipse.test.internal.performance.results.db.PerformanceResults;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+import org.eclipse.test.internal.performance.results.utils.Util;
+
+/**
+ * Class used to print scenario all builds data.
+ */
+public class ScenarioData {
+ private String baselinePrefix = null;
+ private List pointsOfInterest;
+ private List buildIDStreamPatterns;
+ private File rootDir;
+ private static final int GRAPH_WIDTH = 600;
+ private static final int GRAPH_HEIGHT = 200;
+ private Dim[] dimensions = DB_Results.getResultsDimensions();
+
+/**
+ * Summary of results for a scenario for a given build compared to a
+ * reference.
+ *
+ * @param baselinePrefix The prefix of the baseline build names
+ * @param pointsOfInterest A list of buildId's to highlight on line graphs
+ * @param buildIDPatterns
+ * @param outputDir The directory root where the files are generated
+ *
+*/
+public ScenarioData(String baselinePrefix, List pointsOfInterest, List buildIDPatterns, File outputDir) {
+ this.baselinePrefix = baselinePrefix;
+ this.pointsOfInterest = pointsOfInterest;
+ this.buildIDStreamPatterns = buildIDPatterns;
+ this.rootDir = outputDir;
+}
+
+/*
+ * Create a file handle verifying that its name does not go over
+ * the maximum authorized length.
+ */
+private File createFile(File outputDir, String subdir, String name, String extension) {
+ File dir = outputDir;
+ if (subdir != null) {
+ dir = new File(outputDir, subdir);
+ if (!dir.exists()) {
+ dir.mkdir();
+ }
+ }
+ return new File(dir, name + '.' + extension);
+}
+
+/*
+ * Returns a LineGraph object representing measurements for a scenario over builds.
+ */
+private TimeLineGraph getLineGraph(ScenarioResults scenarioResults, ConfigResults configResults, Dim dim, List highlightedPoints, List currentBuildIdPrefixes) {
+ Display display = Display.getDefault();
+
+ Color black = display.getSystemColor(SWT.COLOR_BLACK);
+ Color yellow = display.getSystemColor(SWT.COLOR_DARK_YELLOW);
+ Color magenta = display.getSystemColor(SWT.COLOR_MAGENTA);
+
+ String scenarioName = scenarioResults.getName();
+ TimeLineGraph graph = new TimeLineGraph(scenarioName + ": " + dim.getName(), dim);
+ String baseline = configResults.getBaselineBuildName();
+ String current = configResults.getCurrentBuildName();
+
+ final String defaultBaselinePrefix = DB_Results.getDbBaselinePrefix();
+ Iterator builds = configResults.getResults();
+ List lastSevenNightlyBuilds = configResults.lastNightlyBuildNames(7);
+ buildLoop: while (builds.hasNext()) {
+ BuildResults buildResults = (BuildResults) builds.next();
+ String buildID = buildResults.getName();
+ int underscoreIndex = buildID.indexOf('_');
+ String label = (underscoreIndex != -1 && buildID.equals(current)) ? buildID.substring(0, underscoreIndex) : buildID;
+ if (buildID.startsWith(defaultBaselinePrefix)) {
+ label = defaultBaselinePrefix+buildID.charAt(defaultBaselinePrefix.length())+buildID.substring(underscoreIndex);
+ }
+
+ double value = buildResults.getValue(dim.getId());
+
+ if (buildID.equals(current)) {
+ Color color = black;
+ if (buildID.startsWith("N"))
+ color = yellow;
+
+ graph.addItem("main", label, dim.getDisplayValue(value), value, color, true, Utils.getDateFromBuildID(buildID), true);
+ continue;
+ }
+ if (highlightedPoints.contains(buildID)) {
+ graph.addItem("main", label, dim.getDisplayValue(value), value, black, false, Utils.getDateFromBuildID(buildID, false), true);
+ continue;
+ }
+ if (buildID.charAt(0) == 'N') {
+ if (lastSevenNightlyBuilds.contains(buildID)) {
+ graph.addItem("main", buildID, dim.getDisplayValue(value), value, yellow, false, Utils.getDateFromBuildID(buildID), false);
+ }
+ continue;
+ }
+ for (int i=0;i<currentBuildIdPrefixes.size();i++){
+ if (buildID.startsWith(currentBuildIdPrefixes.get(i).toString())) {
+ graph.addItem("main", buildID, dim.getDisplayValue(value), value, black, false, Utils.getDateFromBuildID(buildID), false);
+ continue buildLoop;
+ }
+ }
+ if (buildID.equals(baseline)) {
+ boolean drawBaseline = (this.baselinePrefix != null) ? false : true;
+ graph.addItem("reference", label, dim.getDisplayValue(value), value, magenta, true, Utils.getDateFromBuildID(buildID, true), true, drawBaseline);
+ continue;
+ }
+ if (this.baselinePrefix != null) {
+ if (buildID.startsWith(this.baselinePrefix) && !buildID.equals(baseline) && Utils.getDateFromBuildID(buildID, true) <= Utils.getDateFromBuildID(baseline, true)) {
+ graph.addItem("reference", label, dim.getDisplayValue(value), value, magenta, false, Utils.getDateFromBuildID(buildID, true), false);
+ continue;
+ }
+ }
+ }
+ return graph;
+}
+
+/**
+ * Print the scenario all builds data from the given performance results.
+ *
+ * @param performanceResults The needed information to generate scenario data
+ */
+public void print(PerformanceResults performanceResults, PrintStream printStream, final SubMonitor subMonitor) {
+ String[] configNames = performanceResults.getConfigNames(false/*not sorted*/);
+ String[] configBoxes = performanceResults.getConfigBoxes(false/*not sorted*/);
+ int length = configNames.length;
+ int size = performanceResults.size();
+ double total = length * size;
+ subMonitor.setWorkRemaining(length*size);
+ int progress = 0;
+ for (int i=0; i<length; i++) {
+ final String configName = configNames[i];
+ final String configBox = configBoxes[i];
+
+ // Manage monitor
+ subMonitor.setTaskName("Generating data for "+configBox);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+
+ long start = System.currentTimeMillis();
+ if (printStream != null) printStream.print(" + "+configName);
+ final File outputDir = new File(this.rootDir, configName);
+ outputDir.mkdir();
+ Iterator components = performanceResults.getResults();
+ while (components.hasNext()) {
+ if (printStream != null) printStream.print(".");
+ final ComponentResults componentResults = (ComponentResults) components.next();
+
+ // Manage monitor
+ int percentage = (int) ((progress++ / total) * 100);
+ subMonitor.setTaskName("Generating data for "+configBox+": "+percentage+"%");
+ subMonitor.subTask("Component "+componentResults.getName()+"...");
+
+ Display display = Display.getDefault();
+ display.syncExec(
+ new Runnable() {
+ public void run(){
+ printSummary(configName, configBox, componentResults, outputDir, subMonitor);
+ }
+ }
+ );
+// printSummary(configName, configBox, componentResults, outputDir, monitor);
+ printDetails(configName, configBoxes[i], componentResults, outputDir);
+
+ subMonitor.worked(1);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+ }
+ if (printStream != null) {
+ String duration = Util.timeString(System.currentTimeMillis()-start);
+ printStream.println(" done in "+duration);
+ }
+ }
+}
+
+/*
+ * Print the summary file of the builds data.
+ */
+void printSummary(String configName, String configBox, ComponentResults componentResults, File outputDir, SubMonitor subMonitor) {
+ Iterator scenarios = componentResults.getResults();
+ while (scenarios.hasNext()) {
+ List highlightedPoints = new ArrayList();
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.next();
+ ConfigResults configResults = scenarioResults.getConfigResults(configName);
+ if (configResults == null || !configResults.isValid()) continue;
+
+ // get latest points of interest matching
+ if (this.pointsOfInterest != null) {
+ Iterator buildPrefixes = this.pointsOfInterest.iterator();
+ while (buildPrefixes.hasNext()) {
+ String buildPrefix = (String) buildPrefixes.next();
+ List builds = configResults.getBuilds(buildPrefix);
+ if (buildPrefix.indexOf('*') <0 && buildPrefix.indexOf('?') < 0) {
+ if (builds.size() > 0) {
+ highlightedPoints.add(builds.get(builds.size()-1));
+ }
+ } else {
+ highlightedPoints.addAll(builds);
+ }
+ }
+ }
+
+ String scenarioFileName = scenarioResults.getFileName();
+ File outputFile = new File(outputDir, scenarioFileName+".html");
+ PrintStream stream = null;
+ try {
+ stream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
+ } catch (FileNotFoundException e) {
+ System.err.println("can't create output file" + outputFile); //$NON-NLS-1$
+ }
+ if (stream == null) {
+ stream = System.out;
+ }
+ stream.print(Utils.HTML_OPEN);
+ stream.print(Utils.HTML_DEFAULT_CSS);
+
+ stream.print("<title>" + scenarioResults.getName() + "(" + configBox + ")" + "</title></head>\n"); //$NON-NLS-1$
+ stream.print("<h4>Scenario: " + scenarioResults.getName() + " (" + configBox + ")</h4><br>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ String failureMessage = Utils.failureMessage(configResults.getCurrentBuildDeltaInfo(), true);
+ if (failureMessage != null){
+ stream.print("<table><tr><td><b>"+failureMessage+"</td></tr></table>\n");
+ }
+
+ BuildResults currentBuildResults = configResults.getCurrentBuildResults();
+ String comment = currentBuildResults.getComment();
+ if (comment != null) {
+ stream.print("<p><b>Note:</b><br>\n");
+ stream.print(comment + "</p>\n");
+ }
+
+ // Print link to raw data.
+ String rawDataFile = "raw/" + scenarioFileName+".html";
+ stream.print("<br><br><b><a href=\""+rawDataFile+"\">Raw data and Stats</a></b><br><br>\n");
+ stream.print("<b>Click measurement name to view line graph of measured values over builds.</b><br><br>\n");
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+
+ try {
+ // Print build result table
+ stream.print("<table border=\"1\">\n"); //$NON-NLS-1$
+ stream.print("<tr><td><b>Build Id</b></td>"); //$NON-NLS-1$
+ int dimLength = this.dimensions.length;
+ for (int d=0; d<dimLength; d++) {
+ Dim dim = this.dimensions[d];
+ stream.print("<td><a href=\"#" + dim.getLabel() + "\"><b>" + dim.getName() + "</b></a></td>");
+ }
+ stream.print("</tr>\n");
+
+ // Write build lines
+ printTableLine(stream, currentBuildResults);
+ printTableLine(stream, configResults.getBaselineBuildResults());
+
+ // Write difference line
+ printDifferenceLine(stream, configResults);
+
+ // End of table
+ stream.print("</table>\n");
+ stream.print("*Delta values in red and green indicate degradation > 10% and improvement > 10%,respectively.<br><br>\n");
+ stream.print("<br><hr>\n\n");
+
+ // print text legend.
+ stream.print("Black and yellow points plot values measured in integration and last seven nightly builds.<br>\n" + "Magenta points plot the repeated baseline measurement over time.<br>\n"
+ + "Boxed points represent previous releases, milestone builds, current reference and current build.<br><br>\n"
+ + "Hover over any point for build id and value.\n");
+
+ // print image maps of historical
+ for (int d=0; d<dimLength; d++) {
+ Dim dim = this.dimensions[d];
+ TimeLineGraph lineGraph = getLineGraph(scenarioResults, configResults, dim, highlightedPoints, this.buildIDStreamPatterns);
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+
+ String dimShortName = dim.getLabel();
+ String imgFileName = scenarioFileName + "_" + dimShortName;
+ File imgFile = createFile(outputDir, "graphs", imgFileName, "gif");
+ saveGraph(lineGraph, imgFile);
+ stream.print("<br><a name=\"" + dimShortName + "\"></a>\n");
+ stream.print("<br><b>" + dim.getName() + "</b><br>\n");
+ stream.print(dim.getDescription() + "<br><br>\n");
+ stream.print("<img src=\"graphs/");
+ stream.print(imgFile.getName());
+ stream.print("\" usemap=\"#" + lineGraph.fTitle + "\">");
+ stream.print("<map name=\"" + lineGraph.fTitle + "\">");
+ stream.print(lineGraph.getAreas());
+ stream.print("</map>\n");
+ if (subMonitor.isCanceled()) throw new OperationCanceledException();
+ }
+ stream.print("<br><br></body>\n");
+ stream.print(Utils.HTML_CLOSE);
+ if (stream != System.out)
+ stream.close();
+
+ } catch (AssertionFailedError e) {
+ e.printStackTrace();
+ continue;
+ }
+ }
+}
+
+/*
+ * Print the data for a build results.
+ */
+private void printTableLine(PrintStream stream, BuildResults buildResults) {
+ stream.print("<tr><td>");
+ stream.print(buildResults.getName());
+ if (buildResults.isBaseline()) stream.print(" (reference)");
+ stream.print("</td>");
+ int dimLength = this.dimensions.length;
+ for (int d=0; d<dimLength; d++) {
+ Dim dim = this.dimensions[d];
+ int dim_id = dim.getId();
+ double stddev = buildResults.getDeviation(dim_id);
+ String displayValue = dim.getDisplayValue(buildResults.getValue(dim_id));
+ stream.print("<td>");
+ stream.print(displayValue);
+ if (stddev < 0) {
+ stream.print(" [n/a]\n");
+ } else if (stddev > 0) {
+ stream.print(" [");
+ stream.print(dim.getDisplayValue(stddev));
+ stream.print("]");
+ }
+ stream.print( "</td>");
+ }
+ stream.print("</tr>\n");
+}
+
+/*
+ * Print the line showing the difference between current and baseline builds.
+ */
+private void printDifferenceLine(PrintStream stream, ConfigResults configResults) {
+ stream.print("<tr><td>*Delta</td>");
+ int dimLength = this.dimensions.length;
+ for (int d=0; d<dimLength; d++) {
+ Dim currentDim = this.dimensions[d];
+ int dim_id = currentDim.getId();
+ BuildResults currentBuild = configResults.getCurrentBuildResults();
+ BuildResults baselineBuild = configResults.getBaselineBuildResults();
+
+ // Compute difference values
+ double baselineValue = baselineBuild.getValue(dim_id);
+ double diffValue = baselineValue - currentBuild.getValue(dim_id);
+ double diffPercentage = baselineValue == 0 ? 0 : Math.round(diffValue / baselineValue * 1000) / 10.0;
+ String diffDisplayValue = currentDim.getDisplayValue(diffValue);
+
+ // Set colors
+ String fontColor = "";
+ if (diffPercentage > 10) {
+ fontColor = "#006600"; // green
+ }
+ if (diffPercentage < -10) {
+ fontColor = "#FF0000"; // red
+ }
+
+ // Print line
+ String percentage = (diffPercentage == 0) ? "" : "<br>" + diffPercentage + " %";
+ if (diffPercentage > 10 || diffPercentage < -10) {
+ stream.print("<td><FONT COLOR=\"" + fontColor + "\"><b>" + diffDisplayValue + percentage + "</b></FONT></td>");
+ } else {
+ stream.print("<td>" + diffDisplayValue + percentage + "</td>");
+ }
+ }
+ stream.print("</tr></font>");
+}
+
+/*
+ * Print details file of the scenario builds data.
+ */
+private void printDetails(String configName, String configBox, ComponentResults componentResults, File outputDir) {
+ Iterator scenarios = componentResults.getResults();
+ while (scenarios.hasNext()) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.next();
+ ConfigResults configResults = scenarioResults.getConfigResults(configName);
+ if (configResults == null || !configResults.isValid()) continue;
+ String scenarioName= scenarioResults.getName();
+ String scenarioFileName = scenarioResults.getFileName();
+ File outputFile = createFile(outputDir, "raw", scenarioFileName, "html");
+ PrintStream stream = null;
+ try {
+ stream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
+ } catch (FileNotFoundException e) {
+ System.err.println("can't create output file" + outputFile); //$NON-NLS-1$
+ }
+ if (stream == null) stream = System.out;
+ RawDataTable currentResultsTable = new RawDataTable(configResults, this.buildIDStreamPatterns, stream);
+ RawDataTable baselineResultsTable = new RawDataTable(configResults, this.baselinePrefix, stream);
+ stream.print(Utils.HTML_OPEN);
+ stream.print(Utils.HTML_DEFAULT_CSS);
+ stream.print("<title>" + scenarioName + "(" + configBox + ")" + " - Details</title></head>\n"); //$NON-NLS-1$
+ stream.print("<h4>Scenario: " + scenarioName + " (" + configBox + ")</h4>\n"); //$NON-NLS-1$
+ stream.print("<a href=\"../"+scenarioFileName+".html\">VIEW GRAPH</a><br><br>\n"); //$NON-NLS-1$
+ stream.print("<table><td><b>Current Stream Test Runs</b></td><td><b>Baseline Test Runs</b></td></tr>\n");
+ stream.print("<tr valign=\"top\">\n");
+ stream.print("<td>");
+ currentResultsTable.print();
+ stream.print("</td>\n");
+ stream.print("<td>");
+ baselineResultsTable.print();
+ stream.print("</td>\n");
+ stream.print("</tr>\n");
+ stream.print("</table>\n");
+ stream.close();
+ }
+}
+
+/*
+ * Prints a LineGraph object as a gif file.
+ */
+private void saveGraph(LineGraph p, File outputFile) {
+ Image image = new Image(Display.getDefault(), GRAPH_WIDTH, GRAPH_HEIGHT);
+ p.paint(image);
+
+ /* Downscale to 8 bit depth palette to save to gif */
+ ImageData data = Utils.downSample(image);
+ ImageLoader il = new ImageLoader();
+ il.data = new ImageData[] { data };
+ OutputStream out = null;
+ try {
+ out = new BufferedOutputStream(new FileOutputStream(outputFile));
+ il.save(out, SWT.IMAGE_GIF);
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ image.dispose();
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e1) {
+ // silently ignored
+ }
+ }
+ }
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioStatusTable.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioStatusTable.java
new file mode 100644
index 0000000..2a39253
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/ScenarioStatusTable.java
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.PrintStream;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.test.internal.performance.results.db.BuildResults;
+import org.eclipse.test.internal.performance.results.db.ConfigResults;
+import org.eclipse.test.internal.performance.results.db.PerformanceResults;
+import org.eclipse.test.internal.performance.results.db.ScenarioResults;
+
+/**
+ * Class used to print a scenario status table.
+ */
+public class ScenarioStatusTable {
+
+ private String component;
+ private PrintStream stream;
+ private int jsIdCount;
+
+/**
+ * Creates an HTML table of red x/green check for a scenario for each
+ * configuration.
+ */
+public ScenarioStatusTable(String name, PrintStream stream) {
+ this.component = name;
+ this.stream = stream;
+}
+
+/**
+ * Prints the HTML representation of scenario status table into the given stream.
+ */
+public void print(PerformanceResults performanceResults) {
+
+ String baselineName = performanceResults.getBaselineName();
+ List scenarios = performanceResults.getComponentScenarios(this.component);
+ int size = scenarios.size();
+
+ // Print titles
+ printTitle();
+ this.stream.print("<table border=\"1\">\n");
+ this.stream.print("<tr>\n");
+ this.stream.print("<td><h4>All ");
+ this.stream.print(computeSize(scenarios));
+ this.stream.print(" scenarios</h4></td>\n");
+ printColumnsTitle(size, performanceResults);
+
+ // Print one line per scenario results
+ this.jsIdCount = 0;
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.get(i);
+ if (!scenarioResults.isValid()) continue;
+ this.stream.print("<tr>\n");
+ this.stream.print("<td>");
+ boolean hasSummary = scenarioResults.hasSummary();
+ if (hasSummary) this.stream.print("<b>");
+ String scenarioBaseline = scenarioResults.getBaselineBuildName();
+ boolean hasBaseline = baselineName.equals(scenarioBaseline);
+ if (!hasBaseline) {
+ this.stream.print("*");
+ this.stream.print(scenarioResults.getShortName());
+ this.stream.print(" <small>(vs.&nbsp;");
+ this.stream.print(scenarioBaseline);
+ this.stream.print(")</small>");
+ } else {
+ this.stream.print(scenarioResults.getShortName());
+ }
+ if (hasSummary) this.stream.print("</b>");
+ this.stream.print("\n");
+ String[] configs = performanceResults.getConfigNames(true/*sort*/);
+ int length = configs.length;
+ for (int j=0; j<length; j++) {
+ printConfigStats(scenarioResults, configs[j]);
+ }
+ }
+ this.stream.print("</table>\n");
+}
+
+private int computeSize(List scenarios) {
+ int size = scenarios.size();
+ int n = 0;
+ for (int i=0; i<size; i++) {
+ ScenarioResults scenarioResults = (ScenarioResults) scenarios.get(i);
+ if (scenarioResults.isValid()) n++;
+ }
+ return n;
+}
+
+/*
+ * Print the table columns title.
+ */
+private void printColumnsTitle(int size, PerformanceResults performanceResults) {
+ String[] configNames = performanceResults.getConfigNames(true/*sort*/);
+ String[] configBoxes = performanceResults.getConfigBoxes(true/*sort*/);
+ int length = configNames.length;
+ for (int i=0; i<length; i++) {
+ String columnTitle = configNames[i];
+ String boxName = configBoxes[i];
+ int idx = boxName.indexOf('(');
+ if (idx < 0) {
+ columnTitle = boxName;
+ } else {
+ // first line
+ StringTokenizer tokenizer = new StringTokenizer(boxName.substring(0, idx).trim(), " ");
+ StringBuffer buffer = new StringBuffer(tokenizer.nextToken());
+ while (tokenizer.hasMoreTokens()) {
+ buffer.append("&nbsp;");
+ buffer.append(tokenizer.nextToken());
+ }
+ buffer.append(' ');
+ // second line
+ tokenizer = new StringTokenizer(boxName.substring(idx).trim(), " ");
+ buffer.append(tokenizer.nextToken());
+ while (tokenizer.hasMoreTokens()) {
+ buffer.append("&nbsp;");
+ buffer.append(tokenizer.nextToken());
+ }
+ columnTitle = buffer.toString();
+ }
+ this.stream.print("<td><h5>");
+ this.stream.print(columnTitle);
+ this.stream.print("</h5>\n");
+ }
+}
+
+/*
+ * Print the scenario statistics value for the given configuration.
+ */
+private void printConfigStats(ScenarioResults scenarioResults, String config) {
+ ConfigResults configResults = scenarioResults.getConfigResults(config);
+ if (configResults == null || !configResults.isValid()) {
+ this.stream.print("<td>n/a</td>");
+ return;
+ }
+ BuildResults currentBuildResults = configResults.getCurrentBuildResults();
+ String failure = currentBuildResults.getFailure();
+ double[] deviation = configResults.getCurrentBuildDeltaInfo();
+ int confidence = Utils.confidenceLevel(deviation);
+ boolean hasFailure = failure != null;
+ String comment = currentBuildResults.getComment();
+ String image = Utils.getImage(confidence, hasFailure, comment != null);
+ this.stream.print("<td><a ");
+ if (!hasFailure|| (confidence & Utils.NAN) != 0 || failure.length() == 0){
+ // write deviation with error in table when test pass
+ this.stream.print("href=\"");
+ this.stream.print(configResults.getName());
+ this.stream.print('/');
+ this.stream.print(scenarioResults.getFileName());
+ this.stream.print(".html\">\n");
+ this.stream.print("<img hspace=\"10\" border=\"0\" src=\"");
+ this.stream.print(image);
+ this.stream.print("\"/></a>\n");
+ } else {
+ // create message with tooltip text including deviation with error plus failure message
+ this.jsIdCount+=1;
+ this.stream.print("class=\"tooltipSource\" onMouseover=\"show_element('toolTip");
+ this.stream.print(this.jsIdCount);
+ this.stream.print("')\" onMouseout=\"hide_element('toolTip");
+ this.stream.print(this.jsIdCount);
+ this.stream.print("')\" \nhref=\"");
+ this.stream.print(configResults.getName());
+ this.stream.print('/');
+ this.stream.print(scenarioResults.getFileName());
+ this.stream.print(".html\">\n");
+ this.stream.print("<img hspace=\"10\" border=\"0\" src=\"");
+ this.stream.print(image);
+ this.stream.print("\"/>\n");
+ this.stream.print("<span class=\"hidden_tooltip\" id=\"toolTip");
+ this.stream.print(this.jsIdCount);
+ this.stream.print("\">");
+ this.stream.print(failure);
+ this.stream.print("</span></a>\n");
+ }
+ String result = Utils.failureMessage(deviation, false);
+ this.stream.print(result);
+ this.stream.print("\n");
+}
+
+/*
+ * Print the status table explanationtitle.
+ */
+private void printTitle() {
+ this.stream.print("<br><h4>Scenario Status</h4>\n");
+ this.stream.print("The following table gives a complete but compact view of performance results for the component.<br>\n");
+ this.stream.print("Each line of the table shows the results for one scenario on all machines.<br><br>\n");
+ this.stream.print("The name of the scenario is in <b>bold</b> when its results are also displayed in the fingerprints<br>\n");
+ this.stream.print("and starts with an '*' when the scenario has no results in the last baseline run.<br><br>\n");
+ this.stream.print("Here are information displayed for each test (ie. in each cell):\n");
+ this.stream.print("<ul>\n");
+ this.stream.print("<li>an icon showing whether the test fails or passes and whether it's reliable or not.<br>\n");
+ this.stream.print("The legend for this icon is:\n");
+ this.stream.print("<ul>\n");
+ this.stream.print("<li>Green (<img src=\"");
+ this.stream.print(Utils.OK_IMAGE);
+ this.stream.print("\">): mark a <b>successful result</b>, which means this test has neither significant performance regression nor significant standard error</li>");
+ this.stream.print("<li>Red (<img src=\"");
+ this.stream.print(Utils.FAIL_IMAGE);
+ this.stream.print("\">): mark a <b>failing result</b>, which means this test shows a significant performance regression (more than 10%)</li>\n");
+ this.stream.print("<li>Gray (<img src=\"");
+ this.stream.print(Utils.FAIL_IMAGE_EXPLAINED);
+ this.stream.print("\">): mark a <b>failing result</b> (see above) with a comment explaining this degradation.</li>\n");
+ this.stream.print("<li>Yellow (<img src=\"");
+ this.stream.print(Utils.FAIL_IMAGE_WARN);
+ this.stream.print("\"> or <img src=\"");
+ this.stream.print(Utils.OK_IMAGE_WARN);
+ this.stream.print("\">): mark a <b>failing or successful result</b> with a significant standard error (more than ");
+ this.stream.print(Utils.STANDARD_ERROR_THRESHOLD_STRING);
+ this.stream.print(")</li>\n");
+ this.stream.print("<li>Black (<img src=\"");
+ this.stream.print(Utils.UNKNOWN_IMAGE);
+ this.stream.print("\">): mark an <b>undefined result</b>, which means that deviation on this test is not a number (<code>NaN</code>) or is infinite (happens when the reference value is equals to 0!)</li>");
+ this.stream.print("<li>\"n/a\": mark a test for with <b>no</b> performance results</li>\n");
+ this.stream.print("</ul></li>\n");
+ this.stream.print("<li>the value of the deviation from the baseline as a percentage (ie. formula is: <code>(build_test_time - baseline_test_time) / baseline_test_time</code>)</li>\n");
+ this.stream.print("<li>the value of the standard error of this deviation as a percentage (ie. formula is: <code>sqrt(build_test_stddev^2 / N + baseline_test_stddev^2 / N) / baseline_test_time</code>)<br>\n");
+ this.stream.print("When test only has one measure, the standard error cannot be computed and is replaced with a '<font color=\"#CCCC00\">[n/a]</font>'.</li>\n");
+ this.stream.print("</ul>\n");
+ this.stream.print("<u>Hints</u>:<ul>\n");
+ this.stream.print("<li>fly over image of failing tests to see the complete error message</li>\n");
+ this.stream.print("<li>to look at the complete and detailed test results, click on its image</li>\n");
+ this.stream.print("</ul>\n");
+}
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraph.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraph.java
new file mode 100644
index 0000000..467bdd5
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraph.java
@@ -0,0 +1,299 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.util.*;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.test.internal.performance.data.Dim;
+
+public class TimeLineGraph extends LineGraph{
+
+ Hashtable fItemGroups;
+
+ public TimeLineGraph (String title, Dim dim) {
+ super(title, dim);
+ this.fItemGroups=new Hashtable();
+ }
+
+ public void paint(Image im) {
+
+ Rectangle bounds= im.getBounds();
+
+ GC g= new GC(im);
+
+ Point ee= g.stringExtent(this.fTitle);
+ int titleHeight= ee.y;
+
+ double maxItem= getMaxItem();
+ double minItem= getMinItem();
+
+ int max= (int) (Math.ceil(maxItem * (maxItem < 0 ? 0.8 : 1.2)));
+ int min= (int) (Math.floor(minItem * (minItem < 0 ? 1.2 : 0.8)));
+
+ String smin= this.fDimension.getDisplayValue(min);
+ Point emin= g.stringExtent(smin);
+
+ String smax= this.fDimension.getDisplayValue(max);
+ Point emax= g.stringExtent(smax);
+
+ int labelWidth= Math.max(emin.x, emax.x) + 2;
+
+ int top= PADDING;
+ int bottom= bounds.height - titleHeight - PADDING;
+ int left= PADDING + labelWidth;
+
+ //getMostRecent
+ TimeLineGraphItem lastItem= getMostRecent(this.fItemGroups);
+ int right=bounds.width - PADDING/2;
+ if (lastItem!=null)
+ right= bounds.width - lastItem.getSize(g).x - PADDING/2;
+
+ // draw the max and min values
+ g.drawString(smin, PADDING/2+labelWidth-emin.x, bottom-titleHeight, true);
+ g.drawString(smax, PADDING/2+labelWidth-emax.x, top, true);
+ g.drawString("TIME (not drawn to scale)", (right-left)/3+PADDING+titleHeight,bottom-PADDING+(titleHeight*2), true);
+
+ // draw the vertical and horizontal lines
+ g.drawLine(left, top, left, bottom);
+ g.drawLine(left, bottom, right, bottom);
+
+ Color oldbg= g.getBackground();
+ Color oldfg= g.getForeground();
+
+ setCoordinates(right-left,left,bottom-top,bottom,max-min);
+
+ Enumeration _enum=this.fItemGroups.elements();
+ Comparator comparator=new TimeLineGraphItem.GraphItemComparator();
+
+ while (_enum.hasMoreElements()) {
+ List items = (List) _enum.nextElement();
+ Object[] fItemsArray=items.toArray();
+ Arrays.sort(fItemsArray,comparator);
+ int lastx = 0;
+ int lasty = 0;
+
+ int n = fItemsArray.length;
+
+ for (int i = 0; i < n; i++) {
+ TimeLineGraphItem thisItem = (TimeLineGraphItem) fItemsArray[i];
+
+ int yposition = thisItem.y;
+ int xposition = thisItem.x;
+ g.setLineWidth(1);
+
+ g.setBackground(thisItem.color);
+ g.setForeground(thisItem.color);
+
+ if (thisItem.drawAsBaseline){
+ g.setLineWidth(0);
+ g.drawLine(xposition, yposition,right,yposition);
+ g.drawLine(left,yposition,xposition, yposition);
+ }
+
+ if (i > 0) // don't draw for first segment
+ g.drawLine(lastx, lasty, xposition, yposition);
+
+ g.setBackground(thisItem.color);
+ g.setForeground(thisItem.color);
+ // g.fillOval(xposition - 2, yposition - 2, 6, 6);
+ g.fillRectangle(xposition - 2, yposition - 2, 5, 5);
+
+ if (thisItem.isSpecial)
+ g.drawRectangle(xposition -4, yposition - 4, 8, 8);
+
+ if (this.fAreaBuffer == null)
+ this.fAreaBuffer = new StringBuffer();
+
+ this.fAreaBuffer.append("\r<area shape=\"circle\" coords=\""
+ + (xposition - 2) + ',' + (yposition - 2) + ',' + 5
+ + " alt=\"" + thisItem.title + ": "
+ + thisItem.description + "\"" + " title=\""
+ + thisItem.title + ": " + thisItem.description + "\">");
+
+ int shift;
+ if (i > 0 && yposition < lasty)
+ shift = 3; // below dot
+ else
+ shift = -(2 * titleHeight + 3); // above dot
+ if (thisItem.displayDescription) {
+ g.drawString(thisItem.title, xposition + 2, yposition
+ + shift, true);
+ g.drawString(thisItem.description, xposition + 2, yposition
+ + shift + titleHeight, true);
+ }
+ g.setBackground(oldbg);
+ g.setForeground(oldfg);
+
+ lastx = xposition;
+ lasty = yposition;
+ }
+ }
+
+ g.dispose();
+ }
+
+ public void addItem(String groupName,String name, String description, double value, Color col, boolean display, long timestamp) {
+ addItem(groupName, name, description, value, col, display, timestamp,false);
+ }
+
+ public void addItem(String groupName,String name, String description, double value, Color col, boolean display, long timestamp,boolean isSpecial) {
+ addItem(groupName, name,description, value, col, display,
+ timestamp,isSpecial,false);
+ }
+
+ public void addItem(String groupName,String name, String description, double value, Color col, boolean display, long timestamp,boolean isSpecial,boolean drawBaseline) {
+ List items = (List) this.fItemGroups.get(groupName);
+ if (this.fItemGroups.get(groupName) == null) {
+ items=new ArrayList();
+ this.fItemGroups.put(groupName, items);
+ }
+ items.add(new TimeLineGraphItem(name, description, value, col, display,
+ timestamp,isSpecial,drawBaseline));
+ }
+
+ public double getMaxItem() {
+ Enumeration _enum=this.fItemGroups.elements();
+ double maxItem= 0;
+ while (_enum.hasMoreElements()) {
+ List items = (List) _enum.nextElement();
+ for (int i = 0; i < items.size(); i++) {
+ TimeLineGraphItem graphItem = (TimeLineGraphItem) items.get(i);
+ if (graphItem.value > maxItem)
+ maxItem = graphItem.value;
+ }
+ }
+ if (maxItem == 0)
+ return 1;
+ return maxItem;
+ }
+
+ public double getMinItem() {
+ Enumeration _enum = this.fItemGroups.elements();
+ double minItem = getMaxItem();
+
+ while (_enum.hasMoreElements()) {
+ List items = (List) _enum.nextElement();
+ for (int i = 0; i < items.size(); i++) {
+ TimeLineGraphItem graphItem = (TimeLineGraphItem) items.get(i);
+ if (graphItem.value < minItem)
+ minItem = graphItem.value;
+ }
+ }
+ if (minItem == 0)
+ return -1;
+ return minItem;
+ }
+
+ private TimeLineGraphItem getMostRecent(Hashtable lineGraphGroups) {
+ Enumeration _enum = lineGraphGroups.elements();
+ long mostRecentTimestamp = 0;
+ TimeLineGraphItem mostRecentItem = null;
+
+ while (_enum.hasMoreElements()) {
+ List items = (List) _enum.nextElement();
+ for (int i = 0; i < items.size(); i++) {
+ if (items.size() == 1)
+ return (TimeLineGraphItem) items.get(i);
+ else {
+ TimeLineGraphItem graphItem = (TimeLineGraphItem) items.get(i);
+ if (graphItem.timestamp > mostRecentTimestamp) {
+ mostRecentTimestamp = graphItem.timestamp;
+ mostRecentItem = (TimeLineGraphItem) items.get(i);
+ }
+ }
+ }
+ }
+ return mostRecentItem;
+ }
+
+ private void setCoordinates(int width, int xOffset, int height, int yOffset, int yValueRange){
+
+ List mainGroup=(ArrayList)this.fItemGroups.get("main");
+ List referenceGroup=(ArrayList)this.fItemGroups.get("reference");
+
+ Comparator comparator=new TimeLineGraphItem.GraphItemComparator();
+
+ Object[] fItemsArray=mainGroup.toArray();
+ Arrays.sort(fItemsArray,comparator);
+
+ int n = mainGroup.size();
+ int xIncrement=width/n;
+ double max=getMaxItem()*1.2;
+// double min=getMinItem()*0.8;
+
+ for (int i = 0; i < n; i++) {
+ TimeLineGraphItem thisItem = (TimeLineGraphItem) fItemsArray[i];
+ thisItem.setX(xOffset + (i * xIncrement));
+ thisItem.setY((int)(PADDING+((max-thisItem.value) * (height)/(yValueRange))));
+
+ }
+
+ if (referenceGroup==null)
+ return;
+
+ n = referenceGroup.size();
+ for (int i = 0; i < n; i++) {
+ TimeLineGraphItem thisItem = (TimeLineGraphItem) referenceGroup.get(i);
+ if (thisItem.timestamp==-1)
+ thisItem.setX(xOffset + (i * (width/n)));
+ else
+ setRelativeXPosition(thisItem,mainGroup);
+
+ thisItem.setY((int)(PADDING+((max-thisItem.value) * (height)/(yValueRange))));
+
+ }
+ }
+
+
+ private void setRelativeXPosition (TimeLineGraphItem thisItem, List items){
+ Comparator comparator=new TimeLineGraphItem.GraphItemComparator();
+ Object[] fItemsArray=items.toArray();
+ Arrays.sort(fItemsArray,comparator);
+
+ TimeLineGraphItem closestPrecedingItem=null;
+ long minimumTimeDiffPreceding=thisItem.timestamp;
+
+ TimeLineGraphItem closestFollowingItem=null;
+ long minimumTimeDiffFollowing=thisItem.timestamp;
+
+ for (int i=0;i<fItemsArray.length;i++){
+ TimeLineGraphItem anItem=(TimeLineGraphItem)fItemsArray[i];
+ long timeDiff=thisItem.timestamp-anItem.timestamp;
+
+ if (timeDiff>0&&timeDiff<minimumTimeDiffPreceding){
+ closestPrecedingItem=anItem;
+ minimumTimeDiffPreceding=thisItem.timestamp-anItem.timestamp;
+ }
+ if (timeDiff<=0&&Math.abs(timeDiff)<=minimumTimeDiffFollowing){
+ closestFollowingItem=anItem;
+ minimumTimeDiffFollowing=thisItem.timestamp-anItem.timestamp;
+ }
+ }
+ if (closestFollowingItem==null && closestPrecedingItem!=null)
+ thisItem.setX(closestPrecedingItem.x);
+
+ else if (closestFollowingItem!=null && closestPrecedingItem==null)
+ thisItem.setX(closestFollowingItem.x);
+ else{
+ long timeRange=closestFollowingItem.timestamp-closestPrecedingItem.timestamp;
+
+ int xRange=closestFollowingItem.x-closestPrecedingItem.x;
+ double increments=(xRange*1.0)/timeRange;
+
+ thisItem.setX((int)(Math.round((thisItem.timestamp-closestPrecedingItem.timestamp)*increments)+closestPrecedingItem.x));
+ }
+ }
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraphItem.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraphItem.java
new file mode 100644
index 0000000..c52d0a9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/TimeLineGraphItem.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.util.Comparator;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+
+public class TimeLineGraphItem {
+
+
+ String title;
+ String description=null;
+ double value;
+ Color color;
+ boolean displayDescription=false;
+ long timestamp;
+ boolean isSpecial=false;
+ boolean drawAsBaseline=false;
+ int x;
+ int y;
+
+ TimeLineGraphItem(String title, String description,double value,Color color,boolean display, long timestamp, boolean isSpecial,boolean isBaseline) {
+ this(title, description, value, color,display, timestamp,isSpecial);
+ this.drawAsBaseline=isBaseline;
+ }
+
+ TimeLineGraphItem(String title, String description,double value,Color color,boolean display, long timestamp, boolean isSpecial) {
+ this(title, description, value, color,display, timestamp);
+ this.isSpecial=isSpecial;
+ }
+
+ TimeLineGraphItem(String title, String description,double value,Color color,boolean display, long timestamp) {
+ this(title, description, value, color,timestamp);
+ this.displayDescription=display;
+ }
+
+ TimeLineGraphItem(String title, String description, double value, Color color,long timestamp) {
+ this.title= title;
+ this.value= value;
+ this.color= color;
+ this.description= description;
+ this.timestamp=timestamp;
+ }
+
+ Point getSize(GC g) {
+ Point e1= g.stringExtent(this.description);
+ Point e2= g.stringExtent(this.title);
+ return new Point(Math.max(e1.x, e2.x), e1.y+e2.y);
+ }
+
+ public static class GraphItemComparator implements Comparator{
+ public int compare(Object o1, Object o2) {
+ long ts1=((TimeLineGraphItem)o1).timestamp;
+ long ts2=((TimeLineGraphItem)o2).timestamp;
+
+ if (ts1>ts2)
+ return 1;
+ if (ts1<ts2)
+ return -1;
+
+ return 0;
+ }
+ }
+
+ public int getX() {
+ return this.x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return this.y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/UiPlugin.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/UiPlugin.java
new file mode 100644
index 0000000..58462dd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/UiPlugin.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class UiPlugin extends Plugin {
+ //The shared instance.
+ private static UiPlugin plugin;
+ private IPreferenceStore preferenceStore;
+
+ /**
+ * The constructor.
+ */
+ public UiPlugin() {
+ super();
+ if (plugin == null) {
+ plugin = this;
+ }
+ }
+
+ /**
+ * This method is called upon plug-in activation
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ }
+
+ /**
+ * This method is called when the plug-in is stopped
+ */
+ public void stop(BundleContext context) throws Exception {
+ super.stop(context);
+ plugin = null;
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static UiPlugin getDefault() {
+ return plugin;
+ }
+
+ public IPreferenceStore getPreferenceStore() {
+ if (this.preferenceStore == null) {
+ this.preferenceStore = new ScopedPreferenceStore(new InstanceScope(), getBundle().getSymbolicName());
+
+ }
+ return this.preferenceStore;
+ }
+
+}
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Utils.java b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Utils.java
new file mode 100644
index 0000000..b4feffd
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/Utils.java
@@ -0,0 +1,416 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.test.performance.ui;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URL;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Enumeration;
+import java.util.HashMap;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.test.internal.performance.PerformanceTestPlugin;
+import org.eclipse.test.internal.performance.db.Variations;
+import org.eclipse.test.internal.performance.results.utils.Util;
+import org.osgi.framework.Bundle;
+
+
+public class Utils {
+
+ public final static double STANDARD_ERROR_THRESHOLD = 0.03; // 3%
+ static final NumberFormat PERCENT_FORMAT = NumberFormat.getPercentInstance();
+ static {
+ PERCENT_FORMAT.setMaximumFractionDigits(1);
+ }
+ static final DecimalFormat DEVIATION_FORMAT = (DecimalFormat) NumberFormat.getPercentInstance();
+ static {
+ DEVIATION_FORMAT.setMaximumFractionDigits(1);
+ DEVIATION_FORMAT.setMinimumFractionDigits(1);
+ DEVIATION_FORMAT.setPositivePrefix("+");
+ DEVIATION_FORMAT.setNegativePrefix("- ");
+ }
+ static final DecimalFormat STDERR_FORMAT = (DecimalFormat) NumberFormat.getNumberInstance();
+ static {
+ STDERR_FORMAT.setMaximumFractionDigits(1);
+ STDERR_FORMAT.setMinimumFractionDigits(1);
+ STDERR_FORMAT.setMultiplier(100);
+ }
+ public final static String STANDARD_ERROR_THRESHOLD_STRING = PERCENT_FORMAT.format(STANDARD_ERROR_THRESHOLD);
+
+ // Image files
+ public final static String UNKNOWN_IMAGE="images/Unknown.gif";
+ public final static String OK_IMAGE="images/OK.gif";
+ public final static String OK_IMAGE_WARN="images/OK_caution.gif";
+ public final static String FAIL_IMAGE="images/FAIL.gif";
+ public final static String FAIL_IMAGE_WARN="images/FAIL_caution.gif";
+ public final static String FAIL_IMAGE_EXPLAINED="images/FAIL_greyed.gif";
+ public final static String LIGHT="images/light.gif";
+ public final static String WARNING_OBJ="images/warning_obj.gif";
+
+ // Java script files
+ public final static String TOOLTIP_SCRIPT = "scripts/ToolTip.js";
+ public final static String TOOLTIP_STYLE = "scripts/ToolTip.css";
+ public final static String FINGERPRINT_SCRIPT = "scripts/Fingerprints.js";
+
+ // Doc files
+ public final static String HELP = "doc/help.html";
+
+ // Status
+ public final static int OK = 0;
+ public final static int NAN = 0x1;
+ public final static int ERR = 0x2;
+
+ /**
+ * Return &lt;html&gt;&lt;head&gt;&lt;meta http-equiv="Content-Type"
+ * content="text/html; charset=iso-8859-1"&gt;
+ */
+ public final static String HTML_OPEN = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
+
+ /**
+ * Return "&lt;/html&gt;".
+ */
+ public final static String HTML_CLOSE = "</html>\n";
+
+ /**
+ * Default style-sheet used on eclipse.org
+ */
+ public final static String HTML_DEFAULT_CSS = "<style type=\"text/css\">" + "p, table, td, th { font-family: arial, helvetica, geneva; font-size: 10pt}\n"
+ + "pre { font-family: \"Courier New\", Courier, mono; font-size: 10pt}\n" + "h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}\n"
+ + "code { font-family: \"Courier New\", Courier, mono; font-size: 10pt}\n" + "sup { font-family: arial,helvetica,geneva; font-size: 10px}\n"
+ + "h3 { font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}\n" + "li { font-family: arial, helvetica, geneva; font-size: 10pt}\n"
+ + "h1 { font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}\n"
+ + "body { font-family: arial, helvetica, geneva; font-size: 10pt; clip: rect( ); margin-top: 5mm; margin-left: 3mm}\n"
+ + ".indextop { font-size: x-large;; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold}\n"
+ + ".indexsub { font-size: xx-small;; font-family: Arial, Helvetica, sans-serif; color: #8080FF}\n" + "</style>\n\n";
+
+ /**
+ * Creates a Variations object using build id pattern, config and jvm.
+ *
+ * @param buildIdPattern
+ * @param config
+ * @param jvm
+ */
+ public static Variations getVariations(String buildIdPattern, String config, String jvm) {
+ String buildIdPatterns = buildIdPattern.replace(',', '%');
+ Variations variations = new Variations();
+ variations.put(PerformanceTestPlugin.CONFIG, config);
+ variations.put(PerformanceTestPlugin.BUILD, buildIdPatterns);
+ variations.put("jvm", jvm);
+ return variations;
+ }
+
+ /**
+ * Copy all bundle files contained in the given path
+ */
+ public static void copyBundleFiles(Bundle bundle, String path, String pattern, File output) {
+ Enumeration imageFiles = bundle.findEntries(path, pattern, false);
+ while (imageFiles.hasMoreElements()) {
+ URL url = (URL) imageFiles.nextElement();
+ try {
+ File outputFile = new File(output, url.getFile());
+ if (!outputFile.getParentFile().exists()) {
+ outputFile.getParentFile().mkdirs();
+ }
+ Util.copyStream(url.openStream(), outputFile);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Downsample Image to 8 bit depth format so that the resulting image data
+ * can be saved to GIF. Note. If the source image contains photo quality
+ * content with more than 256 colours, resulting data will look very poor.
+ */
+ static int closest(RGB[] rgbs, int n, RGB rgb) {
+ int minDist = 256 * 256 * 3;
+ int minIndex = 0;
+ for (int i = 0; i < n; ++i) {
+ RGB rgb2 = rgbs[i];
+ int da = rgb2.red - rgb.red;
+ int dg = rgb2.green - rgb.green;
+ int db = rgb2.blue - rgb.blue;
+ int dist = da * da + dg * dg + db * db;
+ if (dist < minDist) {
+ minDist = dist;
+ minIndex = i;
+ }
+ }
+ return minIndex;
+ }
+
+ static class ColorCounter implements Comparable {
+ RGB rgb;
+
+ int count;
+
+ public int compareTo(Object o) {
+ return ((ColorCounter) o).count - this.count;
+ }
+ }
+
+ public static ImageData downSample(Image image) {
+ ImageData data = image.getImageData();
+ if (!data.palette.isDirect && data.depth <= 8)
+ return data;
+
+ // compute a histogram of color frequencies
+ HashMap freq = new HashMap();
+ int width = data.width;
+ int[] pixels = new int[width];
+ int[] maskPixels = new int[width];
+ for (int y = 0, height = data.height; y < height; ++y) {
+ data.getPixels(0, y, width, pixels, 0);
+ for (int x = 0; x < width; ++x) {
+ RGB rgb = data.palette.getRGB(pixels[x]);
+ ColorCounter counter = (ColorCounter) freq.get(rgb);
+ if (counter == null) {
+ counter = new ColorCounter();
+ counter.rgb = rgb;
+ freq.put(rgb, counter);
+ }
+ counter.count++;
+ }
+ }
+
+ // sort colors by most frequently used
+ ColorCounter[] counters = new ColorCounter[freq.size()];
+ freq.values().toArray(counters);
+ Arrays.sort(counters);
+
+ // pick the most frequently used 256 (or fewer), and make a palette
+ ImageData mask = null;
+ if (data.transparentPixel != -1 || data.maskData != null) {
+ mask = data.getTransparencyMask();
+ }
+ int n = Math.min(256, freq.size());
+ RGB[] rgbs = new RGB[n + (mask != null ? 1 : 0)];
+ for (int i = 0; i < n; ++i)
+ rgbs[i] = counters[i].rgb;
+ if (mask != null) {
+ rgbs[rgbs.length - 1] = data.transparentPixel != -1 ? data.palette.getRGB(data.transparentPixel) : new RGB(255, 255, 255);
+ }
+ PaletteData palette = new PaletteData(rgbs);
+
+ // create a new image using the new palette:
+ // for each pixel in the old image, look up the best matching
+ // index in the new palette
+ ImageData newData = new ImageData(width, data.height, 8, palette);
+ if (mask != null)
+ newData.transparentPixel = rgbs.length - 1;
+ for (int y = 0, height = data.height; y < height; ++y) {
+ data.getPixels(0, y, width, pixels, 0);
+ if (mask != null)
+ mask.getPixels(0, y, width, maskPixels, 0);
+ for (int x = 0; x < width; ++x) {
+ if (mask != null && maskPixels[x] == 0) {
+ pixels[x] = rgbs.length - 1;
+ } else {
+ RGB rgb = data.palette.getRGB(pixels[x]);
+ pixels[x] = closest(rgbs, n, rgb);
+ }
+ }
+ newData.setPixels(0, y, width, pixels, 0);
+ }
+ return newData;
+ }
+
+ /**
+ * Returns the date/time from the build id in format yyyymmddhm
+ *
+ * @param buildId
+ * @return date/time in format YYYYMMDDHHMM, ie. 200504060010
+ */
+ public static long getDateFromBuildID(String buildId) {
+ return getDateFromBuildID(buildId, false);
+ }
+
+ public static long getDateFromBuildID(String buildId, boolean matchLast) {
+ Calendar calendar = Calendar.getInstance();
+
+ if (buildId.indexOf('_') != -1) {
+ String[] buildIdParts = buildId.split("_");
+
+ int buildIdSegment = 1;
+ if (matchLast)
+ buildIdSegment = buildIdParts.length - 1;
+ // if release build, expect <release>_<release date and
+ // timestamp>_<date and timestamp test ran>
+ // use test date and time for plotting
+ int year = Integer.parseInt(buildIdParts[buildIdSegment].substring(0, 4));
+ int month = Integer.parseInt(buildIdParts[buildIdSegment].substring(4, 6)) - 1;
+ int date = Integer.parseInt(buildIdParts[buildIdSegment].substring(6, 8));
+ int hours = Integer.parseInt(buildIdParts[buildIdSegment].substring(8, 10));
+ int min = Integer.parseInt(buildIdParts[buildIdSegment].substring(10, 12));
+
+ calendar.set(year, month, date, hours, min);
+ return calendar.getTimeInMillis();
+
+ } else if (buildId.indexOf('-') != -1) {
+ // if regular build, expect <buildType><date>-<time> format
+ String[] buildIdParts = buildId.split("-");
+ int year = Integer.parseInt(buildIdParts[0].substring(1, 5));
+ int month = Integer.parseInt(buildIdParts[0].substring(5, 7)) - 1;
+ int date = Integer.parseInt(buildIdParts[0].substring(7, 9));
+ int hours = Integer.parseInt(buildIdParts[1].substring(0, 2));
+ int min = Integer.parseInt(buildIdParts[1].substring(2, 4));
+ calendar.set(year, month, date, hours, min);
+
+ return calendar.getTimeInMillis();
+ }
+
+ return -1;
+ }
+
+ /**
+ * Returns a message corresponding to given statistics.
+ *
+ * @param resultStats The value with its standard error
+ * @param full
+ * @return The failure message. May be empty if stats are good...
+ */
+ public static String failureMessage(double[] resultStats, boolean full) {
+ StringBuffer buffer = new StringBuffer();
+ int level = confidenceLevel(resultStats);
+// boolean isWarn = (level & WARN) != 0;
+ boolean isErr = (level & ERR) != 0;
+ if (full) {
+ if (isErr) {
+ buffer.append("*** WARNING *** ");
+ buffer.append(Messages.bind(Messages.standardError, PERCENT_FORMAT.format(resultStats[1]), STANDARD_ERROR_THRESHOLD_STRING));
+ }
+ return buffer.toString();
+ }
+ if (resultStats != null) {
+ double deviation = resultStats[0];
+ buffer.append("<font color=\"#0000FF\" size=\"1\">");
+ if (Double.isNaN(deviation) || Double.isInfinite(deviation)) {
+ buffer.append(" [n/a]");
+ } else {
+ double stderr = resultStats[1];
+ deviation = Math.abs(deviation)<0.001 ? 0 : -deviation;
+ if (Double.isNaN(stderr) || Double.isInfinite(stderr)) {
+ buffer.append(DEVIATION_FORMAT.format(deviation));
+ buffer.append("</font><font color=\"#DDDD00\" size=\"1\"> ");
+ buffer.append(" [n/a]");
+ } else {
+ buffer.append(DEVIATION_FORMAT.format(deviation));
+ buffer.append(" [&#177;");
+ buffer.append(STDERR_FORMAT.format(Math.abs(stderr)));
+ buffer.append(']');
+ }
+ }
+ buffer.append("</font>");
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Returns the confidence level for given statistics:
+ * <ul>
+ * <li>{@link #NAN}: if the value is infinite or not a number</li>
+ * <li>{@link #ERR}: if the standard error is over the expected threshold ({@link #STANDARD_ERROR_THRESHOLD})</li>
+ * <li>{@link #OK}: in all other cases</li>
+ * </ul>
+ *
+ * @param resultStats array of 2 doubles, the former is the average value and
+ * the latter is the standard error made while computing the average.
+ * @return a value telling caller the level of confidence of the provided value
+ */
+ public static int confidenceLevel(double[] resultStats) {
+ int level = OK;
+ if (resultStats != null){
+ if (Double.isNaN(resultStats[0]) || Double.isInfinite(resultStats[0])) {
+ level = NAN;
+ } else {
+// if (resultStats[1] >= (STANDARD_ERROR_THRESHOLD/2)) { // warns standard error higher than the half of authorized threshold
+// level |= WARN;
+// }
+ if (resultStats[1] >= STANDARD_ERROR_THRESHOLD) { // standard error higher than the authorized threshold
+ level = ERR;
+ }
+ }
+ }
+ return level;
+ }
+
+ /**
+ * Get an icon image corresponding to a given level of confidence and explanation.
+ *
+ * @param confidence the confiden level
+ * @param hasExplanation flags indicates whether the confidence may be tempered by an explanation
+ * @return Corresponding image
+ */
+ public static String getImage(int confidence, boolean scenarioFailed, boolean hasExplanation) {
+ String image = null;
+
+ if (scenarioFailed) {
+ if (hasExplanation) {
+ image = FAIL_IMAGE_EXPLAINED;
+ } else if ((confidence & ERR) != 0) {
+ image = FAIL_IMAGE_WARN;
+ } else {
+ image = FAIL_IMAGE;
+ }
+ } else if ((confidence & NAN) != 0) {
+ image = UNKNOWN_IMAGE;
+ } else if ((confidence & ERR) != 0) {
+ image = OK_IMAGE_WARN;
+ } else {
+ image = OK_IMAGE;
+ }
+ return image;
+ }
+
+/**
+ * @param outputFile
+ * @param image
+ */
+public static void saveImage(File outputFile, Image image) {
+ // Save image
+ ImageData data = downSample(image);
+ ImageLoader imageLoader = new ImageLoader();
+ imageLoader.data = new ImageData[] { data };
+
+ OutputStream out = null;
+ try {
+ out = new BufferedOutputStream(new FileOutputStream(outputFile));
+ imageLoader.save(out, SWT.IMAGE_GIF);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ image.dispose();
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e1) {
+ // silently ignored
+ }
+ }
+ }
+}
+
+} \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/messages.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/messages.properties
new file mode 100644
index 0000000..a486ba1
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui/messages.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2000, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+
+### Performance Tests Messages.
+
+standardError = Standard error on this test is {0} (should be less than {1} to become reliable!)
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/toc.xml b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/toc.xml
new file mode 100644
index 0000000..864ff8a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance.ui/toc.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Performance Results Guide">
+ <topic label="Overview" href="html/overview.html">
+ <topic label="Preferences" href="html/preferences.html"/>
+ <topic label="Local data" href="html/local_data.html"/>
+ </topic>
+ <topic label="Views">
+ <topic label="Components" href="html/components.html"/>
+ <topic label="Properties" href="html/properties.html"/>
+ <topic label="Builds" href="html/builds.html"/>
+ <topic label="Results" href="html/results.html"/>
+ </topic>
+ <topic label="Verification" href="html/verification.html"/>
+</toc>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance_3.6.0.v20091014.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance_3.6.0.v20091014.jar
new file mode 100644
index 0000000..b8efa5c
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.test.performance_3.6.0.v20091014.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar
new file mode 100644
index 0000000..3118754
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.forms_3.5.2.r36_v20100702.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.forms_3.5.2.r36_v20100702.jar
new file mode 100644
index 0000000..7f93baf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.forms_3.5.2.r36_v20100702.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.ide_3.6.2.M20101117-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.ide_3.6.2.M20101117-0800.jar
new file mode 100644
index 0000000..a76646a
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.ide_3.6.2.M20101117-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.views_3.5.0.I20100527-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.views_3.5.0.I20100527-0800.jar
new file mode 100644
index 0000000..1d45b40
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.views_3.5.0.I20100527-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.workbench_3.6.1.M20101117-0800.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.workbench_3.6.1.M20101117-0800.jar
new file mode 100644
index 0000000..d02716d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui.workbench_3.6.1.M20101117-0800.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui_3.6.1.M20100826-1330.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui_3.6.1.M20100826-1330.jar
new file mode 100644
index 0000000..a8b8a3f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.ui_3.6.1.M20100826-1330.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.configurator_3.3.100.v20100512.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.configurator_3.3.100.v20100512.jar
new file mode 100644
index 0000000..c798ccf
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.configurator_3.3.100.v20100512.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.core.win32_3.2.200.v20100512.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.core.win32_3.2.200.v20100512.jar
new file mode 100644
index 0000000..edf909d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.eclipse.update.core.win32_3.2.200.v20100512.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..07a0f6f
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..b1685b6
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF
@@ -0,0 +1,20 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: pXInLaqUzzcxBBiLY1MRbUmnHvg=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: aF40eMCnlmmT3YC6fdijAlyveCQ=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
+
+Name: junit.jar
+SHA1-Digest: U5gXqfRyC1uDVOHu3Bmw1dbYbzU=
+
+Name: about.html
+SHA1-Digest: OB4tUYTIdwsIAbpHUAzVaDJ+OHQ=
+
+Name: about_files/cpl-v10.html
+SHA1-Digest: YZUV+BFnw6XLRdU0eCv1FYdy8cQ=
+
+Name: plugin.properties
+SHA1-Digest: 9r0GiUvSCEu/hSKDiIxBDU+lQRc=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bae6fc3
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ClassPath: junit.jar
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.3
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.junit
+Export-Package: junit.awtui;version="3.8.2",junit.extensions;version="
+ 3.8.2",junit.framework;version="3.8.2",junit.runner;version="3.8.2",j
+ unit.swingui;version="3.8.2",junit.swingui.icons;version="3.8.2",juni
+ t.textui;version="3.8.2"
+Bundle-Version: 3.8.2.v3_8_2_v20100427-1100
+Bundle-ManifestVersion: 2
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
+
+Name: junit.jar
+SHA1-Digest: 0GZQV1CgnWzF6o541NJqtsv5apE=
+
+Name: about_files/cpl-v10.html
+SHA1-Digest: o0b19ceZ+HQHVX0Ops751AQVdwM=
+
+Name: about.html
+SHA1-Digest: UFe6k4Ad9XpZmuWF46WW3vk9dVA=
+
+Name: plugin.properties
+SHA1-Digest: Czd59izsFwoMYKizyqPC7C25hzQ=
+
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/eclipse.inf b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/eclipse.inf
new file mode 100644
index 0000000..68d6fa9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/eclipse.inf
@@ -0,0 +1,4 @@
+#Processed using Jarprocessor
+jarprocessor.exclude.children.sign = true
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about.html
new file mode 100644
index 0000000..7ed58df
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2008</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for
+terms and conditions of use.</p>
+
+<p>The Content includes items that have been sourced from third parties as follows:</p>
+
+<h4>JUnit 3.8.2</h4>
+
+<p>The plug-in is accompanied by software developed by JUnit.org. The JUnit 3.8.2 code included with the plug-in includes no modifications.
+Your use of JUnit 3.8.2 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the
+Common Public License Version 1.0 (&quot;CPL&quot;). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
+(a local copy can be found <a href="about_files/cpl-v10.html">here</a>)</p>
+
+<p>The original binaries and source are available at the <a href="http://junit.org">JUnit web site</a>.
+
+</body>
+</html> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about_files/cpl-v10.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about_files/cpl-v10.html
new file mode 100644
index 0000000..455e7b0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/about_files/cpl-v10.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Common Public License - v 1.0</TITLE>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
+
+
+<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
+<P><B></B><FONT SIZE="3"></FONT>
+<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>1. DEFINITIONS</B></FONT>
+<P><FONT SIZE="2">"Contribution" means:</FONT>
+
+<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
+b) in the case of each subsequent Contributor:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i) changes to the Program, and</FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) additions to the Program;</FONT></UL>
+
+
+<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. </FONT><FONT SIZE="2">Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. </FONT></UL>
+
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. </FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
+<P><FONT SIZE="2"><B></B></FONT>
+<P><FONT SIZE="2"><B>2. GRANT OF RIGHTS</B></FONT>
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a) </FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.</FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+
+<UL><FONT SIZE="2">d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
+
+
+<UL><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2"><B>3. REQUIREMENTS</B></FONT>
+<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
+
+<UL><FONT SIZE="2">a) it complies with the terms and conditions of this Agreement; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">b) its license agreement:</FONT></UL>
+
+
+<UL><FONT SIZE="2">i) effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
+
+
+<UL><FONT SIZE="2">ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
+
+
+<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2"> states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
+
+
+<UL><FONT SIZE="2">iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
+
+
+<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
+
+<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
+
+<UL><FONT SIZE="2">a) it must be made available under this Agreement; and </FONT></UL>
+
+
+<UL><FONT SIZE="2">b) a copy of this Agreement must be included with each copy of the Program. </FONT></UL>
+
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program. </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. </FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>4. COMMERCIAL DISTRIBUTION</B></FONT>
+<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
+<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5. NO WARRANTY</B></FONT>
+<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT SIZE="2"> and assumes all risks associated with its exercise of rights under this Agreement</FONT><FONT SIZE="2">, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, </FONT><FONT SIZE="2">programs or equipment, and unavailability or interruption of operations</FONT><FONT SIZE="2">. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6. DISCLAIMER OF LIABILITY</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"><B>7. GENERAL</B></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. </FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. </FONT><FONT SIZE="2">Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new </FONT><FONT SIZE="2">version. </FONT><FONT SIZE="2">Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, </FONT><FONT SIZE="2">by implication, estoppel or otherwise</FONT><FONT SIZE="2">.</FONT><FONT SIZE="2"> All rights in the Program not expressly granted under this Agreement are reserved.</FONT>
+<P><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.</FONT>
+<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
+<P><FONT SIZE="2"></FONT>
+
+</BODY>
+
+</HTML> \ No newline at end of file
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/junit.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/junit.jar
new file mode 100644
index 0000000..0f7b3df
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/junit.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/plugin.properties b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/plugin.properties
new file mode 100644
index 0000000..a495ea8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2000, 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+
+pluginName=JUnit Testing Framework
+providerName=Eclipse Orbit
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.server_6.1.23.v201004211559.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.server_6.1.23.v201004211559.jar
new file mode 100644
index 0000000..8269781
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.server_6.1.23.v201004211559.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.util_6.1.23.v201004211559.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.util_6.1.23.v201004211559.jar
new file mode 100644
index 0000000..2b5d9ed
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.mortbay.jetty.util_6.1.23.v201004211559.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.objectweb.asm_3.2.0.v200909071300.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.objectweb.asm_3.2.0.v200909071300.jar
new file mode 100644
index 0000000..47e77a8
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.objectweb.asm_3.2.0.v200909071300.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.core_2.2.0.v20100429.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.core_2.2.0.v20100429.jar
new file mode 100644
index 0000000..bd5e31d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.core_2.2.0.v20100429.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.pb_2.2.0.v20100429.jar b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.pb_2.2.0.v20100429.jar
new file mode 100644
index 0000000..5a955c9
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/plugins/org.sat4j.pb_2.2.0.v20100429.jar
Binary files differ
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme.html
new file mode 100644
index 0000000..6e2827d
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme.html
@@ -0,0 +1,305 @@
+<HTML>
+<HEAD>
+<TITLE>Automating Product Builds with PDE BUILD</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+<P><FONT SIZE="+3"> Automating Builds with PDE BUILD</FONT><BR></P><P>Last Updated:
+June16, 2005</P><P><FONT SIZE="+1"><A HREF="#intro">Introduction</A></FONT></P><P><FONT SIZE="+1"><A HREF="#preparation">Preparing
+the infrastrucure</A></FONT></P><UL><LI><A HREF="#commit">Commit feature and plug-in
+projects to CVS repository</A></LI><LI><A HREF="#createmap">Create map file project</A></LI><LI><A HREF="#gensource">Set
+up auto-generation of source features and plug-ins</A></LI></UL><P><FONT SIZE="+1"><A HREF="#buildconfigfiles">Preparing
+Build Configuration Files</A> </FONT></P><UL> <LI><A HREF="#build.properties">Write
+build.properties</A></LI><LI><A HREF="#customTargets.xml">Write customTargets.xml</A></LI></UL><P><FONT SIZE="+1"><A HREF="#buildexec">
+Build Execution</A></FONT></P><UL> <LI><A HREF="#buildmachinesetup">Set up build
+machine</A></LI><LI><A HREF="#runbuild">Running the build</A></LI></UL><P>&nbsp;</P><HR><P><FONT SIZE="+2"><B><A NAME="intro"></A>Introduction</B></FONT></P><P>This
+document describes how to automate the building of Eclipse-based features and
+their plug-ins using script generators in the org.eclipse.pde.build plug-in in
+Eclipse 3.2 stream SDK.<BR> </P><P>Either an existing Eclipse 3.2 stream SDK or
+the org.eclipse.releng.basebuilder project on dev.eclipse.org:/home/eclipse can
+be used in this automated build process. The org.eclipse.releng.basebuilder project
+contains the minimal set of plug-ins extracted from the latest stable Eclipse
+3.2 stream SDK build (a milestone or release) needed to run applications and custom
+Ant tasks in org.eclipse.ant.core, org.eclipse.pde.build, org.eclipse.pde, and
+org.eclipse.help.base. This project is used by the Eclipse release engineering
+team to build Eclipse itself. <P>It is assumed the reader is starting with a set
+of pre-existing features and plug-ins, their build.properties, and has a working
+knowledge of Apache Ant. In this document, features, plug-ins and fragments are
+also referred to as &quot;elements&quot;. The word &quot;distribution&quot; is
+used to describe the end result of building a feature, a functional unit comprised
+of one or more groupings of plug-ins. The result of building a feature results
+in a zip or tar.gz file which contains the binary version of the feature and it's
+plug-ins. If the feature contains nested features (i.e. &lt;includes&gt; elements),
+the nested features will be built recursively and included in the distribution.<br>
+<br> For example, the Eclipse SDK distributions are built from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.sdk-feature/feature.xml?rev=1.7" target="extra">org.eclipse.sdk
+feature</a> which is comprised of features org.eclipse.rcp, org.eclipse.rcp.source,
+org.eclipse.platform, org.eclipse.platform.source, org.eclipse.jdt, org.eclipse.jdt.source,
+org.eclipse.pde, org.eclipse.pde.source and the org.eclipse.sdk plug-in. The distribution
+built from the org.eclipse.sdk feature will therefore contain the binary version
+of the org.eclipse.sdk feature and its one plug-in plus the binary versions of
+its eight nested features and all their plug-ins.<br> <br> <HR><P><FONT SIZE="+2"><B><A NAME="preparation"></A>Preparing
+the infrastructure</B></FONT></P><P><B><FONT SIZE="+1" COLOR="#000000"><A NAME="commit"></A>Commit
+feature and plug-in projects to CVS repository</FONT></B></P><P>Since Eclipse
+3.0, PDE Build allows a very flexible organization of feature, plug-in and fragment
+projects in a CVS repository where:</P><UL> <LI> the directory containing the
+source for an element can exist as a root level CVS module or in any subdirectory
+in the repository.</LI><LI>the directory name containing the element's source
+does not have to match the id attribute in it's manifest (feature.xml, plugin.xml,
+fragment.xml).</LI></UL><P>This flexibility was not present for the Eclipse process
+prior to version 3.0 which is one reason for the very flat organization of projects
+in the dev.eclipse.org:/home/eclipse repository. It is recommended that this flat
+structure <B>not</B> be used as an example. Rather, using a structure similar
+to the one used for the <A HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/?cvsroot=Technology_Project" target="extra">Equinox</A>
+or <A HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.stellation/?cvsroot=Technology_Project" target="extra" >Stellation</A>
+project should be considered where all files and directories for a given product
+are stored under a single directory or module at the cvs root level:<BR><BR>&lt;cvs
+root&gt;<BR><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/org.eclipse.equinox<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/plugins<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/all
+plug-ins at this level<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P><P>Once
+the source for all elements is committed to a repository, the next step consists
+of recording the location and access method for each feature, plug-in and fragment
+in one or more <A HREF="#createmap">map files</A>.</P><P>&nbsp;</P><P><B><FONT SIZE="+1"><A NAME="createmap"></A>Create
+map file project</FONT></B></P><P>A .map file is a java property file which contains
+mappings of elements to their CVS locations and access methods. Map files are
+used by PDE Build early in the build process to generate Ant scripts which use
+the Ant &lt;cvs&gt; task to export source to a directory. This is described further
+<A HREF="#getmaps">below</A>.<BR> <BR>Map file entries use the following format:<BR><BR>
+<B>feature|fragment|plugin@element.Id=&lt;cvs tag&gt;,&lt;access method&gt;:&lt;cvs
+user&gt;@&lt;cvs repository&gt;,&lt;cvs password&gt;[,&lt;repository path&gt;
+(no starting slash) ]</B><BR> </P><P>The &lt;repository path&gt; is only required
+when the module (or directory) containing the source for the element does not
+match the element.Id or if the directory is not at the root of the repository.<BR>
+<BR>A map file entry must exist for each feature being built, it's &lt;plugin&gt;
+elements and it's &lt;includes&gt; elements (ie. nested features and their plug-ins).
+Adding a plug-in or fragment to a feature therefore requires updating the map
+files with the new element.<BR><BR><BR><B>Map File Entry Examples</B></P><UL><LI>The
+org.eclipse.platform plug-in source is located at the root of the <A HREF="http://dev.eclipse.org/viewcvs/" target="extra">dev.eclipse.org:/home/eclipse</A>
+repository. It is contained in a directory with the name &quot;org.eclipse.platform&quot;.
+The resulting map file entry for this plug-in is:<BR><BR>plugin@org.eclipse.platform=v20031121,:pserver:anonymous@dev.eclipse.org:/home/eclipse,<BR><BR></LI><LI>The
+org.eclipse.platform feature source is located at the root of the <A HREF="http://dev.eclipse.org/viewcvs/" target="extra">dev.eclipse.org:/home/eclipse</A>
+repository in a directory with the name &quot;org.eclipse.platform-feature&quot;.
+The resulting map file entry for this feature is:<BR><BR>feature@org.eclipse.platform=v20031128,:pserver:anonymous@dev.eclipse.org:/home/eclipse,,org.eclipse.platform-feature<BR><BR></LI><LI>The
+org.eclipse.gef.sdk feature source is located in directory in the <A HREF="http://dev.eclipse.org/viewcvs/?cvsroot=Tools_Project" target="extra">dev.eclipse.org:/home/tools</A>
+repository in a subdirectory called &quot;org.eclipse.gef.sdk&quot; of &quot;org.eclipse-gef
+feature&quot;. The resulting map file entry for this feature is:<BR><BR>feature@org.eclipse.gef.sdk=I_20031117,
+:pserver:anonymous@dev.eclipse.org:/home/tools,,org.eclipse.gef-feature/org.eclipse.gef.sdk<BR></LI></UL><P>One
+or more map files can be used to list the elements. The map files can be kept
+under version control. Some examples of map file projects include <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/">org.eclipse.releng</A>,
+<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef.releng/?cvsroot=Tools_Project">org.eclipse.gef.releng</A>,
+<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.releng/?cvsroot=Tools_Project">org.eclipse.ve.releng</A>.<BR>
+<BR></P><P><B><FONT SIZE="+1"><A NAME="gensource"></A>Generating source features
+and plug-ins at build time</FONT></B></P><P>Source features and plug-ins can be
+generated at build time by PDE Build. Source features and associated source plug-ins
+are typically generated for a development kit distributions (i.e. SDK). It is
+also possible to generate a source plug-in only. This is typically the case for
+example features or JUnit testing features.<BR> <BR>To generate a <B>source feature
+and associated source plug-in</B> at build time, you will need to do the following:</P><OL>
+<LI> Add an entry to the build.properties file in the feature project for which
+you wish to include the source feature and plug-in. The generated source feature
+should also be listed in the feature.xml as an &lt;includes&gt; element.<BR> <BR>
+The build.properties entry should use the following format:<BR> <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.feature@&lt;source.feature.id
+to generate&gt;=&lt;feature.id from which to which to collect source&gt;, plugin@&lt;plugin.id&gt;<BR>
+<BR> Example taken from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.sdk-feature/build.properties?rev=1.4">org.eclipse.sdk-feature/build.properties</A>:
+<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.feature@org.eclipse.jdt.source=org.eclipse.jdt,
+plugin@org.eclipse.jdt.doc.isv<BR> <BR> In this example, a source feature and
+a plug-in, both with id &quot;org.eclipse.jdt.source&quot; will be generated and
+will contain source from plug-ins listed in the org.eclipse.jdt feature and will
+also include the plug-in org.eclipse.jdt.doc.isv. The generated org.eclipse.jdt.source
+plug-in will be automatically listed in the org.eclipse.jdt.source feature.xml.
+<BR> <BR> <BR> </LI><LI>In the feature project from which the source feature will
+be generated, a directory called &quot;<B>sourceTemplateFeature</B>&quot; and
+a directory called &quot;<B>sourceTemplatePlugin</B>&quot; will be required. These
+directories should contain the files that are included in the root of the generated
+source feature and plug-in. The feature.xml and plugin.xml files are not required
+since these are generated. A build.properties is required in the sourceTemplatePlugin
+directory. This should contain a &quot;bin.includes&quot; setting as well as the
+entry &quot;sourcePlugin = true&quot;. The plugin.xml file and src/ directory
+should be listed in the bin.includes.<BR> <BR> See <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt-feature/">org.eclipse.jdt-feature</A>
+and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.platform-feature/">org.eclipse.platform-feature</A>
+for examples.<BR> <BR> </LI></OL><P>To generate a <B>source plug-in only</B> at
+build time, you will need to do the following:</P><OL> <LI> Add an entry to the
+build.properties file in the feature project for which you wish to include the
+source plug-in. The generated source plug-in should also be listed in the feature.xml
+as a &lt;plugin&gt; element.. <BR> <BR> The build.properties entry should use
+the following format:<BR> <BR> generate.plugin@&lt;source.plugin.id to generate&gt;=&lt;feature.id
+from which to which to collect source&gt;, plugin@&lt;plugin.id&gt;<BR> <BR> Example
+taken from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.ve.tests-feature/build.properties?rev=1.2&cvsroot=Tools_Project">org.eclipse.ve.tests-feature/build.properties</A>:
+<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.plugin@org.eclipse.ve.tests.source=org.eclipse.ve.tests<BR>
+<BR> <BR> </LI><LI>In the runtime feature project from which the source plug-in
+will be generated, create a directory called &quot;sourceTemplatePlugin&quot;
+which must contain a build.properties with a &quot;bin.includes&quot; setting
+and &quot;sourcePlugin=true&quot;. The plugin.xml file and src/ directory should
+be listed in the bin.includes.<BR> <BR> See <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.examples-feature/sourceTemplatePlugin/?cvsroot=Tools_Project">org.eclipse.ve.examples-feature/sourceTemplatePlugin</A>
+for an example.<BR> </LI></OL><HR><P><FONT SIZE="+2"><A NAME="buildconfigfiles"></A><B>Preparing
+Build Configuration Files</B></FONT></P><P>The distilled build process consists
+of the following four steps:</P><OL><LI>build environment setup</LI><LI>check
+out source from one or more CVS repositories</LI><LI>compilation</LI><LI> assembly
+of distribution<BR></LI></OL><P>The script which controls the build sequence is
+the build.xml Ant script in org.eclipse.pde.build. However this script requires
+two user-implemented build configuration files,<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/build.properties?rev=HEAD&content-type=text/vnd.viewcvs-markup">build.properties</A>
+and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/customTargets.xml?rev=HEAD&content-type=text/vnd.viewcvs-markup">customTargets.xml</A>.
+These two files provide the information on the &quot;where and how&quot; to build
+specific elements. </P><P>Templates of these files are provided in the <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/">org.eclipse.pde.build/templates</A>
+directory and examples are available in <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.eclipsebuilder/">org.eclipse.releng.eclipsebuilder</A>,
+<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.gefbuilder/?cvsroot=Tools_Project">org.eclipse.releng.gefbuilder</A>
+and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.releng.builder/?cvsroot=Tools_Project">org.eclipse.ve.releng.builder</A>
+for building Eclipse, GEF and VE runtimes, respectively.</P><P><B><FONT SIZE="+1"><A NAME="build.properties"></A>build.properties</FONT></B></P><P>The
+build.properties file defines a number of properties that are used as Ant properties
+at build time and as arguments to script generators in org.eclipse.pde.build to
+describe how and where to execute the build. The values for properties listed
+in this file override any values set in the generated build.xml files. See &quot;Generating
+Ant scripts from the command line&quot; in the PDE Guide in Eclipse 3.2 stream
+Help for a description of required and optional properties.</P><P><B><FONT SIZE="+1"><A NAME="customTargets.xml"></A>customTargets.xml</FONT></B></P><P>customTargets.xml
+is an Ant script containing targets called by PDE Build scripts to provide the
+following information:</P><OL><LI>the list of elements for which to generate scripts</LI><LI>instruction
+on retrieval of map file projects</LI><LI>steps to execute before and after the
+following: retrieving map files, checking out source, generating build.xml scripts,
+executing build.xml scripts, and assembling the binary distributions.</LI><LI>instruction
+on things to do after the build is done.</LI></OL><P>The table below lists the
+targets that are used to provide this information.<BR><BR></P><TABLE WIDTH="100%" BORDER="1"><TR><TD WIDTH="24%">Target</TD><TD WIDTH="76%">Description</TD></TR><TR><TD WIDTH="24%">allElements</TD><TD WIDTH="76%"><P>This
+target lists all features that will be packaged into a binary distribution where
+each listing comes in the form of an &lt;ant&gt; call to org.eclipse.pde.build/scripts/genericTargets.xml:<BR><BR><B>&lt;ant
+antfile=&quot;${genericTargets}&quot; target=&quot;${target}&quot; &gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;type&quot; value=&quot;feature&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;id&quot; value=&quot;&lt;element.id&gt;&quot; /&gt;<BR> &lt;/ant&gt;<BR></B><BR>
+The user is only required to specify a value for properties &quot;type&quot; and
+id (the value for the id attribute in the feature.xml) for each listing. At this
+time, only the type &quot;feature&quot; is supported.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml</A>:</P><P><B>&lt;target
+name=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${genericTargets}&quot;
+target=&quot;${target}&quot; &gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;type&quot; value=&quot;feature&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;id&quot; value=&quot;org.eclipse.jdt&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ant&gt;<BR>&lt;/target&gt;</B></P><P>The
+<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.pde.build/scripts/genericTargets.xml?rev=HEAD&content-type=text/xml">genericTargets.xml
+</A>script is an Ant script in the org.eclipse.pde.build plug-in containing targets
+which call PDE Build custom Ant tasks to generate scripts for the specified elements
+at various stages of the build. This script also executes the generated scripts
+at various build stages. The target property is set by it's calling script, org.eclipse.pde.build/scripts/build.xml.<BR><BR>For
+example, the fetch target in the build.xml calls allElements and sets the target
+to property to &quot;fetchElement&quot;:<BR><BR> &lt;ant antfile=&quot;${customTargets}&quot;
+target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;target&quot; value=&quot;fetchElement&quot; /&gt;<BR> &lt;/ant&gt;<BR><BR>The
+result of this is that the fetchElement target in genericTargets.xml is executed
+using arguments type and id set in allElements.<BR></P></TD></TR><TR><TD WIDTH="24%">assemble.&lt;element.id&gt;[.config.spec]</TD><TD WIDTH="76%"><P>For
+every configuration specified in the build.properties for the distribution (see
+<A HREF="#configs">configs</A> above), a target named &quot;assemble.&lt;element.id&gt;.&lt;config.spec&gt;&quot;
+is required. If the distribution is not platform-specific, the &quot;.&lt;config.spec&gt;&quot;
+section of the target name is not required. </P><P>Providing the target name should
+be all that is required unless you wish to give the produced binary distributable
+file a name different from the default &quot;&lt;elment-id&gt;-&lt;buildid&gt;-&lt;config.spec&gt;.zip&quot;.
+In this case, an explicit value for the property &quot;archiveName&quot; should
+be specified at the beginning of the target.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml</A>:<BR><BR>
+Since two configurations for building the org.eclipse.jdt distribution are specified
+in it's build.properties &quot;configs=*,*,* &amp; macosx,carbon,ppc&quot;, the
+following two targets are provided in the customTargets.xml script.</P><P><FONT COLOR="#000000"><B>&lt;target
+name=&quot;assemble.org.eclipse.jdt&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;archiveName&quot; value=&quot;eclipse-JDT-${buildId}.zip&quot;/&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${assembleScriptName}&quot;/&gt;<BR>&lt;/target&gt;</B></FONT></P><P><B><FONT COLOR="#000000">&lt;target
+name=&quot;assemble.org.eclipse.jdt.macosx.carbon.ppc&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;archiveName&quot; value=&quot;eclipse-JDT-${buildId}-macosx-carbon.tar.gz&quot;/&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${assembleScriptName}&quot;/&gt;<BR>&lt;/target&gt;</FONT></B><BR></P></TD></TR><TR><TD WIDTH="24%"><A NAME="getmaps"></A>getMapFiles</TD><TD WIDTH="76%"><P>The
+result of executing this target should be to place *.map files in any directory
+or subdirectory under ${buildDirectory}/maps. All .map files found here are concatenated
+into a single file ${buildDirectory}/directory.txt. Map file projects are typically
+kept under version control in a CVS repository. <BR><BR>In the following example
+from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/sdk/customTargets.xml</A>,
+the implementation of this target and it's helper targets are provided to illustrate
+how map files for Eclipse builds are checked out from a CVS repository and then
+tagged with the build timestamp to capture the versions of all projects used in
+the build.<BR><BR><B>&lt;target name=&quot;getMapFiles&quot; depends=&quot;checkLocal&quot;
+unless=&quot;mapsLocal&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+name=&quot;mapCvsRoot&quot; value=&quot;:pserver:anonymous@dev.eclipse.org:/home/eclipse&quot;
+/&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;mapVersionTag&quot;
+value=&quot;HEAD&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cvs cvsRoot=&quot;${mapCvsRoot}&quot;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;package=&quot;org.eclipse.releng&quot;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest=&quot;${buildDirectory}/maps&quot;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag=&quot;${mapVersionTag}&quot;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;tagMapFiles&quot;
+/&gt;<BR>&lt;/target&gt;</B></P><P><B><FONT COLOR="#008000">&lt;!--helper targets---&gt;</FONT><BR></B><B><BR>&lt;target
+name=&quot;checkLocal&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;available
+property=&quot;mapsLocal&quot; file=&quot;${buildDirectory}/maps/org.eclipse.releng&quot;
+/&gt;<BR>&lt;/target&gt;<BR></B></P><P><B>&lt;target name=&quot;tagMapFiles&quot;
+if=&quot;tagMaps&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cvs dest=&quot;${buildDirectory}/maps/org.eclipse.releng&quot;
+command=&quot;tag v${timestamp}&quot; /&gt;<BR>&lt;/target&gt;</B><BR><BR></P></TD></TR><TR><TD WIDTH="24%" HEIGHT="24">preSetup
+and postSetup</TD><TD WIDTH="76%" HEIGHT="24"><P>Used to run operations before
+and after retrieving the map files.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>.
+This example demonstrates how the postSetup target (and a helper target) is used
+to download and install an Eclipse SDK to compile against.</P><P><B>&lt;target
+name=&quot;postSetup&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;available
+file=&quot;${buildDirectory}/../eclipse-SDK.zip&quot; property=&quot;baseExists&quot;
+/&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;getBaseEclipse&quot;
+/&gt; <BR> &lt;/target&gt;<BR></B></P><P><B>&lt;target name=&quot;getBaseEclipse&quot;
+unless=&quot;baseExists&quot;&gt;</B></P><P><B><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--this
+task definition is available in org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools.
+It removes the &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&lt;version&gt;
+from all directories specified as a value for the directory attribute. </FONT></B><FONT COLOR="#008000"><B>Not
+really necessary, but helpful in &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this
+case to avoid having/needing hard-coded versions in GEF javadoc scripts.--&gt;</B></FONT><B></B><B><BR></B><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taskdef
+name=&quot;stripVersions&quot; classname=&quot;org.eclipse.releng.VersionNumberStripper&quot;
+/&gt; <BR> <BR><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--this
+property file contains the values for ${eclipseURL} and ${eclipseBuildID}--&gt;</FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property
+file=&quot;${buildDirectory}/maps/org.eclipse.gef.releng/maps/build.cfg&quot;
+/&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;get src=&quot;${eclipseURL}/eclipse-SDK-${eclipseBuildID}-win32.zip&quot;
+dest=&quot;${buildDirectory}/../eclipse-SDK.zip&quot; /&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exec
+dir=&quot;${buildDirectory}/..&quot; executable=&quot;unzip&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg
+line=&quot;-o -qq eclipse-SDK.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exec&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;stripVersions
+directory=&quot;${buildDirectory}/plugins&quot; /&gt; <BR><BR><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--
+Extract doc.zip so we can create links in GEF java doc --&gt; </FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exec
+dir=&quot;${buildDirectory}/plugins/org.eclipse.platform.doc.isv&quot; executable=&quot;unzip&quot;&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg line=&quot;-o
+-qq doc.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exec&gt;<BR> &lt;/target&gt;</B><BR><BR></P></TD></TR><TR><TD WIDTH="24%">preFetch
+and postFetch </TD><TD WIDTH="76%"><P>Used to run operations before and after
+fetching source for the build.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>.
+This example demonstrates how the postFetch target can be used to set the build
+timestamp as a value for &quot;0&quot; in about.mappings files.<BR><BR><B>&lt;target
+name=&quot;postFetch&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;replace dir=&quot;${buildDirectory}/plugins&quot;
+value=&quot;${timestamp}&quot; token=&quot;@buildid@&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include
+name=&quot;**/about.mappings&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/replace&gt;<BR>
+&lt;/target&gt;</B></P></TD></TR><TR><TD WIDTH="24%">preGenerate and postGenerate</TD><TD WIDTH="76%"><P>Used
+to run operations before and after generating build.xml files for features, plug-ins
+and fragments.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>.
+This example demonstrates how the postGenerate target (and a helper target) is
+used to run the build.xml scripts to clean the source of any stale, pre-compiled
+jars that might exist in the source directories. jars are not recompiled if they
+already exist in plug-in or fragment directories.<BR></P><P> <B>&lt;target name=&quot;postGenerate&quot;&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;clean&quot; /&gt; <BR>
+&lt;/target&gt;</B></P><P><B>&lt;target name=&quot;clean&quot; unless=&quot;noclean&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall
+target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param
+name=&quot;target&quot; value=&quot;cleanElement&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/antcall&gt;<BR>
+&lt;/target&gt;<BR></B></P></TD></TR><TR><TD WIDTH="24%">preProcess and postProcess</TD><TD WIDTH="76%">
+Used to run operations before and after compiling the source.</TD></TR><TR><TD WIDTH="24%">preAssemble
+and postAssemble</TD><TD WIDTH="76%">Used to run operations before and after assembling
+the binary distributables.</TD></TR><TR><TD WIDTH="24%">postBuild</TD><TD WIDTH="76%"><P>Used
+to run operations at the end of the build.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>.
+This example demonstrates how the postBuild target (and a helper target) is used
+to gather and place the compile logs in the ${buildLabel} directory. These files
+are used in the publishing of the GEF build (see below under Publishing the Build
+section).<BR></P><P><B>&lt;target name=&quot;postBuild&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall
+target=&quot;gatherLogs&quot; /&gt; <BR> &lt;/target&gt;<BR><BR>&lt;target name=&quot;gatherLogs&quot;&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mkdir dir=&quot;${buildDirectory}/${buildLabel}/compilelogs&quot;
+/&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall
+target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param
+name=&quot;target&quot; value=&quot;gatherLogs&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/antcall&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;unzip
+dest=&quot;${buildDirectory}/${buildLabel}/compilelogs&quot; overwrite=&quot;true&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fileset
+dir=&quot;${buildDirectory}/features/org.eclipse.gef.sdk&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include
+name=&quot;*.log.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/unzip&gt;<BR> &lt;/target&gt;</B><BR><BR></P></TD></TR></TABLE><P>&nbsp;</P><HR><P><BR><FONT SIZE="+2"><B><A NAME="buildexec"></A>Build
+Execution </B></FONT></P><P><FONT SIZE="+1"><A NAME="buildmachinesetup"></A><B>Build
+machine setup</B></FONT><BR><BR>This build process can be executed on any of the
+<A target="extra" HREF="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_2.html#TargetOperatingEnvironments">Eclipse
+3.2 Reference Platforms</A> plus the following:</P><UL><LI><A target="extra" HREF="http://www.cvshome.org/">CVS</A>
+client version 1.10 or higher on system path. </LI><LI><A target="extra" HREF="http://www.info-zip.org/pub/infozip/">Info-Zip</A>
+zip and unzip executables on system path.</LI><LI><A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.basebuilder/">org.eclipse.releng.basebuilder</A>
+from dev.eclipse.org or any Eclipse 3.2 stream SDK install. Please note that the
+Mailer java class in this project require a j2ee.jar on the classpath to compile
+and run. This class is not used in the mechanism described in this document.</LI></UL><P>The
+cvs, zip and unzip executables should be placed on the system path.</P><P> On
+Windows systems, the HOME environement variable should be set to &quot;c:&quot;
+(no slash) for CVS operations.</P><P>The org.eclipse.releng.basebuilder project
+can be placed in any directory.</P><P><BR><B><FONT SIZE="+1"><A NAME="runbuild"></A>Running
+the Build</FONT></B></P><P>To run the build, execute the following command from
+../plugins/org.eclipse.pde.build/scripts to <B>build a single distribution</B>:<BR><BR><B>java
+-jar &lt;path&gt;/startup.jar -application org.eclipse.ant.core.antRunner [-buildfile
+build.xml] -Dbuilder=&lt;path to directory containing build.properties and customTargets.xml&gt;
+[Ant property settings to override those in <A HREF="#build.properties" TARGET="_blank">build.properties</A>]</B><B><BR></B></P><P>&nbsp;</P>
+</BODY>
+</HTML>
diff --git a/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme/readme_eclipse.html b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme/readme_eclipse.html
new file mode 100644
index 0000000..3a4d1c0
--- /dev/null
+++ b/basebuilder-3.6.2/org.eclipse.releng.basebuilder/readme/readme_eclipse.html
@@ -0,0 +1,2227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Eclipse Project Release Notes 3.4</title>
+</head>
+
+<body>
+
+<h1>Eclipse Project Release Notes</h1>
+<p>Release 3.4.0<br>
+ Last revised June 10, 2008</p>
+<p align="left"><strong>This software is OSI Certified Open Source Software.<br>
+OSI Certified is a certification mark of the Open Source Initiative.&nbsp;</strong></p>
+<blockquote>
+ <p align="left"><a href="#TargetOperatingEnvironments">1. Target Operating
+ Environments</a><br>
+ <a href="#Compatibility">2. Compatibility with Previous
+ Releases</a><br>
+ <a href="#Known Issues">3. Known Issues</a><br>
+ <a href="#Running Eclipse">4. Running Eclipse</a><br>
+ <a href="#Upgrading">5. Upgrading a Workspace from a Previous Release</a><br>
+ <a href="#Interoperability with Previous Releases">6. Interoperability with
+ Previous Releases</a><br>
+ </p>
+</blockquote>
+
+<h2>1. <a name="TargetOperatingEnvironments"></a>Target Operating Environments</h2>
+<p>In order to remain current, each Eclipse release targets reasonably current
+ operating environments. </p>
+<p>Most of the Eclipse SDK is &quot;pure&quot; Java code and has no direct dependence
+ on the underlying operating system. The chief dependence is therefore on the
+ Java Platform itself. Portions of the Eclipse SDK (including the RCP base,
+ SWT, OSGi and JDT core plug-ins) are targeted to specific classes of operating
+ environments, requiring their source code to only reference facilities available
+ in particular class libraries (e.g. J2ME Foundation 1.0, J2SE 1.3 and 1.4,
+ etc.). </p>
+<p> In general, the 3.4 release of the Eclipse Project is developed on a mix
+ of Java 1.4 and Java5 VMs. As such, the Eclipse Project SDK as a whole is targeted
+ at both 1.4 and Java5 VMs, with full functionality available for 1.4 level
+ development everywhere, and new Java5 specific capabilities available when
+ running on a Java5 VM. Similarly, in cases where support has been added for
+ Java6 specific features (e.g. JSR-199, JSR-269, etc.) Java6 VMs are required. </p>
+<p> <a href="#Appendix1">Appendix 1</a> contains a table that indicates the class
+ library level required for each plug-in. </p>
+<p>There are many different implementations of the Java Platform running atop
+ a variety of operating systems. We focus Eclipse SDK testing on a handful of
+ popular combinations of operating system and Java Platform; these are our <em>reference
+ platforms</em>. Eclipse undoubtedly runs fine in many operating environments
+ beyond the reference platforms we test, including those using Java6 VMs. However,
+ since we do not systematically test them we cannot vouch for them. Problems
+ encountered when running Eclipse on a non-reference platform that cannot be
+ recreated on any reference platform will be given lower priority than problems
+ with running Eclipse on a reference platform.</p>
+<p> The Eclipse SDK 3.4 is tested and validated on the following reference platforms</p>
+<center>
+ <table border="1" cellpadding="2" cellspacing="2" width="80%" summary="Eclipse Reference Platforms">
+ <tbody>
+ <tr align="center">
+ <td><b>Reference Platforms</b></td>
+ </tr>
+ <tr>
+ <td><b>Microsoft Windows Vista, x86-32, Win32</b> running (any of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Microsoft Windows</li>
+ <li>IBM 32-bit SDK for Windows, Java 2 Technology Edition 5.0, SR6b</li>
+ <li>BEA JRockit 27.4.0, for Microsoft Windows</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Microsoft Windows XP, x86-32, Win32</b> running (any of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 6.0 Update 4 for Microsoft Windows</li>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Microsoft Windows</li>
+ <li>IBM 32-bit SDK for Windows, Java 2 Technology Edition 5.0, SR6b</li>
+ <li>BEA JRockit 27.4.0, for Microsoft Windows</li>
+ <li>Sun Java 2 Standard Edition 1.4.2_16 for Microsoft Windows</li>
+ <li>IBM 32-bit SDK for Windows, Java 2 Technology Edition 1.4.2 SR10</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Red Hat Enterprise Linux 5.0, x86-32, GTK</b> running (any of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Linux x86</li>
+ <li>IBM 32-bit SDK for Linux on Intel architecture, Java 2 Technology Edition 5.0, SR6b</li>
+ <li>BEA JRockit 27.4.0, for Linux x86</li>
+ <li>Sun Java 2 Standard Edition 1.4.2_16 for Linux x86</li>
+ <li>IBM 32-bit SDK for Linux on Intel architecture, Java 2 Technology Edition 1.4.2 SR10</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>SUSE Linux Enterprise Server 10, x86-32, GTK</b> running (any
+ of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Linux x86</li>
+ <li>IBM 32-bit SDK for Linux on Intel architecture, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Microsoft Windows Vista, x86-64, Win32</b> running (any of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Microsoft Windows (AMD64/EM64T)</li>
+ <li>IBM 64-bit SDK for Windows, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Microsoft Windows XP Professional x64 Edition, x86-64, Win32</b> running (any of):
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Microsoft Windows (AMD64/EM64T)</li>
+ <li>IBM 64-bit SDK for Windows, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Red Hat Enterprise Linux 4.0 update 2, x86-64, GTK</b> running:
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Linux x86_64</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Sun Solaris 10, SPARC, GTK</b> running:
+ <ul>
+ <li>Sun Java 2 Standard Edition 5.0 Update 14 for Solaris SPARC</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>HP-UX 11i v2, ia64, Motif 2.1, GTK</b> running:
+ <ul>
+ <li>HP-UX Java 2 Standard Edition 5.0 Update 7 for Itanium</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>IBM AIX 5.3, Power, Motif 2.1</b> running:
+ <ul>
+ <li>IBM 32-bit SDK, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Red Hat Enterprise Linux 5.0, Power, GTK</b> running:
+ <ul>
+ <li>IBM 32-bit SDK for Linux on pSeries architecture, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>SUSE Linux Enterprise Server 10, Power, GTK</b> running:
+ <ul>
+ <li>IBM 32-bit SDK for Linux on pSeries architecture, Java 2 Technology Edition 5.0, SR6b</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td><b>Apple Mac OS X 10.5, Universal, Carbon</b> running:
+ <ul>
+ <li>Apple Java 2 Platform Standard Edition (J2SE) 5, service release 4</li>
+ </ul></td>
+ </tr>
+ </tbody>
+ </table>
+</center>
+<p>Because Java 1.4.2 and Java5 based platforms are used for most Eclipse development,
+ those platforms are listed here. Although there are teams doing some Java 6
+ based development we have not included specific Java6 VMs, since they have
+ not yet received the general level of testing we require. <i>We expect that
+ Eclipse will work fine on other current Java VMs running on window systems
+ supported by SWT, but can not flag these as reference platforms without significant
+ community support for testing them.</i></p>
+<p>Similarly, although untested, the Eclipse SDK should work fine on other OSes
+ that support the same window system. For Win32: NT, 2000, and Server 2003;
+ SWT HTML viewer requires Internet Explorer 5 (or higher). For GTK on other
+ Linux systems: version 2.2.1 of the GTK+ widget toolkit and associated libraries
+ (GLib, Pango); SWT HTML viewer requires Mozilla 1.4GTK2. For Motif on Linux
+ systems: Open Motif 2.1 (included); SWT HTML viewer requires Mozilla 1.4GTK2.</p>
+<p>SWT is also supported on the QNX Neutrino operating system, x86 processor,
+ Photon window system, and <a href="http://wiki.eclipse.org/J9">IBM J9&trade; VM</a>.
+ Eclipse 3.4 on Windows or Linux can be used to cross-develop QNX applications.
+ (Eclipse 3.4 is unavailable on QNX because there is currently no 1.5 J2SE for
+ QNX.)</p>
+<h4>Internationalization</h4>
+<p>The Eclipse SDK is designed as the basis for internationalized products. The
+ user interface elements provided by the Eclipse SDK components, including dialogs
+ and error messages, are externalized. The English strings are provided as the
+ default resource bundles.</p>
+<p>Latin-1 and DBCS locales are supported by the Eclipse SDK on all reference platforms;
+ BIDI locales are supported by the Eclipse SDK everywhere but on Motif.</p>
+<p>The Eclipse SDK supports GB 18030 (level 1), the Chinese code page standard,
+ on Windows XP and 2000, Linux/GTK and the Macintosh.</p>
+<p>German and Japanese locales are tested.</p>
+
+<h2>2. <a name="Compatibility"></a>Compatibility with Previous Releases</h2>
+<h3>Compatibility of Release 3.4 with 3.3</h3>
+<p>Eclipse 3.4 is compatible with Eclipse 3.3 (and, hence, with 3.2, 3.1
+ and 3.0).</p>
+<p> <strong>API Contract Compatibility:</strong> Eclipse SDK 3.4 is upwards
+ contract-compatible with Eclipse SDK 3.3 except in those areas noted in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_4_porting_guide.html" target="_top"> <em>Eclipse
+ 3.4 Plug-in Migration Guide</em></a>. Programs that use affected APIs and extension
+ points need to be ported to Eclipse SDK 3.4 APIs. Downward contract compatibility
+ is not supported. There is no guarantee that compliance with Eclipse SDK 3.4
+ APIs would ensure compliance with Eclipse SDK 3.3 APIs. Refer to <a href="http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs"> <em>Evolving
+ Java-based APIs</em> </a> for a discussion of the kinds of API changes that
+ maintain contract compatibility. </p>
+<p><strong>Binary (plug-in) Compatibility:</strong> Eclipse SDK 3.4 is upwards
+ binary-compatible with Eclipse SDK 3.3 except in those areas noted in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_4_porting_guide.html" target="_top"> <em>Eclipse
+ 3.4 Plug-in Migration Guide</em></a>. Downward plug-in compatibility is not
+ supported. Plug-ins for Eclipse SDK 3.4 are not usable in Eclipse SDK 3.3.
+ Refer to <a href="http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs"> <em>Evolving
+ Java-based APIs</em> </a> for a discussion of the kinds of API changes that
+ maintain binary compatibility. </p>
+<p><strong>Source Compatibility:</strong> Eclipse SDK 3.4 is upwards source-compatible
+ with Eclipse SDK 3.3 except in the areas noted in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_4_porting_guide.html" target="_top"> <em>Eclipse
+ 3.4 Plug-in Migration Guide</em></a>. This means that source files written
+ to use Eclipse SDK 3.3 APIs might successfully compile and run against Eclipse
+ SDK 3.4 APIs, although this is not guaranteed. Downward source compatibility
+ is not supported. If source files use new Eclipse SDK APIs, they will not be
+ usable with an earlier version of the Eclipse SDK. </p>
+<p><strong>Workspace Compatibility:</strong> Eclipse SDK 3.4 is upwards
+ workspace-compatible with Eclipse SDK 3.3 unless noted. This means that workspaces
+ and projects created with Eclipse SDK 3.3, 3.2, 3.1 or 3.0 can be successfully
+ opened by Eclipse SDK 3.4 and upgraded to a 3.4 workspace. This includes both
+ hidden metadata, which is localized to a particular workspace, as well as metadata
+ files found within a workspace project (e.g., the .project file), which may
+ propagate between workspaces via file copying or team repositories. Individual
+ plug-ins developed for Eclipse SDK 3.4 should provide similar upwards compatibility
+ for their hidden and visible workspace metadata created by earlier versions;
+ 3.4 plug-in developers are responsible for ensuring that their plug-ins recognize
+ 3.3, 3.2, 3.1, 3.0, 2.1, and 2.0 metadata and process it appropriately. User
+ interface session state may be discarded when a workspace is upgraded. Downward
+ workspace compatibility is not supported. A workspace created (or opened) by
+ a product based on Eclipse 3.4 will be unusable with a product based an earlier
+ version of Eclipse. Visible metadata files created (or overwritten) by Eclipse
+ 3.4 will generally be unusable with earlier versions of Eclipse. </p>
+<p><strong>Non-compliant usage of API's</strong>: All non-API methods and classes,
+ and certainly everything in a package with &quot;internal&quot; in its name,
+ are considered implementation details which may vary between operating environment
+ and are subject to change without notice. Client plug-ins that directly depend
+ on anything other than what is specified in the Eclipse SDK API are inherently
+ unsupportable and receive no guarantees about compatibility within a single
+ release much less with earlier releases. Refer to <a href="http://www.eclipse.org/articles/Article-API%20use/eclipse-api-usage-rules.html"> <em>How
+ to Use the Eclipse API</em> </a> for information about how to write compliant
+ plug-ins. </p>
+
+<h2>3. <a name="Known Issues"></a> Known Issues</h2>
+<blockquote>
+ <a href="I-General">
+ 3.1 General problems</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-General-Startup">3.1.1 Startup</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-General-GCJ">3.1.2 GCJ</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-General-UNC">3.1.3 UNC Paths</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-General-64bitJava">3.1.4 64-bit Java HotSpot(TM) VM</a><br>
+ <a href="#I-Platform">3.2 Platform</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Core">3.2.1 Core</a><br>
+
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Ant">3.2.2 Ant</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-User-Assistance">3.2.3 User Assistance</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-UI">3.2.4 UI</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Text">3.2.5 Text</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-SWT">3.2.6 SWT</a><br>
+
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Team-CVS">3.2.7 Team and CVS</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Install-Update">3.2.8 Install/Update</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Debug">3.2.9 Debug</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Compare">3.2.10 Compare</a><br>
+ <a href="#I-JDT">
+ 3.3 Java development tools (JDT)</a><br>
+ <a href="#I-PDE">
+ 3.4 Plug-in Development Environment (PDE)</a><br>
+
+</blockquote>
+<p>Note: Bug numbers refer to the Eclipse project bug database at <a href="http://dev.eclipse.org/bugs/">http://bugs.eclipse.org/bugs/</a></p>
+
+<h3>3.1 <a name="I-General">General problems</a></h3>
+<h3>3.1.1 <a name="I-General-Startup">General - Startup</a></h3>
+<h4>Installation/Configuration issues that can cause Eclipse to fail start</h4>
+<p>Here are some common problems that can cause Eclipse not to start:</p>
+<ul>
+ <li>As shown <a href="#TargetOperatingEnvironments">above</a>, Eclipse 3.4 requires
+ at least a 1.4.2 VM. Perhaps an older version of the VM is being found in
+ your path. To explicitly specify which VM to run with, use the Eclipse <tt>-vm</tt>
+ command-line argument. (See also the <a href="#Running Eclipse">Running Eclipse</a>
+ section below.)</li>
+ <li>
+ Running Eclipse on Gentoo Linux may result in the following error message:
+ <div style="margin-left: 40px;">
+<tt>* run-java-tool is not available for sun-jdk-1.6 on i686<br>* IMPORTANT: some Java tools are not available on some VMs on some architectures</tt>
+ </div>
+
+If this occurs, start Eclipse by specifying a -vm argument, either
+specify the path to a java vm or use: <tt>eclipse -vm `java-config</tt>
+--java` (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=176021">176021</a>)</li>
+<li>Eclipse must be installed to a clean directory and not installed over top of
+a previous installation. If you have done this then please re-install to a new
+directory. If your workspace is in a child directory of your old installation
+directory, then see the instructions below on "<a href="#upgrading">Upgrading Workspace from a
+Previous Release"</a>.</li>
+
+<li>Java sometimes has difficulty detecting whether a file system is writable. In
+particular, the method java.io.File.canWrite() appears to return true in
+unexpected cases (e.g., using Windows drive sharing where the share is a
+read-only Samba drive). The Eclipse runtime generally needs a writable
+configuration area and as a result of this problem, may erroneously detect the
+current configuration location as writable. The net result is that Eclipse will
+fail to start and depending on the circumstances, may fail to write a log file
+with any details. To work around this, we suggest users experiencing this
+problem set their configuration area explicitly using the <tt>-configuration</tt> command
+line argument. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67719">67719</a>)</li>
+</ul>
+
+<h4><b>Invalid characters in install directory prevents Eclipse from starting</b></h4>
+<p>Eclipse will fail to launch if installed in a directory whose path
+contains certain invalid characters, including :%#&lt;&gt;&quot;!. The
+workaround is to install Eclipse in a directory whose path does not contain
+invalid characters. (bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=3109">3109</a>
+and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=17281">17281</a>)</p>
+
+<h4>Hanging during class loading when out of permanent generation memory</h4>
+<p>
+The Sun VM may hang indefinitely during class loading if it runs out of permanent
+generation memory. This will cause CPU usage to stay at 100% until the process
+is ended. See the section <a href="#Running Eclipse">Running Eclipse</a> for details
+on addressing this VM problem.
+</p>
+
+<h3>3.1.2 <a name="I-General-GCJ">General - GCJ</a></h3>
+<p>GCJ is an effort by the GCC team to provide an open source Java compiler and
+runtime environment to interpret Java bytecode. Unfortunately, the GCJ runtime
+environment is not an environment that is often tested on by Eclipse
+developers.</p>
+
+<p>The most common problems surrounding GCJ are:</p>
+<ul>
+<li>Eclipse does not start at all</li>
+<li>Eclipse throws a 'java.lang.ClassNotFoundException: org.eclipse.core.runtime.Plugin' that can be found in the logs (located in
+workspace/.metadata/.log)</li>
+</ul>
+
+<p>The workspace's log file is a good place to check to identify whether GCJ is
+being used or not. Every Eclipse log session should be prepended with
+information about the runtime environment that was used to run Eclipse. The log
+may include something like the following:</p>
+
+<code>java.fullversion=GNU libgcj 4.2.1 (Debian 4.2.1-5)</code>
+
+<p>If Eclipse does start, one can check which runtime environment is being used to
+run Eclipse by going to 'Help &gt; About Eclipse SDK &gt; Configuration Details'. The
+About Dialog itself can also provide other information, the build identifier
+can be of particular interest as it is tagged by some distributions. This allows the
+user to identify whether Eclipse was downloaded through the distribution's
+package management system or directly from the eclipse.org website.</p>
+
+Eg: <code>Build id: M20070212-1330 (Ubuntu version: 3.2.2-0ubuntu3)</code>
+
+<p>The two most common workarounds are:</p><ul>
+<li>download the Eclipse binary from eclipse.org directly</li>
+<li>run Eclipse using an alternate Java runtime environment</li></ul>
+
+<p>To download Eclipse, try one of the links below:</p><ul>
+<li><a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></li>
+<li><a href="http://download.eclipse.org/eclipse/downloads/">http://download.eclipse.org/eclipse/downloads/</a></li></ul>
+
+It is imperative that 64-bit builds are downloaded and used if a 64-bit Java
+runtime environment has been installed. Below are two sample tarball names of
+version 3.4.0 of the Eclipse SDK packaged for 32-bit and 64-bit processors.
+
+<pre>eclipse-SDK-3.4-linux-gtk.tar.gz (32-bit)
+eclipse-SDK-3.4-linux-gtk-x86_64.tar.gz (64-bit)</pre>
+
+<p>To run Eclipse with an alternate Java runtime environment, the path to the Java
+virtual machine's binary must be identified. With an Eclipse installation from
+the distribution, altering the $PATH variable to include the path to the
+alternate Java runtime environment is often not enough as the Eclipse that
+Linux distributions package often performs a scan internally to pick up GCJ by
+itself whilst ignoring what's on the $PATH. An example of the terminal's output
+is shown below:</p>
+
+<code>searching for compatible vm...<br>
+ testing /usr/lib/jvm/java-7-icedtea...not found<br>
+ testing /usr/lib/jvm/java-gcj...found</code>
+
+<p>Once the path to the virtual machine's binary has been identified, try running
+Eclipse with the following command:</p>
+
+<code>./eclipse -vm /path/to/jre/bin/java</code>
+
+<p>For an actual example, it might look something like the following:</p>
+
+<code>./eclipse -vm /usr/lib/jvm/sun-java-6/bin/java<br>
+./eclipse -vm /opt/sun-jdk-1.6.0.02/bin/java</code>
+
+<p>If this seems to solve the problem, it is likely that the problem really was
+related to the use of GCJ as the Java runtime for running Eclipse. The
+eclipse.ini file located within Eclipse's folder can be altered to
+automatically pass this argument to Eclipse at startup. An example of its
+content is presented below:</p>
+
+<code>-showsplash<br>
+org.eclipse.platform<br>
+--launcher.XXMaxPermSize<br>
+256m<br>
+-vm<br>
+/opt/sun-jdk-1.6.0.02/bin/java<br>
+-vmargs<br>
+-Xms40m<br>
+-Xmx512m</code>
+
+<p>Note that every argument must be on its own line. More information about the
+eclipse.ini file can be found at <a href="http://wiki.eclipse.org/Eclipse.ini">http://wiki.eclipse.org/Eclipse.ini</a>.</p>
+
+<p>If problems persists after downloading an installation of Eclipse from
+eclipse.org and using a supported Java runtime environment (a list of which may be found <a href="#TargetOperatingEnvironments">above</a>),
+you can seek further assistance through the <a href="http://www.eclipse.org/newsgroups/">newsgroups</a>,
+the IRC <a href="irc://irc.freenode.net/#eclipse">channel</a>,
+and/or <a href="https://bugs.eclipse.org/bugs/">bugzilla</a>.
+</p>
+
+<h3>3.1.3 <a name="I-General-UNC">General - UNC Paths</a></h3>
+<p>Eclipse 3.4.0 does not properly handle installation in a directory using
+Universal Naming Convention (UNC) paths. Limited uses of the platform will
+work in this environment, but there are known bugs with starting workspaces on
+a UNC location, or upgrading software installed in a UNC location
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235629">235629</a>,
+bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=207103">207103</a>).
+The platform is not well tested in such an environment.</p>
+
+<h3>3.1.3 <a name="I-General-64bitJava">General - 64-bit Java HotSpot(TM) VM</a></h3>
+<p>
+There is a known issue with the 64-bit Java HotSpot(TM) 1.6.0 VM compiler which causes eclipse to
+crash (see Sun bug <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614100">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614100</a>,
+and Eclipse bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=214092">214092</a>).
+The crash usually occurs within a VM CompilerThread when attempting to compile the method org.eclipse.core.internal.dtree.DataTreeNode.forwardDeltaWith.
+</p>
+
+<p>
+To work around the issue you can exclude the method org.eclipse.core.internal.dtree.DataTreeNode.forwardDeltaWith from being compiled with the following
+VM argument:
+</p>
+
+<code>
+-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith
+</code>
+
+<p>
+This VM argument can be placed in the eclipse.ini file after the -vmargs line like the following:
+</p>
+
+<code>
+-startup<br>
+plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar<br>
+--launcher.library<br>
+plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800<br>
+-showsplash<br>
+org.eclipse.platform<br>
+--launcher.XXMaxPermSize<br>
+256m<br>
+-vmargs<br>
+-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith<br>
+-Xms40m<br>
+-Xmx256m<br>
+</code>
+
+<p>
+There have been reports of other classes that cause the compiler to crash. If all else fails you can
+disable the compiler with the VM arg &quot;-Xint&quot;.
+</p>
+
+<h3>3.2 <a name="I-Platform">Platform</a></h3>
+
+<h3>3.2.1 <a name="I-Platform-Core">Platform - Core</a></h3>
+
+<h4>Installing plug-ins by unzipping them into the plugins directory</h4>
+<p>If you have installed new plug-ins and they aren't showing up when you run,
+then perhaps you unzipped them into your "plugins" directory and your
+configuration might need to be refreshed. This can be accomplished by starting
+Eclipse with the <tt>-clean</tt> command line argument.</p>
+
+<h4>XML files with UTF-8 byte order mark fail to have content type detected</h4>
+<p>Eclipse will fail to detect the proper content type for XML files that have a
+UTF-8 byte order mark if Crimson is the XML parser (as it is on Sun 1.4 JREs,
+but not on Sun 1.5 JREs). This
+problem will prevent actions normally available when files of the affected
+content types are selected from being presented to the user. The workaround is
+to ensure the default XML parser supports UTF-8 BOMs (such as Xerces does). (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
+<h4>No branding with old config.ini</h4>
+<p>If you have an old config.ini file and use it with a new Eclipse build, you
+may not get the correct product branding. This is because the id of the standard
+Eclipse product changed. Users in shared install scenarios may end up in this
+situation as previous builds of Eclipse automatically generated config.ini files
+in some cases. The work around is either to delete the local config.ini or
+update the eclipse.product line to read eclipse.product=org.eclipse.platform.ide.</p>
+
+<h4>Problems with
+classloaders in created threads</h4>
+<p>There is a known issue with trying to load classes from a newly-created
+thread using a class loader different from the plug-in class loader. The result
+will be a <code>ClassNotFoundException</code>. As a workaround, do the
+following:</p>
+<ol>
+ <li>Create a thread in which to run your code.</li>
+ <li>Send yourThread.setContextClassLoader(yourClassLoader); // you can find
+ your classloader by grabbing a class it loaded (YourPluginClass.class.getClassLoader())</li>
+ <li>Run your code in the newly created thread.</li>
+</ol>
+<p>If you set the context class loader for the current thread, you are
+competing with other users of the thread (all of Eclipse), so the results will
+be unpredictable. However, there should be no problem in practice provided you
+reset the context class loader back to its original value when your use in the
+current thread is&nbsp;complete. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=8907">8907</a>)</p>
+
+<h4>Deadlock creating executable
+extension in Plugin.startup</h4>
+<p>If <code>Plugin.startup</code> code is too complex and performs tasks such
+as creating an executable extension, a deadlock situation can be created. Only
+simple bookkeeping tasks should be performed in <code>Plugin.startup</code>
+code. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=5875">5875</a>)</p>
+<h4>Potential Problems Converting Plug-in Manifests</h4>
+<p>If your plug-in ships with a plug-in manifest and not an OSGi bundle manifest,
+is shipped as a JAR file, and contains a nested JAR file then there may be
+problems in the automatic generation of the bundle manifest file. The packages
+defined in the nested JAR may not be exported correctly in the <tt>Export-packages</tt>
+
+bundle manifest header. To work around this you should ship your plug-in with a
+bundle manifest. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=97689">97689</a>)</p>
+<h4>Location for Debug Options File on Mac OS</h4>
+<p>If you are running in debug mode on Mac OS, the default location for the
+.options file is inside the application bundle in the Eclipse.app/Contents/MacOS
+directory (like the eclipse.ini). (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88782">88782</a>)</p>
+<h4>Configuration can become invalid when removing org.eclipse.update.configurator</h4>
+<p>When launching an Eclipse Application from within the Eclipse IDE it is possible
+to select the set of plug-ins that are included in the Eclipse Application.
+Removing the org.eclipse.update.configurator plug-in from the set of plug-ins to
+an existing configuration can cause the configuration to become invalid. This
+can result in extra plug-ins installed in the target application that are not
+resolved. To work around this, after the org.eclipse.update.configurator
+plug-in has been removed, the target configuration area should be cleared before
+launching. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=85835">85835</a>)</p>
+
+<h4>Issues with JNI that use FindClass</h4>
+<p>
+There may be issues when using a JNI implementation that uses FindClass
+in a function where the JNIEnv pointer is not available, such as in a C
+callback (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125250">125250</a>). The reason is that FindClass, in this case, uses the application
+class loader to find the class.
+If the desired class is in the classpath used for the application classloader
+(e.g. defined by the VM argument -cp &lt;classpath&gt;), as it would typically be in
+a stand-alone application, there is no problem. However, under
+Eclipse, the application classloader does not have access to classes
+contained in plug-ins. Eclipse uses its own class loader to find classes
+contained in plug-ins.
+</p>
+<p>
+The proper plug-in class loader is used by FindClass in JNI functions which are
+passed the JNIEnv pointer, but not when you have to use AttachCurrentThread to get the
+JNIEnv pointer. In this case the application classloader is used.
+</p>
+<p>
+For example, the following will fail because AttachCurrentThread is used to
+get the JNIEnv pointer:</p>
+<pre>
+static JavaVM* jvm; // Global variable
+
+void myCallback(void) {
+ JNIEnv* env;
+ jvm-&gt;AttachCurrentThread((void**)&amp;env, NULL);
+ // Fails if some/class is not in the application classloader:
+ jclass cls = env-&gt;FindClass(&quot;some/class&quot;);
+ jmethodID methodID = env-&gt;GetMethodID(cls, &quot;methodName&quot;,
+ &quot;(Ljava/lang/String;)V or whatever signature&quot;);
+ env-&gt;CallVoidMethod(callback, methodID, ...);
+ jvm-&gt;DetachCurrentThread();
+ }
+}
+</pre>
+<p>
+A solution is to cache the method ID, for example:
+</p>
+<pre>
+static jmethodID mid; // Global variable
+
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
+...
+ // Store the JavaVM pointer
+ jvm = vm;
+
+ // Find the class and store the method ID
+ // Will use the class loader that loaded the JNI library
+ jclass cls = env-&gt;FindClass(className&quot;some/class&quot;);
+ if(!cls) goto ERR;
+
+ mid = env-&gt;GetMethodID(cls, &quot;methodName&quot;,
+ &quot;(Ljava/lang/String;)V or whatever signature&quot;);
+ if(!mid) goto ERR;
+...
+}
+
+void myCallback(void) {
+ JNIEnv* env;
+ jvm-&gt;AttachCurrentThread((void**)&amp;env, NULL);
+ env-&gt;CallVoidMethod(callback, mid, ...);
+ // Handle error ...
+ jvm-&gt;DetachCurrentThread();
+ }
+}
+</pre>
+
+
+<h3>3.2.2 <a name="I-Platform-Ant">Platform - Ant</a></h3>
+<h4>UTF-8 encoded buildfiles with Byte Order Mark</h4>
+<p>UTF-8 encoded buildfiles with byte order marks will fail to be parsed correctly depending on the XML parser being used for the build. Therefore a valid buildfile will fail to build with an error message similar to: "BUILD FAILED: C:\workspace\bom.xml:1: Document root element is missing.". To succeed in building with these files, ensure to include Xerces jars on the Ant runtime classpath so that the Xerces parser is used to parse the XML. As well the context menu for these files in the Navigator or Package Explorer will not have the run shortcuts for Ant builds. (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
+<h4> Custom Ant tasks and Ant
+types must be separate from plug-in library JARs</h4>
+<p>Including the class files for custom Ant tasks or Ant types in the regular
+code JAR for your plug-in causes problems. These class files must be provided in
+a separate JAR that is contributed to the <code>org.eclipse.ant.core.antTasks</code>
+or <code>antTypes</code> extension point (and not declared as a library in the
+plug-in's manifest). This ensures that the Ant tasks and types are loaded by the
+special Ant class loader and not by a plug-in classloader. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34466">34466</a>).</p>
+
+<h4> Concurrent Ant builds not supported</h4>
+<p>Eclipse can run Ant in the same JVM as the rest of Eclipse. Several aspects
+of Ant and its use of global Java resources (such as System.out and System.err),
+make it unsafe to run more than one Ant build concurrently in the same JVM. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=24129">24129</a>).</p>
+<h4> Running certain Ant tasks
+cause memory leakage</h4>
+<p>Certain Ant tasks are known to leak memory. Please see the bug report for
+details, patches, and possible workarounds. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=24448">24448</a>)</p>
+<h4> Tasks that require input
+lock up workspace</h4>
+
+<p>As with using Ant from the command line, prompts for input from the
+console is not handled. This is not the same as making use of the &lt;input&gt;
+task, which works correctly within Eclipse. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=21748">21748</a>)</p>
+<h4>&quot;version&quot; property is always set when running Ant in the same VM as Eclipse</h4>
+<p>The Xalan libraries set system properties including a version property. These get set as properties within the Ant build and therefore the "version" property cannot be set within an Ant buildfile due to the immutable nature of Ant properties. This property will always be set to "2.4.1" for Ant builds in the same VM as Eclipse. (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45717">45717</a>)</p>
+<h4>XDoclet support from within Eclipse</h4>
+
+<p>Since there are differences when running Ant from the commandline and within Eclipse, some extra steps may be needed to have XDoclet support function correctly within Eclipse. Problems may occur creating XDoclet subtasks. The workarounds and full discussion can be found in bug report. (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37070">37070</a>)</p>
+<h4>Ant Editor code completion based on Ant 1.6.1</h4>
+<p>Code completion provided by the Ant editor does not respect the user-specified version of org.eclipse.ant.core plug-in or ANT_HOME. Code completion proposals are mostly based on Ant 1.6.1 with some updates to Ant 1.6.5 (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=30886">30886</a>)</p>
+<h4> Eclipse can hang due to implementation of the Ant &lt;property&gt; task (Windows 9X
+only)</h4>
+<p>On Windows 9X, using:&lt;property environment="env"/&gt; will cause Eclipse to hang if the build occurs in the same VM as Eclipse. Running the build in a separate VM will hang the build but not Eclipse.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44196">44196</a>)</p>
+
+<h4> Setting build loggers not supported when debugging Ant builds</h4>
+<p>When debugging Ant builds within Eclipse, setting -logger as a program argument will be ignored.</p>
+
+<h4>Renaming an External Tool builder set to run during auto-build will cause errors</h4>
+<p>If you rename an existing external tool builder that is configured to run during auto-builds, you will get the following error:
+ Errors during build.
+ Errors running builder "Integrated External Tool Builder" on project
+ &lt;PROJECT_NAME&gt;.
+ The builder launch configuration could not be found.
+The workaround is to first disable the builder for auto-builds and then rename the builder.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=118294">118294</a>)</p>
+
+<h4>Slow typing/saving of the Ant editor with imports that define numerous macrodefs</h4>
+<p>The Ant editor is slow on saving with buildfiles that have &lt;import&gt; declarations of buildfiles that have numerous &lt;macrodef&gt;s.
+See bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=92640">92640</a> and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125117">125117</a> for possible workarounds</p>
+
+<h4>Failure to run Ant builds on non-Windows platforms if Eclipse installed in location with spaces in the path</h4>
+<p>Due to a bug in Ant 1.7.0, Ant builds will fail with an IllegalArgumentException if the Eclipse installation is in a location with spaces in the path.
+Embedded usage of Ant builds, such as plug-in export will also fail.
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=187993">187993</a> for possible workarounds</p>
+
+<h3>3.2.3 <a name="I-Platform-User-Assistance">Platform - User Assistance</a></h3>
+<h4>Welcome page not displayed properly (Linux/Unix)</h4>
+<p>The default Welcome implementation is HTML-based and requires a supported browser
+in order to work. If no supported browser can be found, Welcome falls back to its
+Forms-based implementation, which has a different (simpler) appearance. Consult the
+<a href="http://www.eclipse.org/swt/faq.php#browserplatforms">SWT FAQ</a> for supported
+browsers and setting up your browser to work with eclipse.
+</p>
+
+<h4>Help browser tool bar buttons do not work for some documents</h4>
+<p>The Help browser's Print, Synchronize, and Bookmark buttons do not work for
+pages that are not actually installed with the product. However, you can always
+use the print command in the browser's context menu to print the page you're
+reading. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44216">44216</a>)</p>
+<h4> Help documents not displayed
+in a browser or very slow document loading (Windows only)</h4>
+
+If your LAN settings are not properly configured for local host access, your
+Help browser might open to a blank page or display an HTTP error instead of a
+help page, or you may experience long delays when loading help documents. Your
+system administrator can configure your LAN settings so that help documents can
+be accessed from the local help server.
+<blockquote>
+ <ol>
+ <li>In the Control Panel, open <b>Internet Options</b>, select the <b>Connections</b>
+ tab and choose <b>LAN Settings</b>.</li>
+ <li>If your host was configured to use DHCP for IP assignment, make sure
+ that the &quot;Automatically detect settings&quot; check box is cleared.</li>
+ <li>If you use a proxy server, ensure that the &quot;Bypass proxy server
+ for local addresses&quot; is selected.</li>
+ <li>In &quot;Advanced&quot; settings for proxies, add
+ &quot;127.0.0.1;localhost&quot; to the &quot;Exceptions&quot; if these
+ addresses are not listed.</li>
+ <li>If you are using an automatic configuration script for proxy
+ settings, and are not sure that the script is correct, clear the &quot;Use
+ automatic configuration script&quot; check box.</li>
+
+ </ol>
+</blockquote>
+<p>If the above steps do not fix your problem, try changing the port and host
+properties on the <b>Help &gt; Help Server</b> preference page. In general,
+setting <code>host</code> to <code>localhost</code> or <code>127.0.0.1</code>
+
+should work. Also, especially when running a firewall, you may want to specify
+port 80 or some other firewall-friendly value. (bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=7036">7036</a>,
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=9418">9418</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=11394">11394</a>)</p>
+<h4> Working disconnected from
+the network (Windows only)</h4>
+If you are experiencing problems when not connected to the network, you must
+install the loopback adapter from the Windows installation CD. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=831">831</a>)
+<h4> Using Internet Explorer in
+offline mode (Windows only)</h4>
+
+If you have been using Internet Explorer in Offline mode, when you access the
+help system you will get a message indicating that the web page you requested is
+not available offline or a blank page will display. Click <b>Connect</b> or
+deselect &quot;Work Offline&quot; in the Internet Explorer &quot;File&quot; menu
+to return the system behavior to normal.
+<h4>Help topics not highlighted in High Contrast mode (Windows only)</h4>
+<p>Windows High Contrast settings are not consistently picked up by Internet
+Explorer when they are set from the Accessibility Options utility as opposed to
+when they are set using the predefined schemes. On Windows XP, it is recommended
+to set High Contrast as follows: Right click the desktop, chose properties,
+select Windows Classic style from the Windows and buttons drop down on the
+Appearance tab, and choose your scheme (for example High Contrast Black) from
+Color Scheme drop down. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=28609">28609</a>)</p>
+<h4>Help browser displays a blank page</h4>
+
+<p>If you see a help launched with a blank page, and no errors displayed, it can
+be caused by a conflict between libraries in org.eclipse.tomcat plug-in and jars
+optionally installed in JRE jre/lib/ext directory. To fix the problem, ensure
+that the JRE used for running Eclipse does not contain any J2EE or Apache jars
+in the jre/lib/ext directory. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63970">63970</a>)</p>
+
+<h3>3.2.4 <a name="I-Platform-UI">Platform - UI</a></h3>
+<h4>High contrast settings</h4>
+<p>Eclipse was tested for High Contrast using 1152 x 864 resolution in Windows
+XP High Contrast mode. You can select this mode by selecting Accessibility
+Options &gt; Display &gt; Use High Contrast from the Windows XP Control Panel
+menu.</p>
+<h4>Default text file encoding
+may be detected incorrectly (Windows XP/2000 only)</h4>
+
+<p><strong>Note</strong>: the bug report associated with this problem has been fixed. If you run Eclipse with JDK 1.5 or greater you should not have to use the workaround stated below any longer. However, the problem still exists when running Eclipse with JDK 1.4.x or lower, so in this case the workaround is still required . </p>
+<p>The &quot;Text file encoding&quot; value displayed in the Preferences
+ dialog under &quot;Editors&quot; may be wrong on platforms running Windows XP
+(or 2000) when the user locale and system locale differ.&nbsp;</p>
+<p>Example of the manifestation of the bug: A Japanese user using Japanese
+Windows 2000 works in New York, United States. The user has selected English
+(United States) as the user locale. The &quot;Text file encoding&quot; value
+displayed by Eclipse is incorrect: &quot;Cp1252&quot; (English). It should
+display the system locale &quot;MS932&quot; (Japanese).</p>
+<p>Workaround: The user can modify the user locale so that user locale and
+system locale are identical. In the example above, this means the user should
+set Japanese as the user locale. Then restart Eclipse. The &quot;Text file
+encoding&quot; value will then be correct: &quot;MS932&quot; (Japanese).</p>
+
+<p>For Windows XP:</p>
+<ul>
+ <li>To check the system locale: Open the Control Panel. Go to Regional and
+ Language Options. Switch to the Advanced tab. The system locale is specified
+ in &quot;Language for non-Unicode programs&quot;.</li>
+ <li>To change the user locale: Open the Control Panel. Go to Regional and
+ Language Options. The user locale can be modified by changing the language
+ in &quot;Standards and formats&quot;.</li>
+</ul>
+<p>For Windows 2000:</p>
+<ul>
+ <li>To check the system locale: Open the Control Panel. Go to Regional
+ Options. Look up the items in the General tab, inside the &quot;Language
+ settings for the system&quot; group. The system locale is the item marked as
+ (Default).</li>
+ <li>To change the user locale: Open the Control Panel. Go to Regional
+ Options. The user locale can be modified by changing the location in
+ &quot;Settings for the current user&quot;.</li>
+
+</ul>
+<p>(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=20641">20641</a>)</p>
+<h4> Dirty state not tracked
+properly for OLE documents (Windows only)</h4>
+<p>The dirty state for an OLE document is not updated properly. This causes
+Eclipse to prompt to save the contents of the editor when the document is
+closed, even if the contents have already been saved. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=2564">2564</a>)</p>
+<h4> OLE document crashes can
+cause Eclipse to also crash (Windows only)</h4>
+<p>If an OLE document crashes, Eclipse can crash, or the workbench menus can
+become inconsistent.</p>
+<h4>2.1 Presentation based workspaces incorrectly get new Min/Max behavior</h4>
+<p>
+Workspaces that are currently using the Eclipse 2.1 Presentation will incorrectly
+'inherit' the new min/max behavior when opened with 3.3.
+</p>
+<p>
+Workaround:</p>
+<ol>
+ <li>Go to the 'Preferences -&gt; Appearance' page, change the current presentation to 'Default' and select apply</li>
+ <li>Change it back to the 2.1 Presentation, select 'OK' and 'Yes' to the restart prompt</li>
+</ol>
+When the workbench re-opens the old min/max behaviour will be restored.
+<h4>Toolbars only containing contributed controls exhibit display errors on Mac/Linux</h4>
+<p>
+Currently there is no way on the Max or Linux platforms to define the <b>height</b> for controls contributed to
+toolbars, nor will those platforms respect the size returned by the control's <code>computeSize</code> method. If you
+encounter this issue there is currently no truly viable workaround.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=183003">183003</a>)
+</p>
+
+
+<h3>3.2.5 <a name="I-Platform-Text">Platform - Text</a></h3>
+None.
+
+<h3>3.2.6 <a name="I-Platform-SWT">Platform - SWT</a></h3>
+<h4>Eclipse plug-in based on the SWT Browser throws exception</h4>
+<p>The SWT Browser widget uses a platform-specific web browser to render HTML.
+The org.eclipse.swt.SWTError exception (&quot;No more handles&quot;) is thrown
+on platforms that don't meet the requirements for running the Browser widget.
+Supported platforms and prerequisites are listed on the SWT FAQ item <a href="http://www.eclipse.org/swt/faq.php#browserplatforms">
+&quot;Which platforms support the SWT Browser?&quot;</a>.</p>
+
+<h4>Crash when using the file dialog (Windows XP with SP2 only)</h4>
+<p>With some versions of Synergy from Telelogic, Eclipse will crash when you try to open a file
+dialog. This is due to a problem with the CMExplorer.dll. The workaround is to
+upgrade to Synergy 6.4 (or higher) or to run <code>regsvr32 /u CMExplorer.dll</code> and
+reboot (note that this will disable Active CM).
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87798">87798</a>)</p>
+
+<h4>Opening File Dialog crashes eclipse (Vista only)</h4>
+<p>On Vista, launching eclipse using <code>-vmargs -Xmx[any size]</code> can crash eclipse when the FileDialog is opened.
+The workaround is to use the default heap size, i.e. do not use the <code>-Xmx</code> VM args.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188317">188317</a>)</p>
+
+<h4>Internet Explorer sometimes freezes on PDF documents with Acrobat Reader 6 (Windows only)</h4>
+<p>With Acrobat Reader 6 or 7, some users have experienced an unresponsive user
+interface for up to two minutes when closing a browser which is displaying a PDF document.
+The workaround is to disable displaying PDF in the browser. In Adobe Reader
+select Edit &gt; Preferences... &gt; Internet and uncheck 'Display PDF in browser'.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56184">56184</a>)</p>
+
+<h4>Crash while editing text (Windows XP with SP2 only)</h4>
+<p>Some users who have installed Service Pack 2 on Windows XP have experienced
+crashes while using editors in Eclipse. The workaround is to place a working version
+of Windows\System32\USP10.DLL in the Eclipse startup directory or uninstall
+Service Pack 2.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56390">56390</a>)</p>
+
+<h4>Input Method broken (Motif only)</h4>
+<p>Some versions of RedHat Linux such as Fedora Core 3 and Enterprise Linux WS
+release 4 use a new technology called IIIM (Intranet/Internet Input Method
+Framework) to replace the old XIM (X input method). When running on these
+new systems, Eclipse will crash if you attempt to enter any DBCS character. The
+workaround is to use a XIM based input method such as chinput. This problem
+may be fixed in newer releases of RedHat.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=89722">89722</a>)</p>
+
+<h4>Eclipse does not start on Linux-Motif with Xinerama and a UTF-8 locale</h4>
+<p>The Linux-motif build of Eclipse does not launch properly when run on a
+computer with Xinerama (provides support for dual head monitors) and a UTF-8
+locale. The workaround for this problem is to change the locale to a non-UTF-8
+value, or to disable Xinerama.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38843">38843</a>)
+</p>
+
+<h4>Eclipse hangs when pasting from an unresponsive application (GTK only)</h4>
+<p>If the application that is supplying the clipboard material is unresponsive,
+the paste operation hangs Eclipse for several minutes. This situation can be
+encountered when copying from an Eclipse target workbench, suspending the target
+workbench at a breakpoint and pasting into the hosting Eclipse workbench. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44915">44915</a>)</p>
+
+<h4>Unable to drag data between applications in simplified Chinese locale (Motif only)</h4>
+<p>When configured for the simplified Chinese locale, it is not possible to
+drag data between applications running on the Motif window system. This is a
+known limitation of the Open Motif library. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=29777">29777</a>)</p>
+
+<h4>Crash when attempting to launch file browser (AIX Motif only)</h4>
+<p>There is a known AIX graphics bug affecting certain levels of AIX
+releases. Ensure that the AIX install includes the necessary service updates as
+described in the &quot;Install notes/requirements for Eclipse on AIX&quot;
+attachment to Eclipse bug report number <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34524">34524</a>.</p>
+
+<h4>Available colors on 8-bit Linux (Linux only)</h4>
+<p>Typically, in Gnome Linux installs running with 8-bit visuals (i.e. 256
+color mode), before the Eclipse application is started there are no free colors.
+This may mean that Eclipse is unable to allocate the default widget background
+color, causing it to display a white background. The functionality, however, is
+otherwise unaffected.</p>
+
+<h4>IME-related crash (Linux Motif only)</h4>
+<p>When using Linux Motif and GB18030 IME &quot;chinput&quot;, Eclipse can
+crash if the IME client window is left open when the parent window is disposed.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=32045">32045</a>)</p>
+
+<h4>IME converstion problem (Solaris GTK only)</h4>
+<p>When typing Japanese text, the conversion to Kanji must be done one ideogram at
+a time. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=226636">226636</a>)</p>
+
+<h4>Using IBM J9 VM (Photon and AIX)</h4>
+<p>On QNX Photon and IBM AIX, the SWT library will not be found when running
+with an IBM J9 1.5 VM. This is a bug in the IBM J9 class library in version 1.5.
+You can workaround this problem by adding the SWT library directory to your
+LD_LIBRARY_PATH environment variable.</p>
+
+<h4> gtk_init_check and X11 socket failure when using the IBM 1.4.2 JRE (GTK only)</h4>
+<p>Under RHEL 3.1 with the IBM 1.4.2 JRE and a large number
+of plugins, Eclipse may fail to launch with an exception from
+<tt>gtk_init_check</tt> along with this error:</p>
+<pre>
+_X11TransSocketOpen: socket() failed for local
+_X11TransSocketOpenCOTSClient: Unable to open socket for local
+</pre>
+<p>A workaround is to set the environment variable <tt>JAVA_HIGH_ZIPFDS</tt> to
+a value of 500 before starting Eclipse. (bug
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106396">106396</a>)</p>
+
+<h4>Key bindings can stop working on Debian (GTK+ only)</h4>
+<p>On some versions of Debian, Eclipse key bindings may stop working. In this context
+the only way to make the key bindings work again is to restart Eclipse.
+</p><p>
+The problem is that a focus issue exists in GTK+ 2.6.7 and earlier, for which SWT has
+a workaround. This workaround is incompatible with the GTK+ 2.6.7 fix, so a GTK+ version
+check is done at runtime to determine whether the workaround should be used or not.
+However, Debian backported the GTK+ focus fix into their libgtk+2.0 (2.6.4-2) package,
+so the SWT workaround and GTK+ fix are both incorrectly applied in this context.
+</p><p>
+To work around this problem, either get the Debian unstable version of GTK+, compile your
+own GTK+, or hack SWT's Shell.gtk_realize(int) and change the version that it checks.
+See SWT bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107013">107013</a>
+and GTK+ bug <a href="http://bugzilla.gnome.org/show_bug.cgi?id=109246">109246</a>
+for more information.</p>
+
+<h4>Browser does not display applets (Windows and OS X)</h4>
+<p>The Browser widget cannot be used to display pages containing Java applets on Windows
+and OS X, as a result of crashes that occur when attempting to launch a second JVM for the
+applet that is in-process with the main process JVM. The workaround for clients wishing
+to display web pages with Java applets is to launch an external web browser to do so with
+<code>org.eclipse.swt.program.Program</code> (see bugs
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59506">59506</a> and
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100622">100622</a>).</p>
+
+<h4>Eclipse hangs with earlier versions of Quicktime (Intel Mac OS X only)</h4>
+<p>Some users reported encountering system hangs while using Eclipse on Intel-based Macs.
+These hangs were traced to a problem in some versions of QuickTime, which has now been fixed.
+Therefore, Eclipse users on Intel-based Macs should use Quicktime's update facilities to ensure
+that their Quicktime version is at least 7.1.1. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142892">142892</a>)
+</p>
+
+<h4>Typing in an editor crashes with IBM 1.5 VM (Linux GTK PPC only)</h4>
+<p>When running on the IBM Java 5.0 VM, Eclipse crashes while the user is typing in an editor.
+If using this VM you must disable the JIT with the -Xnojit vm argument to avoid the crashes
+(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=116730">116730</a>).
+The command line for launching Eclipse with this vm should be: <br>
+<code>eclipse -vmargs -Dosgi.locking=none -Xnojit</code>
+</p>
+
+<h4>Eclipse won't start (Linux GTK PPC only)</h4>
+<p>Eclipse fails to create a lock file with reason &quot;No locks available&quot;.
+To launch eclipse you must disable file locking using the osgi.locking property.
+For example, you could launch eclipse as follows: <br>
+<code>eclipse -vmargs -Dosgi.locking=none</code>
+</p>
+
+<h4>SWT_AWT bridge doesn't work (Mac OSX only)</h4>
+<p>In order to use the SWT_AWT bridge on the Mac, OS X jre version 1.5.0 Release 5
+(or greater) must be used.
+</p>
+
+<h4>Eclipse printing is disabled or Eclipse hangs when opening editor (GTK only)</h4>
+<p>In order to print from eclipse on GTK, you need to have GTK+ version 2.10 or later.
+In addition, at least two print backends must exist on the machine: file and lpr.
+Assuming a that GTK was installed in /usr, the installed backends can be viewed at /usr/lib/gtk-2.0/2.10.0/printbackends.
+</p>
+
+<h4>SWT cannot be used with OS X JRE version 1.6 (Mac OSX only)</h4>
+<p>OS X JRE version 1.6 assumes that pointers have a size of 64 bits, but SWT's Carbon
+port only uses 32-bit pointers, so SWT and Eclipse cannot be used with OS X JRE version
+1.6. The workaround is to use an earlier supported version of the OS X JRE.
+</p>
+
+<h4>Browser.setText() cannot be used with beta versions of Firefox 3.0/XULRunner 1.9</h4>
+<p>As a result of a late interface change in the Firefox 3.0/XULRunner 1.9 development stream,
+most beta versions of these applications cannot be used by the Browser if its <code>setText()</code>
+API is used. This problem can be fixed by upgrading to the final release versions of these
+applications. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235020">235020</a>)
+</p>
+
+<h4>Strings may be truncated or incorrectly wrapped on RHEL5 (Linux GTK only)</h4>
+<p>
+Strings on wrapping Controls may not appear correctly in some locales on RHEL5 as a result
+of a bug in Pango version 1.14.x. This problem can be fixed by upgrading the installed
+Pango library to a version that is newer than 1.14.x. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231951">231951</a>)
+</p>
+
+<h3>3.2.7 <a name="I-Platform-Team-CVS">Platform - Team - CVS</a></h3>
+<p>The following are known problems with the CVS repository provider only, and
+do not apply to other repository providers. Additional information on how to use
+CVS from Eclipse can be found in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-vcm-home/docs/online/cvs_features2.0/cvs-faq.html">Eclipse
+CVS FAQ</a>.</p>
+<h4> CVS server compatibility</h4>
+<p>The CVS plug-in parses messages returned from the CVS server. If the format
+of these messages is not as expected, some of the plug-in's functionality may be
+missing. The CVS plug-in is compatible with all stable 1.11.X builds of the CVS
+server, and should be compatible with future releases in that stream unless text
+message formats change (the last tested server was 1.11.22). As for the 1.12.X
+feature releases of CVS, the Eclipse CVS client has been tested with builds up
+to 1.12.13. However, future releases could easily break the Eclipse CVS client.
+Basic functionality, such as Checkout, Commit, and Update, should always work,
+but there may be problems with more advanced commands such as Synchronizing and
+Browsing the repository.</p>
+
+<h4>SSH2 proxy settings lost upgrading to 3.3</h4>
+<p>CVS now uses the Platform proxy settings. As a result, any CVS proxy settings
+will be lost and must be re-entered on the General&gt;Network Connections preference
+page. </p>
+<h4>Connection cannot be found after initially missing</h4>
+<p>If a connection initially fails due to a network problem, the connection may
+continue to fail even when the network problem is fixed. In order to establish
+the connection you must exit and restart Eclipse. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=9295">9295</a>)</p>
+<h4>&quot;Received broken pipe signal&quot; error from server</h4>
+<p>Eclipse sometimes performs multiple commands within a single connection to
+the server. This may cause problems with CVS servers that are running server
+scripts in response to certain commands. (bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=23575">23575</a>
+and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=23581">23581</a>)</p>
+
+<h4>&quot;Terminated with fatal signal 10&quot; error from server</h4>
+<p>There is a bug in the CVS server related to some compression levels. If you
+get this error, changing the compression level on the CVS preference page may
+help. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=15724">15724</a>)</p>
+<h4>&quot;Unknown response&quot; error using ext connection method</h4>
+<p>There are a few situations that can result in an &quot;Unknown response&quot;
+error messages when using the ext connection method. One situation involves
+using an external communications client (e.g. rsh or ssh) that adds CRs to the
+communications channel (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=21180">21180</a>).
+Another involves Eclipse not properly reading the stderr output of the external
+communications tool. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=11633">11633</a>)</p>
+
+<h4>A disabled CVS capability may not be auto-enabled in existing workspaces</h4>
+<p>New in 3.0 is the ability to disable capabilities and the CVS support in
+Eclipse can be disabled. However, for backwards compatibility the CVS capability
+is auto-enabled in existing workspaces that already contain CVS projects. The
+auto-enabling function may not run if the team support plugin is not loaded at
+startup. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66977">66977</a>)</p>
+<h4>Builder output files may appear as changed</h4>
+<p>When folders containing build output are shared they may get improperly
+marked as dirty when build output is generated.</p>
+
+<h3>3.2.8 <a name="I-Platform-Install-Update">Platform - Install/Update</a></h3>
+<h4>Manually installing features and plug-ins on a FAT file system (Windows only)</h4>
+
+<p>When features and plug-ins are manually installed on top of an Eclipse-based
+ product install located on a FAT file system that has already been run at least
+ once, the product must be explicitly restarted with -clean. That is,</p>
+<pre>eclipse.exe -clean
+</pre>
+
+<h4>Connecting to untrusted sites using https</h4>
+<p>You cannot install or update software from a site using https whose certificate
+is not chained to a trusted root certificate in your local certificate store. This typically
+means the server is using a self-signed certificate, or a certificate authenticated by
+an unknown third party.</p>
+
+<h4>Removing a link file does not uninstall the corresponding extension location</h4>
+<p>If you have an extension location in an Eclipse-based application that is connected
+to your configuration via a link file, the extension is not removed when the link is deleted.
+The workaround is to move or delete the extension location, and restart the platform
+with the -clean command line argument. You can then restore or move back the
+extension location content to its original location (bug <A HREF="https://bugs.eclipse.org/bugs/show_bug.cgi?id=232094">232094</A>).
+</p>
+
+<p><B>Extension location is lost if the install path changes</B></p>
+<P>A previously configured extension location may be temporarily removed if the install is moved or mounted
+under a different path. This only happens when the link file that configures the
+extension location uses a relative path that points to a directory under the Eclipse
+install. On a second startup using the same install path, the extension location
+is added again (bug <A HREF="https://bugs.eclipse.org/bugs/show_bug.cgi?id=95403">95403</A>). <BR></P>
+
+<h3>3.2.9 <a name="I-Platform-Debug">Platform - Debug</a></h3>
+<p>None. (Known problems with the Java debugger appear below in the <a href="#I-JDT">JDT</a>
+section.)</p>
+
+<h3>3.2.10 <a name="I-Platform-Compare">Platform - Compare</a></h3>
+<p>None.</p>
+
+<h3>3.3 <a name="I-JDT">Java development tools (JDT)</a></h3>
+
+<h4>Multiple regions formatting in a given source snippet</h4>
+In version 3.4, the new API method <code>org.eclipse.jdt.core.formatter.CodeFormatter.format(int, String, IRegion[], int, String)</code>
+has been added to allow the formatting of several regions in a source snippet with a single pass.<br>
+Even if specified, this method does not currently accept comments of the following kinds:
+<ul>
+<li><code>org.eclipse.jdt.core.formatter.CodeFormatter#K_SINGLE_LINE_COMMENT</code></li>
+<li><code>org.eclipse.jdt.core.formatter.CodeFormatter#K_MULTI_LINE_COMMENT</code></li>
+<li><code>org.eclipse.jdt.core.formatter.CodeFormatter#K_JAVA_DOC</code></li>
+</ul>
+This will be fixed in a future release (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=233967">233967</a>).
+
+<h4>Searching for constant field references</h4>
+<p>Search does not find references to constant fields inside binaries because
+the Java Language Specification mandates that constant field values be inlined
+in the class file's byte codes, leaving no trace of a field reference.&nbsp;(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=12044">12044</a>)</p>
+
+<h4> Cut, copy, paste not working
+for linked resources in views showing Java elements</h4>
+<p>The cut, copy, and paste actions do not work for linked files and folders
+appearing in views that show Java elements, including the Package Explorer. The
+workaround is to use these actions from the Navigator view instead. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34568">34568</a>)</p>
+<h4> Java working sets not
+working correctly for elements from JRE system library container</h4>
+<p>Applying a working set consisting entirely of elements from the JRE System
+library container as a filter to the packages view might result in an empty
+Package Explorer. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=35395">35395</a>)</p>
+
+<h4>Cannot generate Javadoc for packages with GB18030 characters in the name</h4>
+<p>Most class libraries do not properly support the creation of a system
+process (via <code>java.lang.Runtime.exec(...)</code>) when the specified
+command line contains GB18030 characters. Since Javadoc is created using the
+Javadoc executable provided with the JDK, generating Javadoc fails if the
+package or class name contains GB18030 characters. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=32215">32215</a>)</p>
+
+<h4>Side effects of Step into Selection and Run to Line</h4>
+<p>The actions &quot;Step into Selection&quot; and &quot;Run to Line&quot;
+optimistically set breakpoints on the line the user has chosen to step into or
+run to. However, the debugger can not determine if or when execution will ever
+reach the chosen line. The breakpoints set by the underlying implementation are
+not visible to the user and can cause execution to suspend unexpectedly at a
+later time, when the associated line is actually executed. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51507">51507</a>)</p>
+<h4>Default locale initialization incorrect</h4>
+<p>The default locale is generally initialized from the settings in the
+operating system when a target VM is launched. However, when using javaw.exe on
+JDK1.4.2, Windows XP, the default locale is incorrectly initialized to en_US, no
+matter what the operating system settings are. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65945">65945</a>)</p>
+<h4>Suspend on uncaught exception overrides exception breakpoint location filters</h4>
+<p>Exception breakpoints can be configured with location filters (inclusive and
+ exclusive). When an unchecked exception is configured to <b>not</b> suspend
+ execution in a specific class, execution will still suspend when the user preference
+ to suspend on uncaught exceptions is on. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66770">66770</a>)</p>
+
+<h4>Running Java programs with non-Latin-1 characters in package or class names</h4>
+You get a <code>java.lang.NoClassDefFoundError</code> when running Java
+programs with non-Latin characters in the package or class names. The workaround
+is to package the class files as a JAR file and run the program out of the JAR
+and not from the file system directly. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=4181">4181</a>)
+
+<h4>Cannot run or debug class in
+a project with GB18030 characters in project name</h4>
+<p>Most class libraries do not properly support the creation of a system
+process (via <code>java.lang.Runtime.exec(...)</code>) when the specified
+command line contains GB18030 characters. This limitation means the debugger
+cannot launch applications when the command line it generates contains GB18030
+characters. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=32206">32206</a>)</p>
+<h4>Cannot detect installed JRE with GB18030 characters in path name</h4>
+<p>Automatic JRE detection fails when the JRE is stored in a directory
+containing GB18030 characters in its name. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=33844">33844</a>)</p>
+<h4> Unable to debug stack
+overflows</h4>
+
+<p>If a debug session suspends on a <code>java.lang.StackOverflowError</code>
+exception (due to an exception breakpoint), the debugger may not be able to
+retrieve any debug information from the target JVM. As well, the debugger may
+not be able to reliably interact with the target JVM past this point. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=19217">19217</a>)</p>
+<h4> Evaluation limitation</h4>
+<p>The debugger uses threads in the target JVM to perform evaluations (both
+explicit evaluations that the user requests, and implicit evaluations such as <code>toString()</code>
+invocations in the <b>Variables</b> view). The Java Debug Interface (JDI)
+requires that the thread in which an evaluation is performed be suspended by a
+user event (that is, a breakpoint or step request). Evaluations cannot be
+performed on threads suspended by the suspend action. As well, when a breakpoint
+is configured to suspend the JVM rather than just the individual thread, the
+threads which did not encounter the breakpoint are not in a valid state to
+perform an evaluation. When an evaluation is attempted in a thread that is not
+in a valid state to perform an evaluation, an error message will appear to the
+effect of &quot;Thread must be suspended by step or breakpoint to perform method
+invocation&quot;. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34440">34440</a>)</p>
+
+<h4> Missing debug attributes</h4>
+The debugger requires that class files be compiled with debug attributes if
+it is to be able to display line numbers and local variables. Quite often, class
+libraries (for example, &quot;<code>rt.jar</code>&quot;) are compiled without
+complete debug attributes, and thus local variables and method arguments for
+those classes are not visible in the debugger.
+<h4> Using Hot Code Replace</h4>
+<p>Hot code replace is supported on JDK 1.4.x VMs, and IBM J9 VMs. The debugger
+will attempt to replace all class files that change in the workspace as the user
+edits and builds source code. However, hot code replace is limited to changes
+that a particular virtual machine implementation supports. For example, changes
+within existing methods may be supported, but the addition or removal of members
+may not be.</p>
+<p>Note that hot code replace and stepping on JDK 1.4.0 VMs was unreliable. The
+underlying VM problems were fixed in JDK 1.4.1, and later.</p>
+<h4> Scrapbook</h4>
+Setting a breakpoint inside a scrapbook page is not supported.
+
+<p>When a snippet is run in the scrapbook which directly or indirectly calls <code>System.exit(int)</code>,
+the evaluation cannot be completed, and will result in a stack trace for a <code>com.sun.jdi.VMDisconnectedException</code>
+being displayed in the scrapbook editor.</p>
+<p>Terminating a scrapbook page while it is performing an evaluation results
+in a <code>com.sun.jdi.VMDisconnectedException</code> being displayed in the
+scrapbook editor.</p>
+<h4> Debugging over slow
+connections</h4>
+A global Java debug preference specifies the debugger timeout, which is the
+maximum amount of time the debugger waits for a response from the target VM
+after making a request of that VM. Slow connections may require that this value
+be increased. The timeout value can be edited from the <b>Java &gt; Debug </b>preference
+page. Changing the timeout value only effects subsequently launched VM, not VMs
+that are already running.
+
+<h4> Updating of inspected values</h4>
+When inspecting the result of an evaluated expression in the debugger, it is
+important to note that the result displayed is the result of that expression at
+the time it was evaluated. For example, when inspecting a simple integer counter
+(primitive data type), the value displayed in the Expressions view is the value
+when the expression was evaluated. As the counter is changed in the running
+program, the inspected result will not change (since the view is not displaying
+the value bound to a variable - it is displaying the value of an expression, and
+the value of a primitive data type cannot change). However, if an expression
+results in an object, fields of that object will be updated in the inspector as
+they change in the running program (since the value bound to fields in an object
+can change).
+<h4> Stepping over native methods
+that perform I/O</h4>
+When the debugger steps over native methods that perform I/O to <code>System.out</code>
+or <code>System.err</code>, the output may not appear immediately unless the
+native performs a flush on the output buffer.
+<h4> VM and process termination
+running on IBM 1.3 JVM on Linux (Linux only)</h4>
+Terminating a launch, debug target, or system process associated with a debug
+target running on the IBM 1.3 JVM on the Linux platform does not work when the
+associated debug target has a suspended thread. To remove such debug targets
+from the debug UI, select <b>Terminate and Remove</b> from the debug view's
+pop-up menu (or use the shortcut &quot;delete&quot; key). Associated system
+processes in the OS may not be properly cleaned up. If a debug target has no
+suspended threads, termination works properly. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=1631">1631</a>)
+
+
+<h4> Memory View (Linux only)</h4>
+The feature to automatically load segments of memory while scrolling in the Memory
+view does not work on Linux. Instead the user must use the &quot;Next Page&quot; and &quot;Previous Page&quot; actions
+to manually load memory segments (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=74559">74559</a>)
+
+<h4>Java 6 Annotation Processing</h4>
+Java 6 annotation processors are supported in the batch compiler and in the IDE, with
+some limitations. Java 6 processors are only executed during a build, not while editing (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188558">188558</a>). Some methods
+in the processing API are unimplemented when compiling within the IDE, and will throw
+UnsupportedOperationException.
+
+<h3>3.4 <a name="I-PDE">Plug-in Development Environment (PDE)</a></h3>
+<h4>Feature manifest editor does not preserve all comments</h4>
+
+<p>When a non-source page of the feature manifest editor is used, PDE will convert
+changes back into XML by regenerating the file. Although the overall content and
+most of the comments are preserved, some comments may be lost. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59502">59502</a>)</p>
+<h4>PDE will not unzip source zips of some plug-ins</h4>
+<p>In the plug-in import wizard, when you choose to import plug-ins as
+&quot;projects with source folders&quot;, PDE will not unzip the source for the
+org.apache.ant, org.eclipse.core.runtime.compatibility.registry, org.eclipse.osgi.util and org.eclipse.osgi.services. This is
+because the source ZIPs contains code that will not compile when unzipped as it
+requires additional JARs that are not part of the SDK. To avoid the creation of
+plug-in projects that won't compile, PDE will import these plug-ins as binary
+and attach source, so you would still be able to read the source, you just won't
+be able to modify it. Also, PDE will not unzip the source for the
+org.eclipse.swt plug-ins. In this case, it is because, when shipped, the swt
+code is spread across a plug-in and a fragment, and when unzipped, it will
+require circular dependencies between the plug-in and fragment projects. These
+circular dependencies are at minimum marked as warnings by the JDT compiler and
+may result in unpredictable build behavior. Therefore, PDE always imports
+org.eclipse.swt as binary with source attached. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66314">66314</a>)</p>
+
+<h4>Emacs key bindings do not
+work in manifest editor fields</h4>
+<p>Non-default key bindings currently do not work in fields on non-source
+pages of the PDE manifest editors. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=19482">19482</a>)</p>
+<h4>Plug-in import wizard does
+not allow plug-ins of different versions to be imported</h4>
+<p>The Eclipse platform allows two plug-ins with the same ID but different
+versions to coexist if the only thing they contribute is run-time libraries.
+However, PDE cannot handle these plug-ins because it creates project names using
+plug-in IDs during binary project import. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=18500">18500</a>)</p>
+<h4>Export of plug-in may silently drop classes</h4>
+<p>When exporting a plug-in using the plug-in, feature or product wizards, some classes
+might be dropped from the resulting archive if their fully qualified name is too long.
+This typical path limitation can be worked around by creating the jar of the problematic
+plug-in by using the Jar export wizard.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=97150">97150</a>)</p>
+
+<h4>Compilation errors when exporting projects not stored outside of the workspace</h4>
+<p>When exporting multiple plug-ins and one is stored outside of the workspace,
+compile errors occurs on export. To work around the problem, you can either export
+the plug-ins one by one, or change their location.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=98579">98579</a>)</p>
+
+<h4>Headless build needs to be run from a fully qualified path</h4>
+<p>When running a headless build using the scripts provided by pde build, the properties <code>builder</code>
+and <code>buildDirectory</code> must refer to a fully qualified path.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=139554">139554</a>)
+</p>
+
+<h4>Target Platform only sees installed plug-ins</h4>
+<p>With the new p2 provisioning system in 3.4, PDE introduced a preference to control how target platforms are built.
+By default, this preference is on if your target equals your host, otherwise it's off. When this preference is enabled, PDE attempts to
+read a target platform's configuration and build the target platform based in the target's list of installed plug-ins. If a configuration
+can't be found (a bundles.info or platform.xml file), PDE will simply manually scan the target directory and populate the target platform's
+list of plug-ins.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=226037">226037</a> and bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=225148">225148</a>)
+</p>
+
+<h4>Delta pack is not seen by PDE when installed</h4>
+<p>If you're using the delta pack, the target platform preference for building a target based on the target's installed plug-ins must be checked off.
+This is because a target's runtime configuration only contains plug-ins specific to the platform it's running on.
+(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=230146">230146</a>)
+</p>
+
+<h2>4. <a name="Running Eclipse">Running Eclipse</a></h2>
+<p>After installing the Eclipse SDK in a directory, you can start the Workbench
+by running the Eclipse executable included with the release (you also need a 1.4.2
+JRE, not included with the Eclipse SDK). On Windows, the executable file is called <samp>eclipse.exe</samp>,
+and is located in the <code>eclipse</code> sub-directory of the install. If
+installed at <code>c:\eclipse-SDK-3.4-win32</code>, the executable is <code>c:\eclipse-SDK-3.4-win32\eclipse\eclipse.exe</code>.
+
+<b>Note:</b> Set-up on most other operating environments is analogous. Special
+instructions for Mac OS X are listed <a href="#macosx">below</a>.</p>
+
+<h3>Allocating enough memory and solving OutOfMemoryErrors</h3>
+<p>By default, Eclipse will allocate up to 256 megabytes of Java heap memory. This should
+be ample for all typical development tasks. However, depending on the JRE
+that you are running, the number of additional plug-ins you are using, and
+the number of files you will be working with, you could conceivably have to increase this amount.
+Eclipse allows you to pass arguments directly to the Java VM using the
+<code>-vmargs</code> command line argument, which must follow all other Eclipse specific arguments.
+Thus, to increase the available heap memory, you would typically use:</p>
+<blockquote>
+ <p><code>eclipse -vmargs -Xmx&lt;memory size&gt;</code></p>
+</blockquote>
+<p>with the <code>&lt;memory size&gt;</code> value set to greater than
+&quot;256M&quot; (256 megabytes -- the default).
+</p>
+<p>
+When using a Sun VM, you may also need to increase the size of the permanent
+generation memory. The default maximum is 64 megabytes, but more may
+be needed depending on your plug-in configuration and use. When the VM runs
+out of permanent generation memory, it may crash or hang during class loading.
+This failure is less common when using Sun JRE version 1.5.0_07 or greater.
+The maximum permanent generation size is increased using the -XX:MaxPermSize=&lt;memory size&gt; argument:</p>
+<blockquote>
+ <p><code>eclipse -vmargs -XX:MaxPermSize=&lt;memory size&gt;</code></p>
+</blockquote>
+<p>This argument may not be available for all VM versions and platforms; consult your VM documentation
+for more details.
+</p>
+<p>
+Note that setting memory sizes to be larger than the amount of available physical
+memory on your machine will cause Java to &quot;thrash&quot; as it copies objects
+back and forth to virtual memory, which will severely degrade your performance.
+</p>
+<h3>Selecting a workspace</h3>
+<p>When the Workbench is launched, the first thing you see is a
+dialog that allows you to select where the workspace will be located. The
+workspace is the directory where your work will be stored.
+If you do not specify otherwise, Eclipse creates the workspace in your
+user directory.
+This workspace directory is used as the default content area for your projects
+as well as for holding any required metadata. For shared or multi-workspace
+installs you must explicitly specify the location for your workspace using the
+dialog (or via the &quot;<code>-data</code>&quot; command line argument).</p>
+<h3>Specifying the Java virtual machine</h3>
+<p>Here is a typical Eclipse command line:&nbsp;</p>
+
+<blockquote>
+ <p><code>eclipse -vm c:\jdk1.4.2\jre\bin\javaw</code></p>
+</blockquote>
+<p><i>Tip:</i> It's generally a good idea to explicitly specify which Java VM to
+use when running Eclipse. This is achieved with the &quot;<code>-vm</code>&quot;
+command line argument as illustrated above. If you don't use &quot;<code>-vm</code>&quot;,
+Eclipse will look on the O/S path. When you install other Java-based products,
+they may change your path and could result in a different Java VM being used
+when you next launch Eclipse.</p>
+<p>To create a Windows shortcut to an installed Eclipse:</p>
+<ol>
+ <li>Navigate to <code>eclipse.exe</code> in Windows Explorer and use Create
+ Shortcut on the content menu.</li>
+ <li>Select the shortcut and edit its Properties. In the Target: field append
+ the command line arguments.</li>
+</ol>
+<p>Opening this shortcut launches Eclipse. (You can drag the shortcut to the
+Windows Desktop if you want to keep it in easy reach.)</p>
+
+<h3><a name="macosx">Mac OS X</a></h3>
+<p>On Mac OS X, you start Eclipse by double clicking the Eclipse application. If you need to
+pass arguments to Eclipse, you'll have to edit the <code>eclipse.ini</code> file
+inside the Eclipse application bundle: select the Eclipse application bundle icon while holding down the Control Key.
+This will present you with a popup menu. Select &quot;Show Package Contents&quot; in the popup menu.
+Locate <code>eclipse.ini</code> file in the <code>Contents/MacOS</code> sub-folder and open it with your favorite text editor to edit the command line options.
+</p>
+
+<p>
+On MacOS X you can only launch a UI program more then once if you have separate
+copies of the program on disk. The reason for this behavior is that every UI
+application on Mac can open multiple documents, so typically there is no need
+to open a program twice. Since Eclipse cannot open more than one workspace, this means you have to make
+a copy of the Eclipse install if you want to open more then one workspace at
+the same time (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=139319">139319</a>).
+</p>
+
+<p>If you need to launch Eclipse from the command line, you can use the symbolic link &quot;eclipse&quot; in the
+top-level eclipse folder. It refers to the eclipse executable inside the application bundle and takes
+the same arguments as &quot;eclipse.exe&quot; on other platforms.
+</p>
+<p>On Mac OS X 10.4 and later, you may notice a slow down when working with significant
+numbers of resources if you allow Spotlight to index your workspace. To prevent this, start
+System Preferences, select the Spotlight icon, then the Privacy tab, then click the Add button
+(&quot;+&quot;) and find your workspace directory in the dialog that appears.</p>
+<h3><a name="SharedInstall">Shared Install</a></h3>
+<p>The startup speed of a shared install can be improved if proper cache information is stored in the shared
+install area. To achieve this, after unzipping Eclipse distribution, run Eclipse once with the &quot;-initialize&quot;
+option from an account that has a write access to the install directory.</p>
+<h2>5. <a name="Upgrading"></a>Upgrading Workspace from a Previous Release</h2>
+
+<h3>Users who don't use &quot;-data&quot;</h3>
+<p>If you weren't previously using &quot;-data&quot; to specify your workspace,
+follow these steps to upgrade:</p>
+
+<ol>
+ <li>Find the workspace directory used by your old version of Eclipse.
+ Typically this is located inside the directory in which Eclipse was
+ installed in a sub-directory called &quot;<code>workspace</code>&quot;. If
+ you are using a shortcut or script to launch Eclipse, then it will be under
+ the current working directory of that shortcut or script in a sub-directory
+ called &quot;workspace&quot;. For Windows users, this is specified by the
+ &quot;Start in:&quot; argument in your shortcut properties.</li>
+ <li>Copy this workspace directory to a new, empty location outside of any
+ Eclipse install directory.</li>
+ <li>Install the new version of Eclipse in a new location, separate from any
+ old version of Eclipse.</li>
+
+ <li>If you had installed additional features and plug-ins into your old
+ Eclipse, you should re-install them in the new Eclipse.</li>
+ <li>Start this new version of Eclipse and select
+ this location using the workspace chooser dialog at startup (or use &quot;<code>-data</code>&quot;
+ command line argument to pre-select the workspace location).</li>
+</ol>
+<h3>Users who do use &quot;-data&quot;</h3>
+<p>If you were previously using the &quot;<code>-data</code>&quot; argument to
+start Eclipse, your upgrade path is much easier:</p>
+
+<ol>
+ <li>Optionally copy your workspace directory to a new, empty location outside of any
+ Eclipse install directory as a backup.</li>
+ <li>Install the new version of Eclipse in a new location, separate from any
+ old versions of Eclipse.</li>
+ <li>If you had installed additional features and plug-ins into your old
+ Eclipse, you should re-install them in the new Eclipse.</li>
+ <li>Start this new version of Eclipse and select this location using the workspace chooser dialog at
+ startup (or use &quot;<code>-data</code>&quot;
+ command line argument to pre-select the workspace location).</li>
+</ol>
+<p><i>Note:</i> Copying your workspace is recommended because,
+after you've upgraded your workspace, you won't be able to use it
+again with an older version of Eclipse. If you ever want to go &quot;back in
+time&quot; to an earlier release, you will need that backup.</p>
+
+
+<h2>6. <a name="Interoperability with Previous Releases">Interoperability with
+Previous Releases</a></h2>
+<h3>6.1 Interoperability of Release 3.4 with previous releases</h3>
+<h4>Sharing projects between heterogeneous Eclipse 3.4 and 3.3</h4>
+<p>Special care is required when a project in a team repository is being loaded
+and operated on by developers using Eclipse-based products based on different
+feature or plug-in versions. The general problem is that the existence,
+contents, and interpretation of metadata files in the workspaces may be specific
+to a particular feature or plug-in version, and differ between versions. The
+workspace compatibility guarantees only cover cases where all developers upgrade
+their Eclipse workspaces in lock step. In those cases there should be no problem
+with shared metadata. However, when some developers are working in Eclipse 3.4
+while others are working in Eclipse 3.3, there are no such guarantees.
+This section provides advice for what to do and not to do. It addresses the
+specific issues with the Eclipse SDK.</p>
+
+<p>The typical failure mode is noticed by the 3.4 user. 3.4 metadata is lost
+when a 3.3 user saves changes and then commits the updated metadata files to the
+repository. Here's how things typically go awry:</p>
+<ul>
+ <li>A user working in Eclipse 3.4 creates or modifies a project in a way that
+ results in changes to a shared metadata file that rely on 3.4-specific
+ information. The user then commits the updated project files, including the
+ shared metadata file, to the shared repository.</li>
+ <li>Another user working in Eclipse 3.3 shares this project from the same
+ repository. The 3.4-specific information in the shared metadata file is not
+ understood by Eclipse 3.3, and is generally discarded or ignored without
+ warning. The user modifies the project in a way that results in changes to
+ the shared metadata file, causing the shared metadata file to be rewritten
+ without any of the 3.4-specific information. The user commits the updated
+ project files, including the shared metadata file, to the shared repository.
+ The user is generally unaware that shared information has just been lost as
+ a result of their actions.</li>
+ <li>A user working in Eclipse 3.4 picks up the changes to a project from the
+ shared repository, including the updated shared metadata file. The user may
+ be unaware that they have just taken a retrograde step until later when
+ things start to malfunction.</li>
+</ul>
+<p>Here are some things to watch out for when sharing projects between
+Eclipse 3.4 and Eclipse 3.1 or earlier:</p>
+<ul>
+ <li><b>Linked resources in the .project file</b><br>
+ Eclipse 3.4 supports creating linked resources at arbitrary depth within a project,
+ and supports creating linked resources referring to other file systems. Neither of
+ these scenarios are supported in Eclipse 3.1 or earlier. If such linked resources
+ are created in 3.4, and the project is subsequently loaded into an Eclipse 3.1
+ or earlier workspace, these links will not be recognized. Recommendation:
+ avoid creating links at arbitrary depth or to other file systems where project
+ compatibility with Eclipse 3.1 or earlier is required.</li>
+</ul>
+<h4>Using Eclipse 3.4 to develop plug-ins that work in Eclipse 3.3</h4>
+<p>It is also possible (and reasonable) to use Eclipse 3.4 to develop a plug-in
+ intended to work in Eclipse 3.3 or earlier. Use the <b>Plug-in Development &gt;
+ Target Platform </b>preference page to locate non-workspace plug-ins in an Eclipse
+ 3.3 install. This ensures that the code for your plug-in is being compiled and
+ tested against Eclipse 3.3 APIs, extension points, and plug-ins. (The above
+ list of concerns do not apply since they affect the layout and interpretation
+ of files in the plug-in <i>project</i> but none affect the actual deployed form
+ of the plug-in.)</p>
+
+<hr>
+<p>Sun, Solaris, Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc.
+in the United States, other countries, or both.</p>
+<p>IBM is a trademark of International Business Machines Corporation in the
+United States, other countries, or both.</p>
+<p>Microsoft, Windows, Windows NT, Vista, and the Windows logo are trademarks of
+Microsoft Corporation in the United States, other countries, or both.</p>
+<p>Apple and Mac OS are trademarks of Apple Computer, Inc., registered in the
+U.S. and other countries.</p>
+<p>QNX, Neutrino, and Photon are trademarks or registered trademarks of QNX
+Software Systems Ltd.</p>
+<p>Other company, product, and service names may be trademarks or service marks
+of others.</p>
+<p>(c) Copyright IBM Corp. and others 2008</p>
+
+<h2><a name="Appendix1">Appendix 1: Execution Environment by Plug-in</a></h2>
+
+<p>In the table below, the "3.4 EE" ("3.4 Execution Environment") column
+indicates the minimum Java class library requirements of each plug-in
+for the 3.4 release, where the value is one of:</p>
+<table border="0" width="90%">
+ <tbody>
+ <tr>
+ <td align="center"><b>Entry</b></td>
+ <td align="left"><b>Meaning</b></td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>M1.0</strong></div>
+ </td>
+ <td>OSGi Minimum Execution Environment 1.0 - This is a subset of
+ the J2ME Foundation class libraries defined by OSGi to be the base
+ for framework implementations. See the OSGi specification for more
+ details.</td>
+ </tr>
+ <tr>
+ <td width="9%">
+ <div align="center"><strong>M1.1</strong></div>
+ </td>
+ <td width="91%">OSGi Minimum Execution Environment 1.1 - This is a
+ subset of the J2ME Foundation class libraries defined by OSGi to
+ be the base for framework implementations. See the OSGi
+ specification for more details.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>F1.0</strong></div>
+ </td>
+ <td>J2ME Foundation 1.0 - indicates that the plug-in can only be
+ run on Foundation 1.0 or greater. Note that with the exception of
+ some MicroEdition IO classes, Foundation 1.0 is a subset of J2SE
+ 1.3.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>F1.1</strong></div>
+ </td>
+ <td>J2ME Foundation 1.1 - indicates that the plug-in can only be
+ run on Foundation 1.1 or greater. Note that with the exception of
+ some MicroEdition IO classes, Foundation 1.1 is a subset of J2SE
+ 1.4.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.2</strong></div>
+ </td>
+ <td>J2SE 1.2 - indicates that the plug-in can only be run on JSE
+ 1.2 or greater.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.3</strong></div>
+ </td>
+ <td>J2SE 1.3 - indicates that the plug-in can only be run on JSE
+ 1.3 or greater.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.4</strong></div>
+ </td>
+ <td>J2SE 1.4 - indicates that the plug-in can only be run on JSE
+ 1.4 or greater.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.4/1.5</strong></div>
+ </td>
+ <td>Indicates that the plug-in can run on JSE
+ 1.4 or greater, but provides enhanced functionality when run on J2SE 5.0.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.5</strong></div>
+ </td>
+ <td>J2SE 5.0 - indicates that the plug-in can only be run on JSE
+ 5.0 or greater.</td>
+ </tr>
+ <tr>
+ <td>
+ <div align="center"><strong>1.6</strong></div>
+ </td>
+ <td>J2SE 6.0 - indicates that the plug-in can only be run on JSE
+ 6.0 or greater.</td>
+ </tr>
+ <tr>
+ <td align="center"><b>n/a</b></td>
+ <td>Not applicable (for example plug-ins that do not contain Java code)</td>
+ </tr>
+ </tbody>
+</table>
+<br>
+<b>Table of minimum execution environments by plug-in.</b> <br>
+<table border="1">
+ <tbody>
+ <tr>
+ <td width="290"><strong>Plug-in</strong></td>
+ <td width="60"><div align="center">
+
+ <p align="center"><b>3.4<br>
+ minimum<br>
+ execution<br>
+ environment </b></p>
+ </div></td>
+ </tr>
+ <tr>
+
+ <td>javax.servlet</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>javax.servlet.jsp</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.apache.ant</td>
+ <td><div align="center">1.2</div></td>
+ </tr>
+ <tr>
+ <td>org.apache.commons.el</td>
+ <td><div align="center">F1.0</div></td>
+
+ </tr>
+ <tr>
+ <td>org.apache.commons.logging</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.apache.jasper</td>
+
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.apache.lucene</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.ant.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ant.ui</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.compare</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.boot</td>
+ <td><div align="center">F1.0</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.core.commands</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.contenttype</td>
+
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.expressions</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.core.filebuffers</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.filesystem</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.core.jobs</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.net</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.core.resources</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.resources.compatibility</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.runtime</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.core.runtime.compatibility</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.runtime.compatibility.auth</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.core.runtime.compatibility.registry</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.core.variables</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.debug.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.debug.ui</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.app</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.equinox.common</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.http.jetty</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.equinox.http.servlet</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.http.registry</td>
+ <td><div align="center">F1.0</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.jsp.jasper</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.jsp.jasper.registry</td>
+
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.launcher</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.equinox.preferences</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.equinox.registry</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.help</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.help.appserver</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.help.base</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.help.ui</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.help.webapp</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.jdt</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.apt.core</td>
+ <td><div align="center">1.5</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.apt.ui</td>
+ <td><div align="center">1.5</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.compiler.apt</td>
+
+ <td><div align="center">1.6</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.compiler.tool</td>
+ <td><div align="center">1.6</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.jdt.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.core.manipulation</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.jdt.debug</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.debug.ui</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.doc.isv</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.doc.user</td>
+
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.junit</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.jdt.junit.runtime</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.junit4.runtime</td>
+ <td><div align="center">1.5</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.jdt.launching</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.source</td>
+ <td><div align="center">n/a</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.jdt.ui</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jface</td>
+
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jface.text</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.jsch.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.jsch.ui</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.ltk.core.refactoring</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ltk.ui.refactoring</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.osgi (system.bundle)</td>
+ <td><div align="center">M1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.osgi.services</td>
+
+ <td><div align="center">M1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.osgi.util</td>
+ <td><div align="center">M1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.pde</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.build</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.pde.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.doc.user</td>
+ <td><div align="center">n/a</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.junit.runtime</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.runtime</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.source</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.pde.ui</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.pde.ui.templates</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.platform</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.platform.doc.isv</td>
+ <td><div align="center">n/a</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.platform.doc.user</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.platform.source</td>
+
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.platform.source.*</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.rcp</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.rcp.source</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.rcp.source.*</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.sdk</td>
+ <td><div align="center">n/a</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.search</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.swt</td>
+
+ <td bgcolor="#ffffff"><div align="center">M1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.swt.*</td>
+ <td bgcolor="#ffffff"><div align="center">M1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.team.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.team.cvs.core</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.team.cvs.ssh</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.team.cvs.ssh2</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.team.cvs.ui</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.team.ui</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.text</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.tomcat</td>
+ <td><div align="center">n/a</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.ui.browser</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.cheatsheets</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.console</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.editors</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.externaltools</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.ui.forms</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.ide</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.intro</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.intro.universal</td>
+
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.navigator</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.ui.navigator.resources</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.net</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.ui.presentations.r21</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.views</td>
+ <td><div align="center">1.4</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.win32</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.workbench</td>
+
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.ui.workbench.compatibility</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+
+ <td>org.eclipse.ui.workbench.texteditor</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.update.configurator</td>
+ <td bgcolor="#ffffff"><div align="center">F1.0</div></td>
+ </tr>
+
+ <tr>
+ <td>org.eclipse.update.core</td>
+ <td bgcolor="#ffffff"><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.update.core.linux</td>
+ <td bgcolor="#ffffff"><div align="center">F1.0</div></td>
+
+ </tr>
+ <tr>
+ <td>org.eclipse.update.core.win32</td>
+ <td bgcolor="#ffffff"><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.update.scheduler</td>
+
+ <td bgcolor="#ffffff"><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+ <td>org.eclipse.update.ui</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ <tr>
+
+ <td>org.junit (old)</td>
+ <td><div align="center">1.4</div></td>
+ </tr>
+ <tr>
+ <td>org.junit (JUnit4)</td>
+ <td><div align="center">1.5</div></td>
+ </tr>
+
+ <tr>
+ <td>org.mortbay.jetty</td>
+ <td><div align="center">F1.0</div></td>
+ </tr>
+ </tbody>
+</table>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/README.txt b/src/README.txt
new file mode 100644
index 0000000..1ac8c66
--- /dev/null
+++ b/src/README.txt
@@ -0,0 +1,5 @@
+To find the Eclipse sources matching basebuilder-3.6.2:
+- open the Eclipse 3.6.2 download page:
+ http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php
+- fetch "Source Build (Source in .zip)" eclipse-sourceBuild-srcIncluded-3.6.2.zip [135 MB]
+
diff --git a/src/eclipse-sourceBuild-srcIncluded-3.6.2.zip b/src/eclipse-sourceBuild-srcIncluded-3.6.2.zip
new file mode 100644
index 0000000..a84c677
--- /dev/null
+++ b/src/eclipse-sourceBuild-srcIncluded-3.6.2.zip
Binary files differ