From c17c183ed63ec10e957829f43b244eea32dc1dcc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 18 Mar 2026 15:18:06 +0100 Subject: [PATCH 1/9] bug6217: Opus 4.6-generated scripts for producing a Jetty p2 update site from Maven Central --- java/.project | 9 + java/com.sap.sailing.domain.common/.project | 11 + .../.project | 11 + .../com.sap.sailing.landscape.common/.project | 11 + .../.project | 11 + java/com.sap.sailing.landscape.test/.project | 11 + java/com.sap.sailing.landscape.ui/.project | 83 +++--- java/com.sap.sailing.landscape/.project | 11 + .../.project | 11 + .../.project | 11 + .../createJettyP2RepoFromMavenCentral.sh | 245 ++++++++++++++++++ .../scripts/uploadAndActivateJettyP2Repo.sh | 114 ++++++++ java/com.sap.sse.aicore.test/.project | 11 + java/com.sap.sse.aicore/.project | 11 + java/com.sap.sse.common/.project | 11 + .../.project | 11 + java/com.sap.sse.gwt/.project | 31 ++- .../.project | 11 + .../com.sap.sse.landscape.aws.common/.project | 11 + .../.project | 11 + java/com.sap.sse.landscape.aws.test/.project | 11 + java/com.sap.sse.landscape.aws/.project | 11 + java/com.sap.sse.landscape.common/.project | 11 + java/com.sap.sse.landscape.test/.project | 11 + java/com.sap.sse.landscape/.project | 11 + .../.project | 11 + .../.project | 11 + java/com.sap.sse.mail/.project | 11 + java/com.sap.sse.mongodb/.project | 11 + java/com.sap.sse.security.common/.project | 11 + java/com.sap.sse.shared.android/.project | 11 + java/com.sap.sse.test/.project | 11 + java/com.sap.sse/.project | 11 + java/elemental2/.project | 11 + java/org.hamcrest.core/.project | 11 + java/org.json.simple/.project | 11 + 36 files changed, 777 insertions(+), 46 deletions(-) create mode 100755 java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh create mode 100755 java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh diff --git a/java/.project b/java/.project index 2c17f2fa456..7ef163eee64 100644 --- a/java/.project +++ b/java/.project @@ -63,5 +63,14 @@ 1.0-name-matches-false-true-org\.openqa\..* + + 1773843368643 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + diff --git a/java/com.sap.sailing.domain.common/.project b/java/com.sap.sailing.domain.common/.project index 4e945dbebae..f8d1b52e6cc 100755 --- a/java/com.sap.sailing.domain.common/.project +++ b/java/com.sap.sailing.domain.common/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368450 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.domain.shared.android/.project b/java/com.sap.sailing.domain.shared.android/.project index eba6e1dade9..08861ce0bfd 100644 --- a/java/com.sap.sailing.domain.shared.android/.project +++ b/java/com.sap.sailing.domain.shared.android/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368460 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.landscape.common/.project b/java/com.sap.sailing.landscape.common/.project index 1bc63554b88..df5b8cbfafb 100644 --- a/java/com.sap.sailing.landscape.common/.project +++ b/java/com.sap.sailing.landscape.common/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368470 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.landscape.gateway/.project b/java/com.sap.sailing.landscape.gateway/.project index e873d5b9696..22ed729d5c4 100644 --- a/java/com.sap.sailing.landscape.gateway/.project +++ b/java/com.sap.sailing.landscape.gateway/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368475 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.landscape.test/.project b/java/com.sap.sailing.landscape.test/.project index 1f13eb0413e..3c9e4c37f94 100644 --- a/java/com.sap.sailing.landscape.test/.project +++ b/java/com.sap.sailing.landscape.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368481 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.landscape.ui/.project b/java/com.sap.sailing.landscape.ui/.project index c35b99b761f..8579c76b039 100644 --- a/java/com.sap.sailing.landscape.ui/.project +++ b/java/com.sap.sailing.landscape.ui/.project @@ -1,39 +1,50 @@ - com.sap.sailing.landscape.ui - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.gwtplugins.gdt.eclipse.core.webAppProjectValidator - - - - - com.gwtplugins.gwt.eclipse.core.gwtProjectValidator - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - com.gwtplugins.gwt.eclipse.core.gwtNature - + com.sap.sailing.landscape.ui + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.gwtplugins.gdt.eclipse.core.webAppProjectValidator + + + + + com.gwtplugins.gwt.eclipse.core.gwtProjectValidator + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + com.gwtplugins.gwt.eclipse.core.gwtNature + + + + 1773843368488 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.landscape/.project b/java/com.sap.sailing.landscape/.project index ccb496f8ed3..1405388a056 100644 --- a/java/com.sap.sailing.landscape/.project +++ b/java/com.sap.sailing.landscape/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368465 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.routeconverterjava11extension/.project b/java/com.sap.sailing.routeconverterjava11extension/.project index 6fc2819bb00..9a322b5d955 100644 --- a/java/com.sap.sailing.routeconverterjava11extension/.project +++ b/java/com.sap.sailing.routeconverterjava11extension/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368494 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project index 0802e21577c..7cbfe381f8e 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368501 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh b/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh new file mode 100755 index 00000000000..e4d5850dc51 --- /dev/null +++ b/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh @@ -0,0 +1,245 @@ +#!/bin/bash +# +# Creates a local p2 repository for Jetty 9.4.x from Maven Central artifacts. +# +# Use this when the official Eclipse Jetty p2 repository at +# https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/ +# does not yet contain the latest security patch release. +# +# The Jetty jars on Maven Central are already proper OSGi bundles (with +# Bundle-SymbolicName, etc.) and their -sources.jar files already carry +# Eclipse-SourceBundle headers, so we can publish them directly into a +# p2 repository. +# +# Prerequisites: +# - An Eclipse installation accessible via the "eclipse" command on PATH +# (needs the p2 publisher: org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher) +# Typically any Eclipse IDE or the Equinox SDK will have this. +# - curl and a POSIX shell +# +# Usage: +# ./createJettyP2RepoFromMavenCentral.sh [VERSION] +# +# VERSION defaults to 9.4.58.v20250814 if not supplied. +# +# After running, the p2 repository will be at: +# /tmp/jetty-p2-repo-/repository +# +# You can then either: +# a) Point your target platform definition at this local directory, or +# b) Upload it to your p2 server (see uploadAndActivateJettyP2Repo.sh) +# +set -euo pipefail + +VERSION="${1:-9.4.58.v20250814}" +echo "=== Building Jetty p2 repository for version ${VERSION} ===" + +MAVEN_CENTRAL="https://repo1.maven.org/maven2" +WORK_DIR="/tmp/jetty-p2-repo-${VERSION}" +REPO_DIR="${WORK_DIR}/repository" +PLUGINS_DIR="${WORK_DIR}/staging/plugins" +FEATURES_DIR="${WORK_DIR}/staging/features/org.eclipse.jetty.bundles.f_${VERSION}" + +rm -rf "${WORK_DIR}" +mkdir -p "${PLUGINS_DIR}" "${FEATURES_DIR}" + +# --------------------------------------------------------------------------- +# Define the bundle list. +# Format: "maven-group-path|artifact-id|osgi-bundle-symbolic-name" +# +# The OSGi symbolic names must match what the existing target platform +# definition and feature.xml files reference. +# --------------------------------------------------------------------------- +BUNDLES="\ +org/eclipse/jetty|jetty-annotations|org.eclipse.jetty.annotations +org/eclipse/jetty|jetty-client|org.eclipse.jetty.client +org/eclipse/jetty|jetty-continuation|org.eclipse.jetty.continuation +org/eclipse/jetty|jetty-deploy|org.eclipse.jetty.deploy +org/eclipse/jetty|jetty-http|org.eclipse.jetty.http +org/eclipse/jetty|jetty-io|org.eclipse.jetty.io +org/eclipse/jetty|jetty-jaas|org.eclipse.jetty.jaas +org/eclipse/jetty|jetty-jmx|org.eclipse.jetty.jmx +org/eclipse/jetty|jetty-jndi|org.eclipse.jetty.jndi +org/eclipse/jetty|jetty-plus|org.eclipse.jetty.plus +org/eclipse/jetty|jetty-proxy|org.eclipse.jetty.proxy +org/eclipse/jetty|jetty-rewrite|org.eclipse.jetty.rewrite +org/eclipse/jetty|jetty-security|org.eclipse.jetty.security +org/eclipse/jetty|jetty-server|org.eclipse.jetty.server +org/eclipse/jetty|jetty-servlet|org.eclipse.jetty.servlet +org/eclipse/jetty|jetty-util|org.eclipse.jetty.util +org/eclipse/jetty|jetty-util-ajax|org.eclipse.jetty.util.ajax +org/eclipse/jetty|jetty-webapp|org.eclipse.jetty.webapp +org/eclipse/jetty|jetty-xml|org.eclipse.jetty.xml +org/eclipse/jetty/websocket|websocket-api|org.eclipse.jetty.websocket.api +org/eclipse/jetty/websocket|websocket-client|org.eclipse.jetty.websocket.client +org/eclipse/jetty/websocket|websocket-common|org.eclipse.jetty.websocket.common +org/eclipse/jetty/websocket|websocket-server|org.eclipse.jetty.websocket.server +org/eclipse/jetty/websocket|websocket-servlet|org.eclipse.jetty.websocket.servlet +org/eclipse/jetty/osgi|jetty-osgi-boot|org.eclipse.jetty.osgi.boot +org/eclipse/jetty/osgi|jetty-osgi-boot-warurl|org.eclipse.jetty.osgi.boot.warurl +org/eclipse/jetty|apache-jsp|org.eclipse.jetty.apache-jsp +org/eclipse/jetty/osgi|jetty-osgi-boot-jsp|org.eclipse.jetty.osgi.boot.jsp" + +# --------------------------------------------------------------------------- +# Download bundles and source bundles +# --------------------------------------------------------------------------- +echo "" +echo "--- Downloading bundles from Maven Central ---" +DOWNLOAD_ERRORS=0 + +while IFS='|' read -r GROUP ARTIFACT BSN; do + [ -z "${GROUP}" ] && continue + + JAR_URL="${MAVEN_CENTRAL}/${GROUP}/${ARTIFACT}/${VERSION}/${ARTIFACT}-${VERSION}.jar" + SRC_URL="${MAVEN_CENTRAL}/${GROUP}/${ARTIFACT}/${VERSION}/${ARTIFACT}-${VERSION}-sources.jar" + + echo " ${ARTIFACT} ..." + # Download main bundle + if ! curl -sfL -o "${PLUGINS_DIR}/${BSN}_${VERSION}.jar" "${JAR_URL}"; then + echo " ERROR: Failed to download ${JAR_URL}" + DOWNLOAD_ERRORS=$((DOWNLOAD_ERRORS + 1)) + continue + fi + + # Download source bundle (non-fatal if missing) + if ! curl -sfL -o "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" "${SRC_URL}"; then + echo " WARNING: No source jar for ${ARTIFACT}" + rm -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" + fi +done </dev/null | wc -l) jar files." + +# --------------------------------------------------------------------------- +# Create the feature.xml +# This wraps all the downloaded bundles into a single installable feature +# called "org.eclipse.jetty.bundles.f" — matching the existing p2 repo. +# --------------------------------------------------------------------------- +echo "" +echo "--- Generating feature.xml ---" + +cat > "${FEATURES_DIR}/feature.xml" < + + + + Jetty ${VERSION} bundles for OSGi, built from Maven Central artifacts. + + + + Apache License 2.0 / Eclipse Public License 1.0 + + +FEATURE_HEADER + +while IFS='|' read -r GROUP ARTIFACT BSN; do + [ -z "${GROUP}" ] && continue + cat >> "${FEATURES_DIR}/feature.xml" < + +PLUGIN_ENTRY + + # Also add the source plugin if we downloaded it + if [ -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" ]; then + cat >> "${FEATURES_DIR}/feature.xml" < + +SOURCE_ENTRY + fi +done <" >> "${FEATURES_DIR}/feature.xml" + +# --------------------------------------------------------------------------- +# Also create a source feature (org.eclipse.jetty.bundles.f.source) +# that references the source bundles – matching the existing p2 structure. +# --------------------------------------------------------------------------- +SOURCE_FEATURE_DIR="${WORK_DIR}/staging/features/org.eclipse.jetty.bundles.f.source_${VERSION}" +mkdir -p "${SOURCE_FEATURE_DIR}" + +cat > "${SOURCE_FEATURE_DIR}/feature.xml" < + + + + Source bundles for Jetty ${VERSION}, built from Maven Central artifacts. + + + + Apache License 2.0 / Eclipse Public License 1.0 + + +SOURCE_FEATURE_HEADER + +while IFS='|' read -r GROUP ARTIFACT BSN; do + [ -z "${GROUP}" ] && continue + if [ -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" ]; then + cat >> "${SOURCE_FEATURE_DIR}/feature.xml" < + +SOURCE_PLUGIN_ENTRY + fi +done <" >> "${SOURCE_FEATURE_DIR}/feature.xml" + +# --------------------------------------------------------------------------- +# Publish the p2 repository using Eclipse's FeaturesAndBundlesPublisher +# --------------------------------------------------------------------------- +echo "" +echo "--- Publishing p2 repository ---" +echo " Source: ${WORK_DIR}/staging" +echo " Destination: ${REPO_DIR}" + +eclipse -nosplash -verbose \ + -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher \ + -metadataRepository "file:${REPO_DIR}" \ + -artifactRepository "file:${REPO_DIR}" \ + -source "${WORK_DIR}/staging" \ + -publishArtifacts \ + -configs gtk.linux.x86_64 + +echo "" +echo "=== SUCCESS ===" +echo "" +echo "p2 repository created at: ${REPO_DIR}" +echo "" +echo "To use it locally, update your target platform definition to point to:" +echo " file:${REPO_DIR}" +echo "" +echo "To upload to sapsailing.com and update all workspace references, run:" +echo " ./uploadAndActivateJettyP2Repo.sh ${VERSION}" \ No newline at end of file diff --git a/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh b/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh new file mode 100755 index 00000000000..2743222e999 --- /dev/null +++ b/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh @@ -0,0 +1,114 @@ +#!/bin/bash +# +# After creating the p2 repository with createJettyP2RepoFromMavenCentral.sh, +# this script uploads it and updates all references in the workspace. +# +# Usage: +# ./uploadAndActivateJettyP2Repo.sh [VERSION] +# +# VERSION defaults to 9.4.58.v20250814 if not supplied. +# +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +VERSION="${1:-9.4.58.v20250814}" +REPO_DIR="/tmp/jetty-p2-repo-${VERSION}/repository" + +if [ ! -d "${REPO_DIR}" ]; then + echo "ERROR: p2 repository not found at ${REPO_DIR}" + echo "Run ./createJettyP2RepoFromMavenCentral.sh ${VERSION} first." + exit 1 +fi + +# --------------------------------------------------------------------------- +# Determine the old version from the target definition +# --------------------------------------------------------------------------- +OLD_VERSION=$(grep '\)/\1'"${VERSION}"'\3/' \ + -e 's|\(\)|\1jetty-'"${VERSION}"'\2|' \ + "${TARGET_FILE}" + fi +done + +# --------------------------------------------------------------------------- +# 3. Update feature.xml files with new Jetty version +# --------------------------------------------------------------------------- +echo "" +echo "--- Updating feature.xml files ---" + +RUNTIME_FEATURE="${SCRIPT_DIR}/../../com.sap.sse.feature.runtime/feature.xml" +if [ -f "${RUNTIME_FEATURE}" ]; then + echo " ${RUNTIME_FEATURE}" + sed -i -e 's/version="'"${OLD_VERSION}"'"/version="'"${VERSION}"'"/' "${RUNTIME_FEATURE}" +fi + +TARGET_BASE_FEATURE="${SCRIPT_DIR}/../../com.sap.sailing.targetplatform.base/features/target-base/feature.xml" +if [ -f "${TARGET_BASE_FEATURE}" ]; then + echo " ${TARGET_BASE_FEATURE}" + sed -i -e 's/version="'"${OLD_VERSION}"'"/version="'"${VERSION}"'"/' "${TARGET_BASE_FEATURE}" +fi + +# --------------------------------------------------------------------------- +# 4. Update apache-jsp and jetty-osgi-boot-jsp jars in target-base +# --------------------------------------------------------------------------- +echo "" +echo "--- Updating JSP bundles in target-base plugins ---" +TARGET_BASE_PLUGINS="${SCRIPT_DIR}/../../com.sap.sailing.targetplatform.base/plugins/target-base" + +echo " Removing old versions..." +rm -f "${TARGET_BASE_PLUGINS}/apache-jsp-${OLD_VERSION}.jar" +rm -f "${TARGET_BASE_PLUGINS}/apache-jsp-${OLD_VERSION}-sources.jar" +rm -f "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${OLD_VERSION}.jar" +rm -f "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${OLD_VERSION}-sources.jar" + +MAVEN_CENTRAL="https://repo1.maven.org/maven2" + +echo " Downloading new versions..." +wget -q -O "${TARGET_BASE_PLUGINS}/apache-jsp-${VERSION}.jar" \ + "${MAVEN_CENTRAL}/org/eclipse/jetty/apache-jsp/${VERSION}/apache-jsp-${VERSION}.jar" +wget -q -O "${TARGET_BASE_PLUGINS}/apache-jsp-${VERSION}-sources.jar" \ + "${MAVEN_CENTRAL}/org/eclipse/jetty/apache-jsp/${VERSION}/apache-jsp-${VERSION}-sources.jar" +wget -q -O "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${VERSION}.jar" \ + "${MAVEN_CENTRAL}/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/${VERSION}/jetty-osgi-boot-jsp-${VERSION}.jar" +wget -q -O "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${VERSION}-sources.jar" \ + "${MAVEN_CENTRAL}/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/${VERSION}/jetty-osgi-boot-jsp-${VERSION}-sources.jar" + +echo " Adding to git..." +git -C "${TARGET_BASE_PLUGINS}" add "*.jar" + +# --------------------------------------------------------------------------- +# Done +# --------------------------------------------------------------------------- +echo "" +echo "=== DONE ===" +echo "" +echo "Your target platform now references jetty-${VERSION}." +echo "Next steps:" +echo " 1. Rebuild the local base p2 repository: ./createLocalBaseP2repository.sh" +echo " 2. Upload it: ./uploadRepositoryToServer.sh" +echo " 3. Reload the target platform in your IDE" diff --git a/java/com.sap.sse.aicore.test/.project b/java/com.sap.sse.aicore.test/.project index 483027e80e6..73f8c62cede 100644 --- a/java/com.sap.sse.aicore.test/.project +++ b/java/com.sap.sse.aicore.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368516 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.aicore/.project b/java/com.sap.sse.aicore/.project index ac0135628d0..affecfea62c 100644 --- a/java/com.sap.sse.aicore/.project +++ b/java/com.sap.sse.aicore/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368511 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.common/.project b/java/com.sap.sse.common/.project index c28bb7a5e5a..755a090804b 100644 --- a/java/com.sap.sse.common/.project +++ b/java/com.sap.sse.common/.project @@ -36,4 +36,15 @@ org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature + + + 1773843368520 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.datamining.annotations/.project b/java/com.sap.sse.datamining.annotations/.project index 58c1e5bd5f5..9b70e07e467 100644 --- a/java/com.sap.sse.datamining.annotations/.project +++ b/java/com.sap.sse.datamining.annotations/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368525 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.gwt/.project b/java/com.sap.sse.gwt/.project index c975154713e..2c0355d5055 100644 --- a/java/com.sap.sse.gwt/.project +++ b/java/com.sap.sse.gwt/.project @@ -10,16 +10,16 @@ - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + com.gwtplugins.gdt.eclipse.core.webAppProjectValidator @@ -36,4 +36,15 @@ com.gwtplugins.gwt.eclipse.core.gwtNature com.gwtplugins.gwt.eclipse.core.gwtNature + + + 1773843368533 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.aws.common.test/.project b/java/com.sap.sse.landscape.aws.common.test/.project index c95cb0828ad..b4c24e6e85a 100644 --- a/java/com.sap.sse.landscape.aws.common.test/.project +++ b/java/com.sap.sse.landscape.aws.common.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368563 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.aws.common/.project b/java/com.sap.sse.landscape.aws.common/.project index eb6b5d0abc3..4db4406074c 100644 --- a/java/com.sap.sse.landscape.aws.common/.project +++ b/java/com.sap.sse.landscape.aws.common/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368556 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.aws.persistence/.project b/java/com.sap.sse.landscape.aws.persistence/.project index b1b0feca6ee..81fe4ad8f96 100644 --- a/java/com.sap.sse.landscape.aws.persistence/.project +++ b/java/com.sap.sse.landscape.aws.persistence/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368569 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.aws.test/.project b/java/com.sap.sse.landscape.aws.test/.project index dc09cd68bd6..31c06d06b4b 100644 --- a/java/com.sap.sse.landscape.aws.test/.project +++ b/java/com.sap.sse.landscape.aws.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368575 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.aws/.project b/java/com.sap.sse.landscape.aws/.project index 1507dbc517a..38aa40c86db 100644 --- a/java/com.sap.sse.landscape.aws/.project +++ b/java/com.sap.sse.landscape.aws/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368551 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.common/.project b/java/com.sap.sse.landscape.common/.project index 7853e6be409..e7e81ce1b87 100644 --- a/java/com.sap.sse.landscape.common/.project +++ b/java/com.sap.sse.landscape.common/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368580 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape.test/.project b/java/com.sap.sse.landscape.test/.project index f4a7c9f7eb6..af501a7fb77 100644 --- a/java/com.sap.sse.landscape.test/.project +++ b/java/com.sap.sse.landscape.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368586 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.landscape/.project b/java/com.sap.sse.landscape/.project index e3fb30b62d7..58b170bf0c5 100644 --- a/java/com.sap.sse.landscape/.project +++ b/java/com.sap.sse.landscape/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368544 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.mail.replication.test/.project b/java/com.sap.sse.mail.replication.test/.project index 51fa2fe50fb..7ca00fa56eb 100644 --- a/java/com.sap.sse.mail.replication.test/.project +++ b/java/com.sap.sse.mail.replication.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368596 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.mail.replication.testsupport/.project b/java/com.sap.sse.mail.replication.testsupport/.project index 1d1e9965612..aaa4c9eef85 100644 --- a/java/com.sap.sse.mail.replication.testsupport/.project +++ b/java/com.sap.sse.mail.replication.testsupport/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368600 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.mail/.project b/java/com.sap.sse.mail/.project index a9824e60a43..b7ff0b1ee02 100644 --- a/java/com.sap.sse.mail/.project +++ b/java/com.sap.sse.mail/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368591 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.mongodb/.project b/java/com.sap.sse.mongodb/.project index c39b3395c38..2d83e8009ec 100644 --- a/java/com.sap.sse.mongodb/.project +++ b/java/com.sap.sse.mongodb/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368607 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.security.common/.project b/java/com.sap.sse.security.common/.project index 470b6a0c0d2..6b691a31eb2 100644 --- a/java/com.sap.sse.security.common/.project +++ b/java/com.sap.sse.security.common/.project @@ -36,4 +36,15 @@ org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature + + + 1773843368613 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.shared.android/.project b/java/com.sap.sse.shared.android/.project index 1ced6293522..bccc0c692b2 100644 --- a/java/com.sap.sse.shared.android/.project +++ b/java/com.sap.sse.shared.android/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368619 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse.test/.project b/java/com.sap.sse.test/.project index fefd499bfc5..1b9a3becce6 100644 --- a/java/com.sap.sse.test/.project +++ b/java/com.sap.sse.test/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368624 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/com.sap.sse/.project b/java/com.sap.sse/.project index ae82bf33116..25768acb849 100644 --- a/java/com.sap.sse/.project +++ b/java/com.sap.sse/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368506 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/elemental2/.project b/java/elemental2/.project index 30e1f9a0d66..8db18f844d0 100644 --- a/java/elemental2/.project +++ b/java/elemental2/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368629 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/org.hamcrest.core/.project b/java/org.hamcrest.core/.project index 144281e1ae3..e8d53e0135f 100644 --- a/java/org.hamcrest.core/.project +++ b/java/org.hamcrest.core/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368637 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/java/org.json.simple/.project b/java/org.json.simple/.project index 14f0b0e639d..078eefc3fab 100644 --- a/java/org.json.simple/.project +++ b/java/org.json.simple/.project @@ -25,4 +25,15 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature + + + 1773843368640 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + From e197c1f1200dd0acf19035fac4ecfaca77e620e5 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 18 Mar 2026 16:51:58 +0100 Subject: [PATCH 2/9] bug6217: Opus 4.6-refined scripts for Jetty p2 repo generation plus docs --- .../scripts/README_Jetty.md | 184 ++++++++++++++++++ .../createAndUploadJettyP2Repository.sh | 2 + .../createJettyP2RepoFromMavenCentral.sh | 114 ++++++++++- 3 files changed, 290 insertions(+), 10 deletions(-) create mode 100644 java/com.sap.sailing.targetplatform/scripts/README_Jetty.md diff --git a/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md b/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md new file mode 100644 index 00000000000..9a16cf4ab73 --- /dev/null +++ b/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md @@ -0,0 +1,184 @@ +# Updating Jetty in the Target Platform + +## Background + +The target platform references Jetty bundles via a p2 repository. Historically +this was mirrored from the official Eclipse-hosted site at +`https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/` using the +`createAndUploadJettyP2Repository.sh` script. + +When a new Jetty release is **not yet published** to that Eclipse p2 site (as +happened with 9.4.58), the scripts described below let you build an equivalent +p2 repository yourself, directly from the artifacts on **Maven Central**. + +This works because the Jetty jars on Maven Central are already proper OSGi +bundles (`Bundle-SymbolicName`, `Bundle-Version`, etc.) and their `-sources.jar` +files carry `Eclipse-SourceBundle` headers. + +## Prerequisites + +| Tool | Purpose | +|------|---------| +| `eclipse` on `PATH` | Provides the p2 publisher (`org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher`). Any Eclipse IDE or Equinox SDK installation will have this. | +| `curl` | Downloads jars from Maven Central. | +| `wget` | Used by the upload script to fetch JSP bundles into `target-base`. | +| `ssh` / `scp` | Uploads the finished p2 repository to `sapsailing.com`. | + +## Step-by-step guide + +### 1. Determine the new version string + +Find the latest 9.4.x release on Maven Central: + +``` +curl -s https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/ \ + | grep -o '9\.4\.[0-9]*\.v[0-9]*' | sort -V | tail -1 +``` + +The version string looks like `9.4.58.v20250814`. + +### 2. Build the p2 repository + +```bash +cd java/com.sap.sailing.targetplatform/scripts +./createJettyP2RepoFromMavenCentral.sh 9.4.58.v20250814 +``` + +This will: + +1. Download all 41 Jetty-versioned bundles + their source jars from Maven + Central into a temporary staging directory. +2. Download 4 static (non-Jetty-versioned) bundles that also ship with the + official Eclipse Jetty p2 repository (see + [What's in the p2 repository](#whats-in-the-p2-repository) below). +3. Generate two Eclipse features wrapping these bundles: + - `org.eclipse.jetty.bundles.f` — the main feature + - `org.eclipse.jetty.bundles.f.source` — the source feature +4. Run the Eclipse p2 `FeaturesAndBundlesPublisher` to produce a valid p2 + repository. + +The result is at `/tmp/jetty-p2-repo-/repository`. + +> **Tip:** You can test with the local repo before uploading. Point the +> `` in your `.target` file to +> `file:/tmp/jetty-p2-repo-/repository` and reload the target +> platform. + +### 3. Upload and activate + +```bash +./uploadAndActivateJettyP2Repo.sh 9.4.58.v20250814 +``` + +This will: + +1. Upload the p2 repository to `trac@sapsailing.com:p2-repositories/jetty-`. +2. Update the Jetty version and repository URL in both target definition files + (`race-analysis-p2-remote.target`, `race-analysis-p2-local.target`). +3. Update the Jetty version in the feature files + (`com.sap.sse.feature.runtime/feature.xml`, + `com.sap.sailing.targetplatform.base/features/target-base/feature.xml`). +4. Replace the `apache-jsp` and `jetty-osgi-boot-jsp` jars (+ sources) in + `com.sap.sailing.targetplatform.base/plugins/target-base` with the new + version and stage them in git. + +### 4. Rebuild and upload the base p2 repository + +```bash +./createLocalBaseP2repository.sh +./uploadRepositoryToServer.sh +``` + +### 5. Reload the target platform + +In Eclipse, open the `.target` file and click **Reload** / **Set as Active +Target Platform**. + +## What's in the p2 repository + +The generated p2 repository contains **86 JARs** (bundles + source bundles) +and is a **strict superset** of the 81-JAR repository that the official Eclipse +Jetty p2 site publishes. + +The bundles fall into two categories: + +### Jetty-versioned bundles (41 bundles, each with a source jar = 82 JARs) + +These are downloaded from Maven Central and versioned with the Jetty release +(e.g. `9.4.58.v20250814`). They are defined in the `BUNDLES` variable in the +script. + +| Category | Bundles | +|----------|---------| +| Core | `jetty-server`, `jetty-servlet`, `jetty-servlets`, `jetty-http`, `jetty-io`, `jetty-util`, `jetty-util-ajax`, `jetty-xml`, `jetty-security`, `jetty-webapp`, `jetty-deploy`, `jetty-client`, `jetty-continuation`, `jetty-proxy`, `jetty-rewrite` | +| Auth | `jetty-jaas`, `jetty-jaspi` (BSN: `security.jaspi`), `jetty-annotations`, `jetty-jmx`, `jetty-jndi`, `jetty-plus` | +| ALPN / HTTP/2 | `jetty-alpn-client`, `jetty-alpn-server`, `http2-client`, `http2-http-client-transport` (BSN: `http2.client.http`), `http2-common`, `http2-hpack`, `http2-server` | +| WebSocket | `websocket-api`, `websocket-client`, `websocket-common`, `websocket-server`, `websocket-servlet`, `javax-websocket-client-impl` (BSN: `websocket.javax.websocket`), `javax-websocket-server-impl` (BSN: `websocket.javax.websocket.server`) | +| OSGi integration | `jetty-osgi-boot`, `jetty-osgi-boot-warurl`, `jetty-osgi-boot-jsp`, `jetty-httpservice` (BSN: `osgi.httpservice`), `jetty-osgi-alpn` (BSN: `osgi.alpn.fragment`) | +| JSP | `apache-jsp` (BSN: `jetty.apache-jsp`) | + +### Static bundles (4 JARs) + +These ship with the official Eclipse Jetty p2 repository but have their own +fixed version, independent of the Jetty release. They are defined in the +`STATIC_BUNDLES` variable in the script and are downloaded from the previous +Jetty p2 repository on `sapsailing.com`. + +| Bundle | Version | Notes | +|--------|---------|-------| +| `javax.security.auth.message` | `1.0.0.v201108011116` | JASPIC 1.0 API (Eclipse Orbit). Not imported by any project code. | +| `javax.security.auth.message.source` | `1.0.0.v201108011116` | Source for the above. | +| `org.eclipse.jetty.osgi-servlet-api` | `3.1.0.M3` | Jetty's repackaged Servlet 3.1 API. Also in `target-base/plugins`. | +| `org.eclipse.jetty.osgi-servlet-api.source` | `3.1.0.M3` | Source for the above. | + +These bundles are **optional** — if the download fails (e.g. because the old +p2 repo URL is no longer available), the script continues with a warning. Both +`javax.security.auth.message` and `osgi-servlet-api` are also provided by +`target-base/plugins`, so the target platform will still resolve correctly. + +### Comparison with the official Eclipse Jetty p2 repository + +The old Eclipse-hosted repo (e.g. the 9.4.57 version mirrored at +`https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/`) contained **81 JARs**. +The new repo contains **86 JARs** — a strict superset. The 5 extras are source +or main JARs that the old repo inconsistently omitted: + +| Extra JAR in new repo | Explanation | +|-----------------------|-------------| +| `org.eclipse.jetty.apache-jsp` | Old repo only shipped the `.source`; the main jar was in `target-base`. | +| `org.eclipse.jetty.osgi.boot.jsp` | Same — old repo only had `.source`; main jar was in `target-base`. | +| `org.eclipse.jetty.jaas.source` | Old repo shipped `jaas` without its source. | +| `org.eclipse.jetty.osgi.alpn.fragment.source` | Old repo shipped the fragment without its source. | +| `org.eclipse.jetty.security.jaspi` | Old repo only shipped the `.source`. | + +Having both the main and source jar for every bundle is cleaner and harmless. + +## Applying to future versions + +Replace `9.4.58.v20250814` with the new version string in steps 2 and 3. Both +scripts accept the version as their first argument and default to +`9.4.58.v20250814` if omitted. + +If the new Jetty release adds or removes bundles, edit the `BUNDLES` list at the +top of `createJettyP2RepoFromMavenCentral.sh`. Each line has the format: + +``` +|| +``` + +Note that the Maven artifact ID and the OSGi `Bundle-SymbolicName` often differ. +You can verify the OSGi symbolic name of any jar with: + +```bash +unzip -p some-jetty-bundle.jar META-INF/MANIFEST.MF | grep Bundle-SymbolicName +``` + +## Script overview + +| Script | What it does | +|--------|--------------| +| `createJettyP2RepoFromMavenCentral.sh` | Downloads Jetty bundles from Maven Central and builds a local p2 repository. | +| `uploadAndActivateJettyP2Repo.sh` | Uploads the p2 repo and updates all version references in the workspace. | +| `createAndUploadJettyP2Repository.sh` | *(legacy)* Mirrors an existing Eclipse-hosted p2 site. Use this when the version **is** available at `download.eclipse.org`. | +| `createLocalBaseP2repository.sh` | Builds the local `target-base` p2 repository via Tycho. | +| `uploadRepositoryToServer.sh` | Uploads the `target-base` p2 repository to `sapsailing.com`. | diff --git a/java/com.sap.sailing.targetplatform/scripts/createAndUploadJettyP2Repository.sh b/java/com.sap.sailing.targetplatform/scripts/createAndUploadJettyP2Repository.sh index a15563c99ae..54586f416ce 100755 --- a/java/com.sap.sailing.targetplatform/scripts/createAndUploadJettyP2Repository.sh +++ b/java/com.sap.sailing.targetplatform/scripts/createAndUploadJettyP2Repository.sh @@ -1,4 +1,6 @@ #!/bin/bash +# Fetches the latest Jetty 9.4 version from the official Jetty p2 repository, uploads it to sapsailing.com and updates all references in the workspace. +# Specific components such as apache-jsp and jetty-osgi-boot-jsp are updated to the new version, too, but not from the p2 repo but directly from Maven Central, as the p2 repo does not contain the source bundles. VERSION=$( curl https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/ | grep "/jetty/updates/jetty-bundles-9.x" | sed -e 's/^.*> \?\(9\.4\.[0-9]*\.v[0-9]*\)<.*$/\1/' ) echo "Found version ${VERSION}" P2_URL="https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/${VERSION}/" diff --git a/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh b/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh index e4d5850dc51..39e6752a924 100755 --- a/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh +++ b/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh @@ -16,6 +16,7 @@ # (needs the p2 publisher: org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher) # Typically any Eclipse IDE or the Equinox SDK will have this. # - curl and a POSIX shell +# - a /tmp directory with write permissions and at least 1GB free space # # Usage: # ./createJettyP2RepoFromMavenCentral.sh [VERSION] @@ -37,8 +38,9 @@ echo "=== Building Jetty p2 repository for version ${VERSION} ===" MAVEN_CENTRAL="https://repo1.maven.org/maven2" WORK_DIR="/tmp/jetty-p2-repo-${VERSION}" REPO_DIR="${WORK_DIR}/repository" -PLUGINS_DIR="${WORK_DIR}/staging/plugins" -FEATURES_DIR="${WORK_DIR}/staging/features/org.eclipse.jetty.bundles.f_${VERSION}" +STAGING_DIR="${WORK_DIR}/staging" +PLUGINS_DIR="${STAGING_DIR}/plugins" +FEATURES_DIR="${STAGING_DIR}/features/org.eclipse.jetty.bundles.f_${VERSION}" rm -rf "${WORK_DIR}" mkdir -p "${PLUGINS_DIR}" "${FEATURES_DIR}" @@ -49,36 +51,70 @@ mkdir -p "${PLUGINS_DIR}" "${FEATURES_DIR}" # # The OSGi symbolic names must match what the existing target platform # definition and feature.xml files reference. +# +# This list mirrors the contents of the official Eclipse Jetty p2 repo +# (e.g. https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.57.v20241219/) +# which ships 81 jars. All of these are versioned with the Jetty release +# version, except for two static bundles listed in STATIC_BUNDLES below. # --------------------------------------------------------------------------- BUNDLES="\ +org/eclipse/jetty|jetty-alpn-client|org.eclipse.jetty.alpn.client +org/eclipse/jetty|jetty-alpn-server|org.eclipse.jetty.alpn.server org/eclipse/jetty|jetty-annotations|org.eclipse.jetty.annotations +org/eclipse/jetty|apache-jsp|org.eclipse.jetty.apache-jsp org/eclipse/jetty|jetty-client|org.eclipse.jetty.client org/eclipse/jetty|jetty-continuation|org.eclipse.jetty.continuation org/eclipse/jetty|jetty-deploy|org.eclipse.jetty.deploy org/eclipse/jetty|jetty-http|org.eclipse.jetty.http +org/eclipse/jetty/http2|http2-client|org.eclipse.jetty.http2.client +org/eclipse/jetty/http2|http2-http-client-transport|org.eclipse.jetty.http2.client.http +org/eclipse/jetty/http2|http2-common|org.eclipse.jetty.http2.common +org/eclipse/jetty/http2|http2-hpack|org.eclipse.jetty.http2.hpack +org/eclipse/jetty/http2|http2-server|org.eclipse.jetty.http2.server org/eclipse/jetty|jetty-io|org.eclipse.jetty.io org/eclipse/jetty|jetty-jaas|org.eclipse.jetty.jaas +org/eclipse/jetty|jetty-jaspi|org.eclipse.jetty.security.jaspi org/eclipse/jetty|jetty-jmx|org.eclipse.jetty.jmx org/eclipse/jetty|jetty-jndi|org.eclipse.jetty.jndi +org/eclipse/jetty/osgi|jetty-osgi-alpn|org.eclipse.jetty.osgi.alpn.fragment +org/eclipse/jetty/osgi|jetty-osgi-boot|org.eclipse.jetty.osgi.boot +org/eclipse/jetty/osgi|jetty-osgi-boot-jsp|org.eclipse.jetty.osgi.boot.jsp +org/eclipse/jetty/osgi|jetty-osgi-boot-warurl|org.eclipse.jetty.osgi.boot.warurl +org/eclipse/jetty/osgi|jetty-httpservice|org.eclipse.jetty.osgi.httpservice org/eclipse/jetty|jetty-plus|org.eclipse.jetty.plus org/eclipse/jetty|jetty-proxy|org.eclipse.jetty.proxy org/eclipse/jetty|jetty-rewrite|org.eclipse.jetty.rewrite org/eclipse/jetty|jetty-security|org.eclipse.jetty.security org/eclipse/jetty|jetty-server|org.eclipse.jetty.server org/eclipse/jetty|jetty-servlet|org.eclipse.jetty.servlet +org/eclipse/jetty|jetty-servlets|org.eclipse.jetty.servlets org/eclipse/jetty|jetty-util|org.eclipse.jetty.util org/eclipse/jetty|jetty-util-ajax|org.eclipse.jetty.util.ajax org/eclipse/jetty|jetty-webapp|org.eclipse.jetty.webapp -org/eclipse/jetty|jetty-xml|org.eclipse.jetty.xml org/eclipse/jetty/websocket|websocket-api|org.eclipse.jetty.websocket.api org/eclipse/jetty/websocket|websocket-client|org.eclipse.jetty.websocket.client org/eclipse/jetty/websocket|websocket-common|org.eclipse.jetty.websocket.common +org/eclipse/jetty/websocket|javax-websocket-client-impl|org.eclipse.jetty.websocket.javax.websocket +org/eclipse/jetty/websocket|javax-websocket-server-impl|org.eclipse.jetty.websocket.javax.websocket.server org/eclipse/jetty/websocket|websocket-server|org.eclipse.jetty.websocket.server org/eclipse/jetty/websocket|websocket-servlet|org.eclipse.jetty.websocket.servlet -org/eclipse/jetty/osgi|jetty-osgi-boot|org.eclipse.jetty.osgi.boot -org/eclipse/jetty/osgi|jetty-osgi-boot-warurl|org.eclipse.jetty.osgi.boot.warurl -org/eclipse/jetty|apache-jsp|org.eclipse.jetty.apache-jsp -org/eclipse/jetty/osgi|jetty-osgi-boot-jsp|org.eclipse.jetty.osgi.boot.jsp" +org/eclipse/jetty|jetty-xml|org.eclipse.jetty.xml" + +# --------------------------------------------------------------------------- +# Static bundles — these ship with the official Eclipse Jetty p2 repo but +# have their own fixed version, independent of the Jetty release. +# Format: "download-url|osgi-bundle-symbolic-name|bundle-version" +# +# javax.security.auth.message is the JASPIC 1.0 API from Eclipse Orbit. +# Neither this project's code nor any Import-Package in our bundles actually +# references it, so it is harmless to omit. It is included here for +# completeness, mirrored from the previous Jetty p2 repository. +# --------------------------------------------------------------------------- +STATIC_BUNDLES="\ +https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/javax.security.auth.message_1.0.0.v201108011116.jar|javax.security.auth.message|1.0.0.v201108011116 +https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/javax.security.auth.message.source_1.0.0.v201108011116.jar|javax.security.auth.message.source|1.0.0.v201108011116 +https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/org.eclipse.jetty.osgi-servlet-api_3.1.0.M3.jar|org.eclipse.jetty.osgi-servlet-api|3.1.0.M3 +https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/org.eclipse.jetty.osgi-servlet-api.source_3.1.0.M3.jar|org.eclipse.jetty.osgi-servlet-api.source|3.1.0.M3" # --------------------------------------------------------------------------- # Download bundles and source bundles @@ -110,6 +146,23 @@ done <> "${FEATURES_DIR}/feature.xml" < + +STATIC_ENTRY + fi +done <" >> "${FEATURES_DIR}/feature.xml" # --------------------------------------------------------------------------- # Also create a source feature (org.eclipse.jetty.bundles.f.source) # that references the source bundles – matching the existing p2 structure. # --------------------------------------------------------------------------- -SOURCE_FEATURE_DIR="${WORK_DIR}/staging/features/org.eclipse.jetty.bundles.f.source_${VERSION}" +SOURCE_FEATURE_DIR="${STAGING_DIR}/features/org.eclipse.jetty.bundles.f.source_${VERSION}" mkdir -p "${SOURCE_FEATURE_DIR}" cat > "${SOURCE_FEATURE_DIR}/feature.xml" <> "${SOURCE_FEATURE_DIR}/feature.xml" < + +STATIC_SRC_ENTRY + fi + ;; + esac +done <" >> "${SOURCE_FEATURE_DIR}/feature.xml" # --------------------------------------------------------------------------- @@ -222,14 +316,14 @@ echo "" >> "${SOURCE_FEATURE_DIR}/feature.xml" # --------------------------------------------------------------------------- echo "" echo "--- Publishing p2 repository ---" -echo " Source: ${WORK_DIR}/staging" +echo " Source: ${STAGING_DIR}" echo " Destination: ${REPO_DIR}" eclipse -nosplash -verbose \ -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher \ -metadataRepository "file:${REPO_DIR}" \ -artifactRepository "file:${REPO_DIR}" \ - -source "${WORK_DIR}/staging" \ + -source "${STAGING_DIR}" \ -publishArtifacts \ -configs gtk.linux.x86_64 From 8c51adca50e2b69c9f3edc6498ec3fdd2473ab53 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 18 Mar 2026 16:55:23 +0100 Subject: [PATCH 3/9] bug6217: patched target platform definition and target-base to use Jetty 9.4.58 --- .../features/target-base/feature.xml | 8 +- .../apache-jsp-9.4.57.v20241219.jar | Bin 21217 -> 0 bytes ...> apache-jsp-9.4.58.v20250814-sources.jar} | Bin 18788 -> 18789 bytes .../apache-jsp-9.4.58.v20250814.jar | Bin 0 -> 21275 bytes .../jetty-osgi-boot-jsp-9.4.57.v20241219.jar | Bin 21596 -> 0 bytes ...sgi-boot-jsp-9.4.58.v20250814-sources.jar} | Bin 20393 -> 20393 bytes .../jetty-osgi-boot-jsp-9.4.58.v20250814.jar | Bin 0 -> 21680 bytes .../race-analysis-p2-remote.target | 6 +- .../scripts/README_Jetty.md | 2 +- java/com.sap.sse.feature.runtime/feature.xml | 84 +++++++++--------- 10 files changed, 50 insertions(+), 50 deletions(-) delete mode 100644 java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.57.v20241219.jar rename java/com.sap.sailing.targetplatform.base/plugins/target-base/{apache-jsp-9.4.57.v20241219-sources.jar => apache-jsp-9.4.58.v20250814-sources.jar} (68%) create mode 100644 java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.58.v20250814.jar delete mode 100644 java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.57.v20241219.jar rename java/com.sap.sailing.targetplatform.base/plugins/target-base/{jetty-osgi-boot-jsp-9.4.57.v20241219-sources.jar => jetty-osgi-boot-jsp-9.4.58.v20250814-sources.jar} (74%) create mode 100644 java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.58.v20250814.jar diff --git a/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml b/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml index 6b6964b31ed..da1890f4ba6 100755 --- a/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml +++ b/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml @@ -282,28 +282,28 @@ id="org.eclipse.jetty.apache-jsp" download-size="0" install-size="0" - version="9.4.57.v20241219" + version="9.4.58.v20250814" unpack="false"/> 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

@+~^akv`c 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 YI1$*7LjcQp7z_n`YQ$hLNu2Q4KLf-?#sB~S diff --git a/java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.57.v20241219-sources.jar b/java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.58.v20250814-sources.jar similarity index 68% rename from java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.57.v20241219-sources.jar rename to java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.58.v20250814-sources.jar index f64957721e91940a16afcbd02e63aa5d09f50935..6cca6158118acb42d1aa8d461d99fc7b1c740122 100644 GIT binary patch delta 2290 zcmZXV3piAHAIHy(A-ScUac8hDW2}r@7}v!#hOBF9qg-+~gk-gf!BA>Y<_L>C)|ynd zgeglT*+N>ksK|A5XO>bZ#d~JPJKov%JkNRN`#+b(drS@p`DaW|eW*xT=#x*Uo#_rHkmheRB1ibC-($#+P)bPMsjHcYU6ifLS+w_z5?? zGBf$AvQwc>zhZCxQ}>QXEQ53Yjmz%(;q`Q6@vnB$K9Z5nQ8RV1jr-?x@HSeyH-y3} zUFzDI+O!p;m}%L9@pM?D5Lr2(??$TXKwgzrt@HRtw`&x70n@1Ew7`(*WJldPsyQLc z1UHTI`ODYZI?Lg=n|@a;vrUg+Gkn7tm$8~kgAOt_8TwvDWlL6hMi(Z_Y%`=qKRi_^ zqZN@)m&m|R&Gc66*BsTGq$ZZi}*!{<#KFp71$r;zoo2P>?TP^Bk~&4ap0_@e9F&0S;Ngf~iqw)#s2J%T?J{ie}}sF@(2hO+%PRYt-)5!%iJi-HxoN zXk2{Zt<=*U5%JU`i88~KJ?F!G)~}VIbFj(pq(UgOLLZ39iIs{be;^Wd>!%JakJ{H|l&3;Eqy*x&mmq;?0%9yG+>h&3^AITKd`Li}hHq z?|jbHm05J!5=u?qCGEA>2Bu?+LW#Fv2TZdAl)*@Xn99FFX+BUD&Ta)9g$aQpb|PG_Ad00C5ntw@Wo?-!a46U9M000E^J%)Cd zca*2x1}%wloEbbSNX}1!62(XWfGLk)7kh|>W}pIA*lTh?F`Uyz1Oy_*0lsIDPjic8>K ak}YR!{QsF9s63??-0SdzP^>Nc+J69(j9b$H delta 2216 zcmZ8i3piBk8eX$zP#8^2njyxJ7{%D}Br?^Qao?`#V!}ykk6SK-a?5NsHYrXm_b8p@ zp4*IsT*mDgDKWNPlv1>XkisV9%%!d4tmj$Jde^(&|NH*`UH|j`?{C1yZop*ht>Fks z0N4Tmff1Ut>oRIv1@I_x#t6sjw7_ijRBu(O8pX>L`>eSF zZQsBoLwaG~gLrD4#R>DOTTM=OvOVZgX~))=dD*y_AXg6k2xhX&Y{z=$j-p@2zrDl` z@9tezbo7`z)bynbsvW_-EKw9HBY&#Oshh+6(`v4oo=|8P-w!0^RV4 z`*)6Zo<&8$>bjiFv1%n2U6CHJ^B0L(7wONL?wweA^N(e>yBnQ?$S`Gu5O~1$h`=@2 zKE!1s^HUHJ)DR~K2KONZZb1-85P=r(kO-`UWVl`8qeZ{YcdG zwC(s8xzAGz1NUEM_9s|-6rUTph;7n!3%!S_ap~IH(~FlPCLEw&`qE(dIy*T1(NRsE zB5|)$yIL+=D=A4o@Gnf}NF3~uxX)IO` z-@GjEZ#!N{*C^DeILq_Y!kkM{>p3p@E`v7VamCVn@jpo_?U?&EeV1_7*%XE|o|+^U zK8@^qKaH&CO2O*BeCSt@^T&MVyzal+z0diWE5|$Ct@t>s2cBv4aK*6zRQ;0rW-rHi zEM<8$#Ypj??GRJXkFsl6F8TD%x7+SMMv2$qA9G*Kd6-@NwiXeww_xlF z{obO%!;C{V$I12Q9yD-Do1|u%CEE0ftG0G2Ty)FQ6+LFKRJdA8lS8tiOH9+hUoo_n zX7l>2yn-!ri#gS|m+-++7WSJpuJKGq4mFIZFy=*S#^w;nf-eI?~ zU6lJ6UBPFs+sOUm!I?D_r4Bz4E$anFu8 zvBpz9O&>Iw=~3rjU0{ftIB2vg?4KzjFJ!QSkY|ZDPsF)BKsY;h%q}NmMfImm&g*Or)_*J|inBk~QvSmrKwJSISS1 zf6iepyfCgF4=9zSk*@_dN(2L=j*l|tueoWm>v+CX z5vrr*GN`=4{oEjH&(1+!S?e+CWNpz`+dD<8ik z_i@-f(0b|0^-K*D-}`IO7&E^Ftxo)g5JVB0pTJv$3G8i#x3U5Nz>KZT7;egmO^HF7x&B7q7}098^&P-^2FA7D3L z1j2VP=!m%@^oAlW%FbB|2C+uQf_xSSX;Gy&8uM8v5DEn4p-QTxC_|g53ScY<-2vsG z>3_HtK34@oJ)k;dZ2DbiWvT#v5^!peE*z;P@aBh~YTZbRI|2aOqyRu}V`>1vjy8fr z-%Rl;f&lNnAmLuE1ONdv06=XLJ&}M~OqFp0QTU)|)dU;>5d5=}@BPNbjxK`^n_-2H z@eC=MK4JjS!>^*Xp%8RyB=8->Kqvz=O7tT{QxqOC95W1p9UVaAo1y~s=*aK;f5ig{ zgD0l^)@c49!ltr1`usr#!rm>Jzh*@7R~je-00%dT>J5aIzY-KS^%iadZ3{u~WMjVd zXoyH6Z0apgI6c1kQk`E;aBFWWizNvMH5)5JN*2<%e~zU^{zT>Z>(|>PPK2r~OoV1{ Y+Toity=37}M44bAJ4=)}!$k1)zdY$(r2qf` diff --git a/java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.58.v20250814.jar b/java/com.sap.sailing.targetplatform.base/plugins/target-base/apache-jsp-9.4.58.v20250814.jar new file mode 100644 index 0000000000000000000000000000000000000000..d4e062db73beb2a50420ee7bf595f60f939a5217 GIT binary patch literal 21275 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 MCmo%pF7@C406Id8asU7T literal 0 HcmV?d00001 diff --git a/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.57.v20241219.jar b/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.57.v20241219.jar deleted file mode 100644 index ff87b44e05c5de76b37867e4a3b65e030dd66e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21596 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 diff --git a/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.57.v20241219-sources.jar b/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.58.v20250814-sources.jar similarity index 74% rename from java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.57.v20241219-sources.jar rename to java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.58.v20250814-sources.jar index 78558bedad4db96b83b6bf4cd965341a40662c45..2affb8ae00c526f79a3e56b842ffcecbd5f358fe 100644 GIT binary patch delta 1873 zcmaKs3pCVO9LMi}X5_3bO6u-plvfgAQ?~5QvJvGa}$#t=7=kk;^_qTNZiNj>YLL_X#2db?=jKQ2*sU_ zzF4F$hvA&gj;mP-^c#M{WRZJ#{EGq6gBxcnDs z_Q~Iv3!ZdN5j8dX4I7+UE2-hkC@O#Mq-~Fg7HUB&?!o2FUfVT$&q~)TUKAZn$?Dxy zVk)~1J5#$x_j^8Pz8n^Ig_(tk>se!~@*i_5(tWB#B`uVQ!D)t%e&{rcj9#Bq@I*L% z=#JlX?+Lhh;>OG3(N5b$X4CA&Nc@4|btD76efJ;QUw0h7xZEFE29a@Uu@SOFg#@Ca z;u>U&iUDW|Zs`hq03yUJN5wphBTm&QJt56}QYip1 zkxq;i;)W$4jV`8Qoqf_BK^r3B`@C3C8@rrvndNkMz9+>haNW?YbmOOK1a=y!)O%dU z>4|iX>6I-jt3B!vT~WR-&HQ-H`A8e#vIIIyM1lyE2{N`W^so2b(NWqTvO5&FyS!w2 z2j#x8wMQ!TK7105J|2&ZY^1ZS6BAg;Kc%M5b_v$$ur(9IRXN1t4gzz2oYSq3Z4+&p zyct7vtEJtwl5W@E10U8OQ&^Pa>vZtN0+>pVs_-fV28@@L5jWWs>juJ@m!XO5A~T#w znii5zi;ynKxfd_)EXWlf$mtM-9C*+$T zgYlB1j^Z+{BT}Prx#X&~S^W^yGq@|s9tr-@cE9IIB zdjrp=O$E?~BJEq@ZM+Pkb`+=}psYPPl#lJpm<|S* z)(`-@_J-Pg>+|mn-G35*G6Pw`orTgPh--o!U>;2286q;SE;^U3p36_+5v~5uk@TJ8 zXD$t;&ksBk+yK)Qqe28Cb=O47dAexCMji1-BU^dXQ6x3-98fWp?}3Uy{+5j@e%;xr z8GLCL0K1i2pFUX(fV{Y1C5YVEYnU|Honym?UD)p4Y;>t#&x~?M&m~ydr|PKy7<`w_ zG)KDm=Cf2K4n7T&zgC*zlvGppe{$p@fo?NrtGHJ<1MZe7EtXmWz?zJ!7SUrhxy3P> zIa27Zt4>JFWEX^M10YlOXW4fNkL6tNW$l$MuWC!@MB9zg^~e*+!;xpe>l delta 1849 zcmaJ?4K!3~7`}IA7&O(;m=HnU+)}MnnCH_U^pl(9A6jn$Lg~m*;!ld`v-f-qZx%s=NIvsG37wxdWumG&DA;~=Qe z5Q11>5JLkzED79YYiH(uSFkZWq{oa!hcP7Vd+$z-F^e*n{PGOJgBhpL=-{tOg3S{C z7+Xj9Z1Tei_M34sedIUzW0&BYRT^ba8$_>(EyVT|oOj-*bb^++xz9^~kRsi;t7G{A zgk>eY83~gYD_ct^I)=phPoL3l5bKRJG+dqh{r3{GXc-+DnMSGy<5!J1WLYS^`t$~w zLG(>sJD2F&7A!U_Fs#h<(`Vd2^1)8)E1T<1l$z^uj7_1ImfQ@ykmLH|lG2q(O}-YTF(Jrix>#AQoHeCf7aeYNG$?STI>VM5i#eBF zy(@tj!HKWki_0;<)laNuff~?^ySD8+yY=eroi3D4nja&f316Czh+@vV|$+C$_+W47s@PovGD`FtD>8F#7f({m@&CDfzuo6 z?}tKCySBt~+jM<6J7_88dc>$ZiwgZ2O2MLzQraSNqo+qxElpa9w9 zK6}6kTpd4mT1ysQsuc_JTnz102O2y6Z1B!{PmJl!;0S|Lk@A4p2lbkTCSkuat5q$Q z`s%dI45n8_CAOZ~Zqc%eeQBRwK9le0jmW2CPV7KBmock$;3C(~ORfX5-m@kfw$Da{ zrdZ}M1SM^bqyMwczgH0cUI58f0A~+9R6xQ#w6IgGv?GWnIP5_{eWw(@sw0RF?f)w3 zeo=AS!weOm-G~-$ilvPKFtQX}L5QfAuJ8t+UZNEqBqIb=mF^?9D46Hzje;=G=w)&V zGi;mBj*v0EA=98mv&|r=ZchXj81M{&cIErHqI~9lY+CR7n&(&u!pW`~+5XR39SGwsStb|3JYmBA-Li})vJ9))xcnm| zGzG;c&N`r)Pe5tz;%VXP_FOhoMC3G^c%QdrToI|V{Tx{a26=>K{}InG8f<2RAyX=`7bNzw8H=Z diff --git a/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.58.v20250814.jar b/java/com.sap.sailing.targetplatform.base/plugins/target-base/jetty-osgi-boot-jsp-9.4.58.v20250814.jar new file mode 100644 index 0000000000000000000000000000000000000000..524bbab1c5e67acef7fb9a2f030fada54a779b12 GIT binary patch literal 21680 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

^D(%O&EE?y=6))UO#P`u24 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 literal 0 HcmV?d00001 diff --git a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-remote.target b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-remote.target index 559d0787ed6..245055f44a4 100755 --- a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-remote.target +++ b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-remote.target @@ -87,9 +87,9 @@ - - - + + + diff --git a/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md b/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md index 9a16cf4ab73..0778dd762d1 100644 --- a/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md +++ b/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md @@ -50,7 +50,7 @@ This will: Central into a temporary staging directory. 2. Download 4 static (non-Jetty-versioned) bundles that also ship with the official Eclipse Jetty p2 repository (see - [What's in the p2 repository](#whats-in-the-p2-repository) below). + [What's in the p2 repository](#what-s-in-the-p2-repository) below). 3. Generate two Eclipse features wrapping these bundles: - `org.eclipse.jetty.bundles.f` — the main feature - `org.eclipse.jetty.bundles.f.source` — the source feature diff --git a/java/com.sap.sse.feature.runtime/feature.xml b/java/com.sap.sse.feature.runtime/feature.xml index c503ed25dac..6fac9f9ae2a 100644 --- a/java/com.sap.sse.feature.runtime/feature.xml +++ b/java/com.sap.sse.feature.runtime/feature.xml @@ -63,14 +63,14 @@ id="org.eclipse.jetty.osgi.boot" download-size="0" install-size="0" - version="9.4.57.v20241219" + version="9.4.58.v20250814" unpack="false"/> @@ -895,7 +895,7 @@ id="org.eclipse.jetty.osgi.boot.jsp.source" download-size="0" install-size="0" - version="9.4.57.v20241219" + version="9.4.58.v20250814" unpack="false"/> Date: Thu, 19 Mar 2026 14:43:48 +0100 Subject: [PATCH 4/9] bug6217: use JAVA8_HOME to run Maven when building AWS SDK wrapper bundle --- .../createLocalAwsApiP2Repository.sh | 4 +- .../scripts/README_Jetty.md | 184 ---------- .../createJettyP2RepoFromMavenCentral.sh | 339 ------------------ .../scripts/uploadAndActivateJettyP2Repo.sh | 114 ------ 4 files changed, 2 insertions(+), 639 deletions(-) delete mode 100644 java/com.sap.sailing.targetplatform/scripts/README_Jetty.md delete mode 100755 java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh delete mode 100755 java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh diff --git a/java/com.amazon.aws.aws-java-api/createLocalAwsApiP2Repository.sh b/java/com.amazon.aws.aws-java-api/createLocalAwsApiP2Repository.sh index 24eba4dcc3d..78f7383efc1 100755 --- a/java/com.amazon.aws.aws-java-api/createLocalAwsApiP2Repository.sh +++ b/java/com.amazon.aws.aws-java-api/createLocalAwsApiP2Repository.sh @@ -88,7 +88,7 @@ echo "Building the wrapper bundle..." cd .. echo "NOT USING ${extra} arguments for Maven to avoid using local target definition already for building local repo" echo "In folder $(pwd) using: mvn clean install" -mvn --batch-mode clean install +JAVA_HOME=${JAVA8_HOME} mvn --batch-mode clean install mkdir -p ${UPDATE_SITE_PROJECT}/plugins/aws-sdk rm -rf ${UPDATE_SITE_PROJECT}/plugins/aws-sdk/* # Note: the JAR ends up in target/ because the SDK project does not use any parent pom, so @@ -128,7 +128,7 @@ echo "Patching update site's site.xml..." sed -i -e 's/com.amazon.aws.aws-java-api\(\.source\)\?_\([0-9.]*\)\.jar/com.amazon.aws.aws-java-api\1_'${VERSION}'.jar/' -e '/feature url=/s/version="[0-9.]*"/version="'${VERSION}'"/' ${SITE_XML} echo "Building update site..." echo "In folder $(pwd) using: mvn ${extra} clean install" -mvn ${extra} clean install +JAVA_HOME=${JAVA8_HOME} mvn ${extra} clean install echo "Patching SDK version ${VERSION} in target platform definition ${TARGET_DEFINITION}..." sed -i -e 's///' ${TARGET_DEFINITION} echo "You may test your target platform locally by creating race-analysis-p2-local.target by running the script createLocalTargetDef.sh." diff --git a/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md b/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md deleted file mode 100644 index 0778dd762d1..00000000000 --- a/java/com.sap.sailing.targetplatform/scripts/README_Jetty.md +++ /dev/null @@ -1,184 +0,0 @@ -# Updating Jetty in the Target Platform - -## Background - -The target platform references Jetty bundles via a p2 repository. Historically -this was mirrored from the official Eclipse-hosted site at -`https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/` using the -`createAndUploadJettyP2Repository.sh` script. - -When a new Jetty release is **not yet published** to that Eclipse p2 site (as -happened with 9.4.58), the scripts described below let you build an equivalent -p2 repository yourself, directly from the artifacts on **Maven Central**. - -This works because the Jetty jars on Maven Central are already proper OSGi -bundles (`Bundle-SymbolicName`, `Bundle-Version`, etc.) and their `-sources.jar` -files carry `Eclipse-SourceBundle` headers. - -## Prerequisites - -| Tool | Purpose | -|------|---------| -| `eclipse` on `PATH` | Provides the p2 publisher (`org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher`). Any Eclipse IDE or Equinox SDK installation will have this. | -| `curl` | Downloads jars from Maven Central. | -| `wget` | Used by the upload script to fetch JSP bundles into `target-base`. | -| `ssh` / `scp` | Uploads the finished p2 repository to `sapsailing.com`. | - -## Step-by-step guide - -### 1. Determine the new version string - -Find the latest 9.4.x release on Maven Central: - -``` -curl -s https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/ \ - | grep -o '9\.4\.[0-9]*\.v[0-9]*' | sort -V | tail -1 -``` - -The version string looks like `9.4.58.v20250814`. - -### 2. Build the p2 repository - -```bash -cd java/com.sap.sailing.targetplatform/scripts -./createJettyP2RepoFromMavenCentral.sh 9.4.58.v20250814 -``` - -This will: - -1. Download all 41 Jetty-versioned bundles + their source jars from Maven - Central into a temporary staging directory. -2. Download 4 static (non-Jetty-versioned) bundles that also ship with the - official Eclipse Jetty p2 repository (see - [What's in the p2 repository](#what-s-in-the-p2-repository) below). -3. Generate two Eclipse features wrapping these bundles: - - `org.eclipse.jetty.bundles.f` — the main feature - - `org.eclipse.jetty.bundles.f.source` — the source feature -4. Run the Eclipse p2 `FeaturesAndBundlesPublisher` to produce a valid p2 - repository. - -The result is at `/tmp/jetty-p2-repo-/repository`. - -> **Tip:** You can test with the local repo before uploading. Point the -> `` in your `.target` file to -> `file:/tmp/jetty-p2-repo-/repository` and reload the target -> platform. - -### 3. Upload and activate - -```bash -./uploadAndActivateJettyP2Repo.sh 9.4.58.v20250814 -``` - -This will: - -1. Upload the p2 repository to `trac@sapsailing.com:p2-repositories/jetty-`. -2. Update the Jetty version and repository URL in both target definition files - (`race-analysis-p2-remote.target`, `race-analysis-p2-local.target`). -3. Update the Jetty version in the feature files - (`com.sap.sse.feature.runtime/feature.xml`, - `com.sap.sailing.targetplatform.base/features/target-base/feature.xml`). -4. Replace the `apache-jsp` and `jetty-osgi-boot-jsp` jars (+ sources) in - `com.sap.sailing.targetplatform.base/plugins/target-base` with the new - version and stage them in git. - -### 4. Rebuild and upload the base p2 repository - -```bash -./createLocalBaseP2repository.sh -./uploadRepositoryToServer.sh -``` - -### 5. Reload the target platform - -In Eclipse, open the `.target` file and click **Reload** / **Set as Active -Target Platform**. - -## What's in the p2 repository - -The generated p2 repository contains **86 JARs** (bundles + source bundles) -and is a **strict superset** of the 81-JAR repository that the official Eclipse -Jetty p2 site publishes. - -The bundles fall into two categories: - -### Jetty-versioned bundles (41 bundles, each with a source jar = 82 JARs) - -These are downloaded from Maven Central and versioned with the Jetty release -(e.g. `9.4.58.v20250814`). They are defined in the `BUNDLES` variable in the -script. - -| Category | Bundles | -|----------|---------| -| Core | `jetty-server`, `jetty-servlet`, `jetty-servlets`, `jetty-http`, `jetty-io`, `jetty-util`, `jetty-util-ajax`, `jetty-xml`, `jetty-security`, `jetty-webapp`, `jetty-deploy`, `jetty-client`, `jetty-continuation`, `jetty-proxy`, `jetty-rewrite` | -| Auth | `jetty-jaas`, `jetty-jaspi` (BSN: `security.jaspi`), `jetty-annotations`, `jetty-jmx`, `jetty-jndi`, `jetty-plus` | -| ALPN / HTTP/2 | `jetty-alpn-client`, `jetty-alpn-server`, `http2-client`, `http2-http-client-transport` (BSN: `http2.client.http`), `http2-common`, `http2-hpack`, `http2-server` | -| WebSocket | `websocket-api`, `websocket-client`, `websocket-common`, `websocket-server`, `websocket-servlet`, `javax-websocket-client-impl` (BSN: `websocket.javax.websocket`), `javax-websocket-server-impl` (BSN: `websocket.javax.websocket.server`) | -| OSGi integration | `jetty-osgi-boot`, `jetty-osgi-boot-warurl`, `jetty-osgi-boot-jsp`, `jetty-httpservice` (BSN: `osgi.httpservice`), `jetty-osgi-alpn` (BSN: `osgi.alpn.fragment`) | -| JSP | `apache-jsp` (BSN: `jetty.apache-jsp`) | - -### Static bundles (4 JARs) - -These ship with the official Eclipse Jetty p2 repository but have their own -fixed version, independent of the Jetty release. They are defined in the -`STATIC_BUNDLES` variable in the script and are downloaded from the previous -Jetty p2 repository on `sapsailing.com`. - -| Bundle | Version | Notes | -|--------|---------|-------| -| `javax.security.auth.message` | `1.0.0.v201108011116` | JASPIC 1.0 API (Eclipse Orbit). Not imported by any project code. | -| `javax.security.auth.message.source` | `1.0.0.v201108011116` | Source for the above. | -| `org.eclipse.jetty.osgi-servlet-api` | `3.1.0.M3` | Jetty's repackaged Servlet 3.1 API. Also in `target-base/plugins`. | -| `org.eclipse.jetty.osgi-servlet-api.source` | `3.1.0.M3` | Source for the above. | - -These bundles are **optional** — if the download fails (e.g. because the old -p2 repo URL is no longer available), the script continues with a warning. Both -`javax.security.auth.message` and `osgi-servlet-api` are also provided by -`target-base/plugins`, so the target platform will still resolve correctly. - -### Comparison with the official Eclipse Jetty p2 repository - -The old Eclipse-hosted repo (e.g. the 9.4.57 version mirrored at -`https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/`) contained **81 JARs**. -The new repo contains **86 JARs** — a strict superset. The 5 extras are source -or main JARs that the old repo inconsistently omitted: - -| Extra JAR in new repo | Explanation | -|-----------------------|-------------| -| `org.eclipse.jetty.apache-jsp` | Old repo only shipped the `.source`; the main jar was in `target-base`. | -| `org.eclipse.jetty.osgi.boot.jsp` | Same — old repo only had `.source`; main jar was in `target-base`. | -| `org.eclipse.jetty.jaas.source` | Old repo shipped `jaas` without its source. | -| `org.eclipse.jetty.osgi.alpn.fragment.source` | Old repo shipped the fragment without its source. | -| `org.eclipse.jetty.security.jaspi` | Old repo only shipped the `.source`. | - -Having both the main and source jar for every bundle is cleaner and harmless. - -## Applying to future versions - -Replace `9.4.58.v20250814` with the new version string in steps 2 and 3. Both -scripts accept the version as their first argument and default to -`9.4.58.v20250814` if omitted. - -If the new Jetty release adds or removes bundles, edit the `BUNDLES` list at the -top of `createJettyP2RepoFromMavenCentral.sh`. Each line has the format: - -``` -|| -``` - -Note that the Maven artifact ID and the OSGi `Bundle-SymbolicName` often differ. -You can verify the OSGi symbolic name of any jar with: - -```bash -unzip -p some-jetty-bundle.jar META-INF/MANIFEST.MF | grep Bundle-SymbolicName -``` - -## Script overview - -| Script | What it does | -|--------|--------------| -| `createJettyP2RepoFromMavenCentral.sh` | Downloads Jetty bundles from Maven Central and builds a local p2 repository. | -| `uploadAndActivateJettyP2Repo.sh` | Uploads the p2 repo and updates all version references in the workspace. | -| `createAndUploadJettyP2Repository.sh` | *(legacy)* Mirrors an existing Eclipse-hosted p2 site. Use this when the version **is** available at `download.eclipse.org`. | -| `createLocalBaseP2repository.sh` | Builds the local `target-base` p2 repository via Tycho. | -| `uploadRepositoryToServer.sh` | Uploads the `target-base` p2 repository to `sapsailing.com`. | diff --git a/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh b/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh deleted file mode 100755 index 39e6752a924..00000000000 --- a/java/com.sap.sailing.targetplatform/scripts/createJettyP2RepoFromMavenCentral.sh +++ /dev/null @@ -1,339 +0,0 @@ -#!/bin/bash -# -# Creates a local p2 repository for Jetty 9.4.x from Maven Central artifacts. -# -# Use this when the official Eclipse Jetty p2 repository at -# https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/ -# does not yet contain the latest security patch release. -# -# The Jetty jars on Maven Central are already proper OSGi bundles (with -# Bundle-SymbolicName, etc.) and their -sources.jar files already carry -# Eclipse-SourceBundle headers, so we can publish them directly into a -# p2 repository. -# -# Prerequisites: -# - An Eclipse installation accessible via the "eclipse" command on PATH -# (needs the p2 publisher: org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher) -# Typically any Eclipse IDE or the Equinox SDK will have this. -# - curl and a POSIX shell -# - a /tmp directory with write permissions and at least 1GB free space -# -# Usage: -# ./createJettyP2RepoFromMavenCentral.sh [VERSION] -# -# VERSION defaults to 9.4.58.v20250814 if not supplied. -# -# After running, the p2 repository will be at: -# /tmp/jetty-p2-repo-/repository -# -# You can then either: -# a) Point your target platform definition at this local directory, or -# b) Upload it to your p2 server (see uploadAndActivateJettyP2Repo.sh) -# -set -euo pipefail - -VERSION="${1:-9.4.58.v20250814}" -echo "=== Building Jetty p2 repository for version ${VERSION} ===" - -MAVEN_CENTRAL="https://repo1.maven.org/maven2" -WORK_DIR="/tmp/jetty-p2-repo-${VERSION}" -REPO_DIR="${WORK_DIR}/repository" -STAGING_DIR="${WORK_DIR}/staging" -PLUGINS_DIR="${STAGING_DIR}/plugins" -FEATURES_DIR="${STAGING_DIR}/features/org.eclipse.jetty.bundles.f_${VERSION}" - -rm -rf "${WORK_DIR}" -mkdir -p "${PLUGINS_DIR}" "${FEATURES_DIR}" - -# --------------------------------------------------------------------------- -# Define the bundle list. -# Format: "maven-group-path|artifact-id|osgi-bundle-symbolic-name" -# -# The OSGi symbolic names must match what the existing target platform -# definition and feature.xml files reference. -# -# This list mirrors the contents of the official Eclipse Jetty p2 repo -# (e.g. https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.57.v20241219/) -# which ships 81 jars. All of these are versioned with the Jetty release -# version, except for two static bundles listed in STATIC_BUNDLES below. -# --------------------------------------------------------------------------- -BUNDLES="\ -org/eclipse/jetty|jetty-alpn-client|org.eclipse.jetty.alpn.client -org/eclipse/jetty|jetty-alpn-server|org.eclipse.jetty.alpn.server -org/eclipse/jetty|jetty-annotations|org.eclipse.jetty.annotations -org/eclipse/jetty|apache-jsp|org.eclipse.jetty.apache-jsp -org/eclipse/jetty|jetty-client|org.eclipse.jetty.client -org/eclipse/jetty|jetty-continuation|org.eclipse.jetty.continuation -org/eclipse/jetty|jetty-deploy|org.eclipse.jetty.deploy -org/eclipse/jetty|jetty-http|org.eclipse.jetty.http -org/eclipse/jetty/http2|http2-client|org.eclipse.jetty.http2.client -org/eclipse/jetty/http2|http2-http-client-transport|org.eclipse.jetty.http2.client.http -org/eclipse/jetty/http2|http2-common|org.eclipse.jetty.http2.common -org/eclipse/jetty/http2|http2-hpack|org.eclipse.jetty.http2.hpack -org/eclipse/jetty/http2|http2-server|org.eclipse.jetty.http2.server -org/eclipse/jetty|jetty-io|org.eclipse.jetty.io -org/eclipse/jetty|jetty-jaas|org.eclipse.jetty.jaas -org/eclipse/jetty|jetty-jaspi|org.eclipse.jetty.security.jaspi -org/eclipse/jetty|jetty-jmx|org.eclipse.jetty.jmx -org/eclipse/jetty|jetty-jndi|org.eclipse.jetty.jndi -org/eclipse/jetty/osgi|jetty-osgi-alpn|org.eclipse.jetty.osgi.alpn.fragment -org/eclipse/jetty/osgi|jetty-osgi-boot|org.eclipse.jetty.osgi.boot -org/eclipse/jetty/osgi|jetty-osgi-boot-jsp|org.eclipse.jetty.osgi.boot.jsp -org/eclipse/jetty/osgi|jetty-osgi-boot-warurl|org.eclipse.jetty.osgi.boot.warurl -org/eclipse/jetty/osgi|jetty-httpservice|org.eclipse.jetty.osgi.httpservice -org/eclipse/jetty|jetty-plus|org.eclipse.jetty.plus -org/eclipse/jetty|jetty-proxy|org.eclipse.jetty.proxy -org/eclipse/jetty|jetty-rewrite|org.eclipse.jetty.rewrite -org/eclipse/jetty|jetty-security|org.eclipse.jetty.security -org/eclipse/jetty|jetty-server|org.eclipse.jetty.server -org/eclipse/jetty|jetty-servlet|org.eclipse.jetty.servlet -org/eclipse/jetty|jetty-servlets|org.eclipse.jetty.servlets -org/eclipse/jetty|jetty-util|org.eclipse.jetty.util -org/eclipse/jetty|jetty-util-ajax|org.eclipse.jetty.util.ajax -org/eclipse/jetty|jetty-webapp|org.eclipse.jetty.webapp -org/eclipse/jetty/websocket|websocket-api|org.eclipse.jetty.websocket.api -org/eclipse/jetty/websocket|websocket-client|org.eclipse.jetty.websocket.client -org/eclipse/jetty/websocket|websocket-common|org.eclipse.jetty.websocket.common -org/eclipse/jetty/websocket|javax-websocket-client-impl|org.eclipse.jetty.websocket.javax.websocket -org/eclipse/jetty/websocket|javax-websocket-server-impl|org.eclipse.jetty.websocket.javax.websocket.server -org/eclipse/jetty/websocket|websocket-server|org.eclipse.jetty.websocket.server -org/eclipse/jetty/websocket|websocket-servlet|org.eclipse.jetty.websocket.servlet -org/eclipse/jetty|jetty-xml|org.eclipse.jetty.xml" - -# --------------------------------------------------------------------------- -# Static bundles — these ship with the official Eclipse Jetty p2 repo but -# have their own fixed version, independent of the Jetty release. -# Format: "download-url|osgi-bundle-symbolic-name|bundle-version" -# -# javax.security.auth.message is the JASPIC 1.0 API from Eclipse Orbit. -# Neither this project's code nor any Import-Package in our bundles actually -# references it, so it is harmless to omit. It is included here for -# completeness, mirrored from the previous Jetty p2 repository. -# --------------------------------------------------------------------------- -STATIC_BUNDLES="\ -https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/javax.security.auth.message_1.0.0.v201108011116.jar|javax.security.auth.message|1.0.0.v201108011116 -https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/javax.security.auth.message.source_1.0.0.v201108011116.jar|javax.security.auth.message.source|1.0.0.v201108011116 -https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/org.eclipse.jetty.osgi-servlet-api_3.1.0.M3.jar|org.eclipse.jetty.osgi-servlet-api|3.1.0.M3 -https://p2.sapsailing.com/p2/jetty-9.4.57.v20241219/plugins/org.eclipse.jetty.osgi-servlet-api.source_3.1.0.M3.jar|org.eclipse.jetty.osgi-servlet-api.source|3.1.0.M3" - -# --------------------------------------------------------------------------- -# Download bundles and source bundles -# --------------------------------------------------------------------------- -echo "" -echo "--- Downloading bundles from Maven Central ---" -DOWNLOAD_ERRORS=0 - -while IFS='|' read -r GROUP ARTIFACT BSN; do - [ -z "${GROUP}" ] && continue - - JAR_URL="${MAVEN_CENTRAL}/${GROUP}/${ARTIFACT}/${VERSION}/${ARTIFACT}-${VERSION}.jar" - SRC_URL="${MAVEN_CENTRAL}/${GROUP}/${ARTIFACT}/${VERSION}/${ARTIFACT}-${VERSION}-sources.jar" - - echo " ${ARTIFACT} ..." - # Download main bundle - if ! curl -sfL -o "${PLUGINS_DIR}/${BSN}_${VERSION}.jar" "${JAR_URL}"; then - echo " ERROR: Failed to download ${JAR_URL}" - DOWNLOAD_ERRORS=$((DOWNLOAD_ERRORS + 1)) - continue - fi - - # Download source bundle (non-fatal if missing) - if ! curl -sfL -o "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" "${SRC_URL}"; then - echo " WARNING: No source jar for ${ARTIFACT}" - rm -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" - fi -done </dev/null | wc -l) jar files." - -# --------------------------------------------------------------------------- -# Create the feature.xml -# This wraps all the downloaded bundles into a single installable feature -# called "org.eclipse.jetty.bundles.f" — matching the existing p2 repo. -# --------------------------------------------------------------------------- -echo "" -echo "--- Generating feature.xml ---" - -cat > "${FEATURES_DIR}/feature.xml" < - - - - Jetty ${VERSION} bundles for OSGi, built from Maven Central artifacts. - - - - Apache License 2.0 / Eclipse Public License 1.0 - - -FEATURE_HEADER - -while IFS='|' read -r GROUP ARTIFACT BSN; do - [ -z "${GROUP}" ] && continue - cat >> "${FEATURES_DIR}/feature.xml" < - -PLUGIN_ENTRY - - # Also add the source plugin if we downloaded it - if [ -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" ]; then - cat >> "${FEATURES_DIR}/feature.xml" < - -SOURCE_ENTRY - fi -done <> "${FEATURES_DIR}/feature.xml" < - -STATIC_ENTRY - fi -done <" >> "${FEATURES_DIR}/feature.xml" - -# --------------------------------------------------------------------------- -# Also create a source feature (org.eclipse.jetty.bundles.f.source) -# that references the source bundles – matching the existing p2 structure. -# --------------------------------------------------------------------------- -SOURCE_FEATURE_DIR="${STAGING_DIR}/features/org.eclipse.jetty.bundles.f.source_${VERSION}" -mkdir -p "${SOURCE_FEATURE_DIR}" - -cat > "${SOURCE_FEATURE_DIR}/feature.xml" < - - - - Source bundles for Jetty ${VERSION}, built from Maven Central artifacts. - - - - Apache License 2.0 / Eclipse Public License 1.0 - - -SOURCE_FEATURE_HEADER - -while IFS='|' read -r GROUP ARTIFACT BSN; do - [ -z "${GROUP}" ] && continue - if [ -f "${PLUGINS_DIR}/${BSN}.source_${VERSION}.jar" ]; then - cat >> "${SOURCE_FEATURE_DIR}/feature.xml" < - -SOURCE_PLUGIN_ENTRY - fi -done <> "${SOURCE_FEATURE_DIR}/feature.xml" < - -STATIC_SRC_ENTRY - fi - ;; - esac -done <" >> "${SOURCE_FEATURE_DIR}/feature.xml" - -# --------------------------------------------------------------------------- -# Publish the p2 repository using Eclipse's FeaturesAndBundlesPublisher -# --------------------------------------------------------------------------- -echo "" -echo "--- Publishing p2 repository ---" -echo " Source: ${STAGING_DIR}" -echo " Destination: ${REPO_DIR}" - -eclipse -nosplash -verbose \ - -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher \ - -metadataRepository "file:${REPO_DIR}" \ - -artifactRepository "file:${REPO_DIR}" \ - -source "${STAGING_DIR}" \ - -publishArtifacts \ - -configs gtk.linux.x86_64 - -echo "" -echo "=== SUCCESS ===" -echo "" -echo "p2 repository created at: ${REPO_DIR}" -echo "" -echo "To use it locally, update your target platform definition to point to:" -echo " file:${REPO_DIR}" -echo "" -echo "To upload to sapsailing.com and update all workspace references, run:" -echo " ./uploadAndActivateJettyP2Repo.sh ${VERSION}" \ No newline at end of file diff --git a/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh b/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh deleted file mode 100755 index 2743222e999..00000000000 --- a/java/com.sap.sailing.targetplatform/scripts/uploadAndActivateJettyP2Repo.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash -# -# After creating the p2 repository with createJettyP2RepoFromMavenCentral.sh, -# this script uploads it and updates all references in the workspace. -# -# Usage: -# ./uploadAndActivateJettyP2Repo.sh [VERSION] -# -# VERSION defaults to 9.4.58.v20250814 if not supplied. -# -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -VERSION="${1:-9.4.58.v20250814}" -REPO_DIR="/tmp/jetty-p2-repo-${VERSION}/repository" - -if [ ! -d "${REPO_DIR}" ]; then - echo "ERROR: p2 repository not found at ${REPO_DIR}" - echo "Run ./createJettyP2RepoFromMavenCentral.sh ${VERSION} first." - exit 1 -fi - -# --------------------------------------------------------------------------- -# Determine the old version from the target definition -# --------------------------------------------------------------------------- -OLD_VERSION=$(grep '\)/\1'"${VERSION}"'\3/' \ - -e 's|\(\)|\1jetty-'"${VERSION}"'\2|' \ - "${TARGET_FILE}" - fi -done - -# --------------------------------------------------------------------------- -# 3. Update feature.xml files with new Jetty version -# --------------------------------------------------------------------------- -echo "" -echo "--- Updating feature.xml files ---" - -RUNTIME_FEATURE="${SCRIPT_DIR}/../../com.sap.sse.feature.runtime/feature.xml" -if [ -f "${RUNTIME_FEATURE}" ]; then - echo " ${RUNTIME_FEATURE}" - sed -i -e 's/version="'"${OLD_VERSION}"'"/version="'"${VERSION}"'"/' "${RUNTIME_FEATURE}" -fi - -TARGET_BASE_FEATURE="${SCRIPT_DIR}/../../com.sap.sailing.targetplatform.base/features/target-base/feature.xml" -if [ -f "${TARGET_BASE_FEATURE}" ]; then - echo " ${TARGET_BASE_FEATURE}" - sed -i -e 's/version="'"${OLD_VERSION}"'"/version="'"${VERSION}"'"/' "${TARGET_BASE_FEATURE}" -fi - -# --------------------------------------------------------------------------- -# 4. Update apache-jsp and jetty-osgi-boot-jsp jars in target-base -# --------------------------------------------------------------------------- -echo "" -echo "--- Updating JSP bundles in target-base plugins ---" -TARGET_BASE_PLUGINS="${SCRIPT_DIR}/../../com.sap.sailing.targetplatform.base/plugins/target-base" - -echo " Removing old versions..." -rm -f "${TARGET_BASE_PLUGINS}/apache-jsp-${OLD_VERSION}.jar" -rm -f "${TARGET_BASE_PLUGINS}/apache-jsp-${OLD_VERSION}-sources.jar" -rm -f "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${OLD_VERSION}.jar" -rm -f "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${OLD_VERSION}-sources.jar" - -MAVEN_CENTRAL="https://repo1.maven.org/maven2" - -echo " Downloading new versions..." -wget -q -O "${TARGET_BASE_PLUGINS}/apache-jsp-${VERSION}.jar" \ - "${MAVEN_CENTRAL}/org/eclipse/jetty/apache-jsp/${VERSION}/apache-jsp-${VERSION}.jar" -wget -q -O "${TARGET_BASE_PLUGINS}/apache-jsp-${VERSION}-sources.jar" \ - "${MAVEN_CENTRAL}/org/eclipse/jetty/apache-jsp/${VERSION}/apache-jsp-${VERSION}-sources.jar" -wget -q -O "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${VERSION}.jar" \ - "${MAVEN_CENTRAL}/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/${VERSION}/jetty-osgi-boot-jsp-${VERSION}.jar" -wget -q -O "${TARGET_BASE_PLUGINS}/jetty-osgi-boot-jsp-${VERSION}-sources.jar" \ - "${MAVEN_CENTRAL}/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/${VERSION}/jetty-osgi-boot-jsp-${VERSION}-sources.jar" - -echo " Adding to git..." -git -C "${TARGET_BASE_PLUGINS}" add "*.jar" - -# --------------------------------------------------------------------------- -# Done -# --------------------------------------------------------------------------- -echo "" -echo "=== DONE ===" -echo "" -echo "Your target platform now references jetty-${VERSION}." -echo "Next steps:" -echo " 1. Rebuild the local base p2 repository: ./createLocalBaseP2repository.sh" -echo " 2. Upload it: ./uploadRepositoryToServer.sh" -echo " 3. Reload the target platform in your IDE" From 39da2f389c701ee2e2260f6f7c0bfbec8e32dbda Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 20 Mar 2026 10:13:08 +0100 Subject: [PATCH 5/9] reset .project files to before c17c183ed63ec10e957829f43b244eea32dc1dcc; this reverts undesired automated edits made by Cline --- java/.project | 9 -- java/com.sap.sailing.domain.common/.project | 11 --- .../.project | 11 --- .../com.sap.sailing.landscape.common/.project | 11 --- .../.project | 11 --- java/com.sap.sailing.landscape.test/.project | 11 --- java/com.sap.sailing.landscape.ui/.project | 83 ++++++++----------- java/com.sap.sailing.landscape/.project | 11 --- .../.project | 11 --- .../.project | 11 --- java/com.sap.sse.aicore.test/.project | 11 --- java/com.sap.sse.aicore/.project | 11 --- java/com.sap.sse.common/.project | 11 --- .../.project | 11 --- java/com.sap.sse.gwt/.project | 31 +++---- .../.project | 11 --- .../com.sap.sse.landscape.aws.common/.project | 11 --- .../.project | 11 --- java/com.sap.sse.landscape.aws.test/.project | 11 --- java/com.sap.sse.landscape.aws/.project | 11 --- java/com.sap.sse.landscape.common/.project | 11 --- java/com.sap.sse.landscape.test/.project | 11 --- java/com.sap.sse.landscape/.project | 11 --- .../.project | 11 --- .../.project | 11 --- java/com.sap.sse.mail/.project | 11 --- java/com.sap.sse.mongodb/.project | 11 --- java/com.sap.sse.security.common/.project | 11 --- java/com.sap.sse.shared.android/.project | 11 --- java/com.sap.sse.test/.project | 11 --- java/com.sap.sse/.project | 11 --- java/elemental2/.project | 11 --- java/org.hamcrest.core/.project | 11 --- java/org.json.simple/.project | 11 --- 34 files changed, 46 insertions(+), 418 deletions(-) diff --git a/java/.project b/java/.project index 7ef163eee64..2c17f2fa456 100644 --- a/java/.project +++ b/java/.project @@ -63,14 +63,5 @@ 1.0-name-matches-false-true-org\.openqa\..* - - 1773843368643 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - diff --git a/java/com.sap.sailing.domain.common/.project b/java/com.sap.sailing.domain.common/.project index f8d1b52e6cc..4e945dbebae 100755 --- a/java/com.sap.sailing.domain.common/.project +++ b/java/com.sap.sailing.domain.common/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368450 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.domain.shared.android/.project b/java/com.sap.sailing.domain.shared.android/.project index 08861ce0bfd..eba6e1dade9 100644 --- a/java/com.sap.sailing.domain.shared.android/.project +++ b/java/com.sap.sailing.domain.shared.android/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368460 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.landscape.common/.project b/java/com.sap.sailing.landscape.common/.project index df5b8cbfafb..1bc63554b88 100644 --- a/java/com.sap.sailing.landscape.common/.project +++ b/java/com.sap.sailing.landscape.common/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368470 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.landscape.gateway/.project b/java/com.sap.sailing.landscape.gateway/.project index 22ed729d5c4..e873d5b9696 100644 --- a/java/com.sap.sailing.landscape.gateway/.project +++ b/java/com.sap.sailing.landscape.gateway/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368475 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.landscape.test/.project b/java/com.sap.sailing.landscape.test/.project index 3c9e4c37f94..1f13eb0413e 100644 --- a/java/com.sap.sailing.landscape.test/.project +++ b/java/com.sap.sailing.landscape.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368481 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.landscape.ui/.project b/java/com.sap.sailing.landscape.ui/.project index 8579c76b039..c35b99b761f 100644 --- a/java/com.sap.sailing.landscape.ui/.project +++ b/java/com.sap.sailing.landscape.ui/.project @@ -1,50 +1,39 @@ - com.sap.sailing.landscape.ui - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - com.gwtplugins.gdt.eclipse.core.webAppProjectValidator - - - - - com.gwtplugins.gwt.eclipse.core.gwtProjectValidator - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - com.gwtplugins.gwt.eclipse.core.gwtNature - - - - 1773843368488 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - + com.sap.sailing.landscape.ui + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.gwtplugins.gdt.eclipse.core.webAppProjectValidator + + + + + com.gwtplugins.gwt.eclipse.core.gwtProjectValidator + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + com.gwtplugins.gwt.eclipse.core.gwtNature + diff --git a/java/com.sap.sailing.landscape/.project b/java/com.sap.sailing.landscape/.project index 1405388a056..ccb496f8ed3 100644 --- a/java/com.sap.sailing.landscape/.project +++ b/java/com.sap.sailing.landscape/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368465 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.routeconverterjava11extension/.project b/java/com.sap.sailing.routeconverterjava11extension/.project index 9a322b5d955..6fc2819bb00 100644 --- a/java/com.sap.sailing.routeconverterjava11extension/.project +++ b/java/com.sap.sailing.routeconverterjava11extension/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368494 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project index 7cbfe381f8e..0802e21577c 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368501 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.aicore.test/.project b/java/com.sap.sse.aicore.test/.project index 73f8c62cede..483027e80e6 100644 --- a/java/com.sap.sse.aicore.test/.project +++ b/java/com.sap.sse.aicore.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368516 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.aicore/.project b/java/com.sap.sse.aicore/.project index affecfea62c..ac0135628d0 100644 --- a/java/com.sap.sse.aicore/.project +++ b/java/com.sap.sse.aicore/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368511 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.common/.project b/java/com.sap.sse.common/.project index 755a090804b..c28bb7a5e5a 100644 --- a/java/com.sap.sse.common/.project +++ b/java/com.sap.sse.common/.project @@ -36,15 +36,4 @@ org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature - - - 1773843368520 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.datamining.annotations/.project b/java/com.sap.sse.datamining.annotations/.project index 9b70e07e467..58c1e5bd5f5 100644 --- a/java/com.sap.sse.datamining.annotations/.project +++ b/java/com.sap.sse.datamining.annotations/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368525 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.gwt/.project b/java/com.sap.sse.gwt/.project index 2c0355d5055..c975154713e 100644 --- a/java/com.sap.sse.gwt/.project +++ b/java/com.sap.sse.gwt/.project @@ -10,16 +10,16 @@ - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + com.gwtplugins.gdt.eclipse.core.webAppProjectValidator @@ -36,15 +36,4 @@ com.gwtplugins.gwt.eclipse.core.gwtNature com.gwtplugins.gwt.eclipse.core.gwtNature - - - 1773843368533 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.aws.common.test/.project b/java/com.sap.sse.landscape.aws.common.test/.project index b4c24e6e85a..c95cb0828ad 100644 --- a/java/com.sap.sse.landscape.aws.common.test/.project +++ b/java/com.sap.sse.landscape.aws.common.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368563 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.aws.common/.project b/java/com.sap.sse.landscape.aws.common/.project index 4db4406074c..eb6b5d0abc3 100644 --- a/java/com.sap.sse.landscape.aws.common/.project +++ b/java/com.sap.sse.landscape.aws.common/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368556 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.aws.persistence/.project b/java/com.sap.sse.landscape.aws.persistence/.project index 81fe4ad8f96..b1b0feca6ee 100644 --- a/java/com.sap.sse.landscape.aws.persistence/.project +++ b/java/com.sap.sse.landscape.aws.persistence/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368569 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.aws.test/.project b/java/com.sap.sse.landscape.aws.test/.project index 31c06d06b4b..dc09cd68bd6 100644 --- a/java/com.sap.sse.landscape.aws.test/.project +++ b/java/com.sap.sse.landscape.aws.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368575 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.aws/.project b/java/com.sap.sse.landscape.aws/.project index 38aa40c86db..1507dbc517a 100644 --- a/java/com.sap.sse.landscape.aws/.project +++ b/java/com.sap.sse.landscape.aws/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368551 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.common/.project b/java/com.sap.sse.landscape.common/.project index e7e81ce1b87..7853e6be409 100644 --- a/java/com.sap.sse.landscape.common/.project +++ b/java/com.sap.sse.landscape.common/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368580 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape.test/.project b/java/com.sap.sse.landscape.test/.project index af501a7fb77..f4a7c9f7eb6 100644 --- a/java/com.sap.sse.landscape.test/.project +++ b/java/com.sap.sse.landscape.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368586 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.landscape/.project b/java/com.sap.sse.landscape/.project index 58b170bf0c5..e3fb30b62d7 100644 --- a/java/com.sap.sse.landscape/.project +++ b/java/com.sap.sse.landscape/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368544 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.mail.replication.test/.project b/java/com.sap.sse.mail.replication.test/.project index 7ca00fa56eb..51fa2fe50fb 100644 --- a/java/com.sap.sse.mail.replication.test/.project +++ b/java/com.sap.sse.mail.replication.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368596 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.mail.replication.testsupport/.project b/java/com.sap.sse.mail.replication.testsupport/.project index aaa4c9eef85..1d1e9965612 100644 --- a/java/com.sap.sse.mail.replication.testsupport/.project +++ b/java/com.sap.sse.mail.replication.testsupport/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368600 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.mail/.project b/java/com.sap.sse.mail/.project index b7ff0b1ee02..a9824e60a43 100644 --- a/java/com.sap.sse.mail/.project +++ b/java/com.sap.sse.mail/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368591 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.mongodb/.project b/java/com.sap.sse.mongodb/.project index 2d83e8009ec..c39b3395c38 100644 --- a/java/com.sap.sse.mongodb/.project +++ b/java/com.sap.sse.mongodb/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368607 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.security.common/.project b/java/com.sap.sse.security.common/.project index 6b691a31eb2..470b6a0c0d2 100644 --- a/java/com.sap.sse.security.common/.project +++ b/java/com.sap.sse.security.common/.project @@ -36,15 +36,4 @@ org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature - - - 1773843368613 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.shared.android/.project b/java/com.sap.sse.shared.android/.project index bccc0c692b2..1ced6293522 100644 --- a/java/com.sap.sse.shared.android/.project +++ b/java/com.sap.sse.shared.android/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368619 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse.test/.project b/java/com.sap.sse.test/.project index 1b9a3becce6..fefd499bfc5 100644 --- a/java/com.sap.sse.test/.project +++ b/java/com.sap.sse.test/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368624 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/com.sap.sse/.project b/java/com.sap.sse/.project index 25768acb849..ae82bf33116 100644 --- a/java/com.sap.sse/.project +++ b/java/com.sap.sse/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368506 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/elemental2/.project b/java/elemental2/.project index 8db18f844d0..30e1f9a0d66 100644 --- a/java/elemental2/.project +++ b/java/elemental2/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368629 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/org.hamcrest.core/.project b/java/org.hamcrest.core/.project index e8d53e0135f..144281e1ae3 100644 --- a/java/org.hamcrest.core/.project +++ b/java/org.hamcrest.core/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368637 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/java/org.json.simple/.project b/java/org.json.simple/.project index 078eefc3fab..14f0b0e639d 100644 --- a/java/org.json.simple/.project +++ b/java/org.json.simple/.project @@ -25,15 +25,4 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature - - - 1773843368640 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - From 7d473f4404e6579ee5325a38792c2ee92da89dfe Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 20 Mar 2026 19:00:30 +0100 Subject: [PATCH 6/9] bug6222: fix for FixWindow's COG delta aggregation for out-of-order delivery; initial commit with a test case supposed to be failing but not failing yet --- .../impl/MongoSensorFixStoreImpl.java | 3 +- ...urseChangeBasedTrackApproximationTest.java | 65 ++++++++++++++++++- .../CourseChangeBasedTrackApproximation.java | 8 ++- 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java index d5df4a7a074..67ca0615752 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java @@ -132,7 +132,8 @@ public class MongoSensorFixStoreImpl extends MongoFixHandler implements MongoSen public void loadFixes(Consumer consumer, DeviceIdentifier device, TimePoint from, TimePoint to, boolean inclusive, BooleanSupplier isPreemptiveStopped, Consumer progressConsumer) throws NoCorrespondingServiceRegisteredException, TransformationException { - loadFixes(consumer, device, from, to, inclusive, isPreemptiveStopped, progressConsumer, true, false); + loadFixes(consumer, device, from, to, inclusive, isPreemptiveStopped, progressConsumer, + /* ascending */ true, /* only one result */ false); } private boolean loadFixes(Consumer consumer, DeviceIdentifier device, TimePoint from, diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java index fa9521ad0d0..85ec7f09eed 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java @@ -4,6 +4,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.NoSuchElementException; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -37,7 +39,68 @@ public class CourseChangeBasedTrackApproximationTest { final CompetitorWithBoat competitor = TrackBasedTest.createCompetitorWithBoat("Someone"); track = new DynamicGPSFixMovingTrackImpl(competitor, /* millisecondsOverWhichToAverage */5000, /* lossless compaction */true); - approximation = new CourseChangeBasedTrackApproximation(track, competitor.getBoat().getBoatClass(), /* logFixes */ false); + approximation = new CourseChangeBasedTrackApproximation(track, competitor.getBoat().getBoatClass(), /* logFixes */ true); + } + + /** + * Whitebox test for {@link FixWindow} and its queue: add a few fixes to the queue, then add a few significantly + * newer fixes to the queue that cause the older fixes to get added to the {@ilnk FixWindow} one after the other. + * Then, add a fix immediately before the last that causes a direction change that exceeds the threshold and thus + * produces a maneuver candidate letting only the newest fix in FixWindow. Then, add another fix to the queue, + * causing the queue's oldest fix to get moved to the {@link FixWindow}, unless when trimming the + * {@link FixWindow} the queue would have been trimmed with it. If not, a {@link NoSuchElementException} + * would be thrown. + */ + @Test + public void testInsertWithEqualTimePoints() { + final GPSFixMoving fix1 = fix(10000l, 49, 8, 5, 2); + final GPSFixMoving fix2 = travel(fix1, 1000l, 5, 4); + final GPSFixMoving fix3 = travel(fix2, 1000l, 5, 6); + final double lastCOG = 16; + final GPSFixMoving fix4 = travel(fix3, 1000l, 5, lastCOG); + final GPSFixMoving fix5 = travel(fix4, 1000l, 5, lastCOG); + track.add(fix1); + track.add(fix2); + track.add(fix3); + track.add(fix4); + track.add(fix5); + // now add five newer fixes, forcing the five older fixes to advance into the FixWindow: + final GPSFixMoving fix6 = travel(fix1, track.getMillisecondsOverWhichToAverageSpeed()+1, 5, lastCOG); + final GPSFixMoving fix7 = travel(fix6, 1000l, 5, lastCOG); + final GPSFixMoving fix8 = travel(fix7, 1000l, 5, lastCOG); + final GPSFixMoving fix9 = travel(fix8, 1000l, 5, lastCOG); + final GPSFixMoving fix10 = travel(fix9, 1000l, 5, lastCOG); + track.add(fix6); + track.add(fix7); + track.add(fix8); + track.add(fix9); + track.add(fix10); + // we expect no maneuver to have been recognized yet + Iterable candidates = approximation.approximate(fix1.getTimePoint(), fix5.getTimePoint()); + assertTrue(Util.isEmpty(candidates)); + // now add a fix to the queue that is later than the FixWindow's start (assumed to be at fix1) + // and before the FixWindow's end (assumed to be fix5 at the moment); the fix won't be added until + // a fix that is at least track.getMillisecondsOverWhichToAverageSpeed() newer is added to the queue: + final GPSFixMoving fix3_5 = travel(fix3, 500l, 5, 7); + track.add(fix3_5); + // now an even earlier fix that, when added to FixWindow, will trigger a maneuver candidate emission + // because COG 0deg to COG 16deg is more than the 15deg threshold + final GPSFixMoving fix2_5 = travel(fix2, 500l, 5, 320); // FIXME bug6222: this leads to the maneuver candidate being recognized at the beginning of the window, turning to port + track.add(fix2_5); + // force fix2_5 to get moved to FixWindow: + final GPSFixMoving fix11 = travel(fix10, 1000l, 5, lastCOG); + track.add(fix11); // expected to trigger moving oldest queued fix2_5 to get added to the FixWindow + // we expect one maneuver candidate to have been recognized now + Iterable candidates2 = approximation.approximate(fix1.getTimePoint(), fix5.getTimePoint()); + assertEquals(1, Util.size(candidates2)); +// assertSame(fix5, candidates2.iterator().next()); // TODO bug6222: fixes are replaced upon track insertion; use equality + // and this should have spanned fix1..fix5 with the greatest course change on fix5, so that gets + // emitted as the maneuver candidate, and all fixes from FixWindow's head up to and including fix5 + // are expected to get removed from FixWindow + // Now add an ever newer fix to the queue, forcing fix3_5 to get added if it hasn't been cleaned up + // by the FixWindow trimming: + final GPSFixMoving fix12 = travel(fix11, 4000l, 5, 2); + track.add(fix12); } @Test diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java index d797a6d1dfe..3ced3cce002 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java @@ -173,7 +173,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra *

* * This method queues the new fix and only adds it to the window when it is "old enough" to not be influenced - * anymore by newer fixes that may still arrive. The influence is measured by half the + * anymore by newer fixes that may still arrive. The influence is measured by the * {@link GPSFixTrack#getMillisecondsOverWhichToAverageSpeed()} interval. This way, approximation results * are more stable but have a delay with regards to the newest fixes known by the track.

* @@ -280,6 +280,12 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra courseChangeBetweenFixesInWindow.add(new ScalableDouble(courseChangeBetweenPreviousAndNextInDegrees)); } else { courseChangeBetweenFixesInWindow.add(insertPosition-1, new ScalableDouble(courseChangeBetweenPreviousAndNextInDegrees)); + if (courseChangeBetweenFixesInWindow.size() > insertPosition) { // the node just added isn't the last one; update the next node! + courseChangeBetweenFixesInWindow.remove(insertPosition); + final SpeedWithBearing nextNextSpeed = this.speedForFixesInWindow.get(insertPosition+1); + final double courseChangeBetweenNextAndNextNextInDegrees = nextSpeed.getBearing().getDifferenceTo(nextNextSpeed.getBearing()).getDegrees(); + courseChangeBetweenFixesInWindow.add(insertPosition, new ScalableDouble(courseChangeBetweenNextAndNextNextInDegrees)); + } } if (windowDuration.compareTo(getMaximumWindowLength()) > 0) { result = tryToExtractManeuverCandidate(); From 622f172b7c1199e87239e41b947cf09d9d0e4012 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 21 Mar 2026 23:30:20 +0100 Subject: [PATCH 7/9] bug6222: renamed test case method --- .../domain/test/CourseChangeBasedTrackApproximationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java index 85ec7f09eed..cd0f91ba26e 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java @@ -52,7 +52,7 @@ public class CourseChangeBasedTrackApproximationTest { * would be thrown. */ @Test - public void testInsertWithEqualTimePoints() { + public void testForcingFixOlderThanFixWindowIntoQueue() { final GPSFixMoving fix1 = fix(10000l, 49, 8, 5, 2); final GPSFixMoving fix2 = travel(fix1, 1000l, 5, 4); final GPSFixMoving fix3 = travel(fix2, 1000l, 5, 6); From aeb8a565618770a31aeeafb3adb79fb674de8bfd Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sun, 22 Mar 2026 23:12:51 +0100 Subject: [PATCH 8/9] bug6222: finally constructed a failing test case --- ...urseChangeBasedTrackApproximationTest.java | 54 +++++++++---------- .../CourseChangeBasedTrackApproximation.java | 10 +++- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java index cd0f91ba26e..516ff257b1e 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseChangeBasedTrackApproximationTest.java @@ -39,12 +39,12 @@ public class CourseChangeBasedTrackApproximationTest { final CompetitorWithBoat competitor = TrackBasedTest.createCompetitorWithBoat("Someone"); track = new DynamicGPSFixMovingTrackImpl(competitor, /* millisecondsOverWhichToAverage */5000, /* lossless compaction */true); - approximation = new CourseChangeBasedTrackApproximation(track, competitor.getBoat().getBoatClass(), /* logFixes */ true); + approximation = new CourseChangeBasedTrackApproximation(track, competitor.getBoat().getBoatClass(), /* logFixes */ false); } /** * Whitebox test for {@link FixWindow} and its queue: add a few fixes to the queue, then add a few significantly - * newer fixes to the queue that cause the older fixes to get added to the {@ilnk FixWindow} one after the other. + * newer fixes to the queue that cause the older fixes to get added to the {@link FixWindow} one after the other. * Then, add a fix immediately before the last that causes a direction change that exceeds the threshold and thus * produces a maneuver candidate letting only the newest fix in FixWindow. Then, add another fix to the queue, * causing the queue's oldest fix to get moved to the {@link FixWindow}, unless when trimming the @@ -53,54 +53,48 @@ public class CourseChangeBasedTrackApproximationTest { */ @Test public void testForcingFixOlderThanFixWindowIntoQueue() { - final GPSFixMoving fix1 = fix(10000l, 49, 8, 5, 2); - final GPSFixMoving fix2 = travel(fix1, 1000l, 5, 4); - final GPSFixMoving fix3 = travel(fix2, 1000l, 5, 6); - final double lastCOG = 16; - final GPSFixMoving fix4 = travel(fix3, 1000l, 5, lastCOG); - final GPSFixMoving fix5 = travel(fix4, 1000l, 5, lastCOG); + final GPSFixMoving fix1 = fix(10000l, 49, 8, 5, 4); + final double lastCOG = 30; + final GPSFixMoving fix2 = travel(fix1, 4000l, 5, lastCOG); + final GPSFixMoving fix3 = travel(fix2, 4000l, 5, lastCOG); track.add(fix1); track.add(fix2); track.add(fix3); - track.add(fix4); - track.add(fix5); // now add five newer fixes, forcing the five older fixes to advance into the FixWindow: final GPSFixMoving fix6 = travel(fix1, track.getMillisecondsOverWhichToAverageSpeed()+1, 5, lastCOG); - final GPSFixMoving fix7 = travel(fix6, 1000l, 5, lastCOG); - final GPSFixMoving fix8 = travel(fix7, 1000l, 5, lastCOG); - final GPSFixMoving fix9 = travel(fix8, 1000l, 5, lastCOG); - final GPSFixMoving fix10 = travel(fix9, 1000l, 5, lastCOG); + final GPSFixMoving fix7 = travel(fix6, 4000l, 5, lastCOG); + final GPSFixMoving fix8 = travel(fix7, 4000l, 5, lastCOG); track.add(fix6); track.add(fix7); track.add(fix8); - track.add(fix9); - track.add(fix10); // we expect no maneuver to have been recognized yet - Iterable candidates = approximation.approximate(fix1.getTimePoint(), fix5.getTimePoint()); + Iterable candidates = approximation.approximate(fix1.getTimePoint(), fix2.getTimePoint()); assertTrue(Util.isEmpty(candidates)); + // now add a fix that, when added to FixWindow, will trigger a maneuver candidate emission + // because COG 0deg to COG 16deg is more than the 15deg threshold + // FIXME bug6222: the fix recognized as "maneuver fix" (the one with the greatest course change) must be after the early fix that remains in the queue! + // FIXME bug6222: This is only possible if the greatest change is not at the fix added late from the queue but from a later FixWindow fix + final GPSFixMoving fix1_5 = travel(fix1, 500l, 5, 8); + track.add(fix1_5); // now add a fix to the queue that is later than the FixWindow's start (assumed to be at fix1) // and before the FixWindow's end (assumed to be fix5 at the moment); the fix won't be added until // a fix that is at least track.getMillisecondsOverWhichToAverageSpeed() newer is added to the queue: - final GPSFixMoving fix3_5 = travel(fix3, 500l, 5, 7); - track.add(fix3_5); - // now an even earlier fix that, when added to FixWindow, will trigger a maneuver candidate emission - // because COG 0deg to COG 16deg is more than the 15deg threshold - final GPSFixMoving fix2_5 = travel(fix2, 500l, 5, 320); // FIXME bug6222: this leads to the maneuver candidate being recognized at the beginning of the window, turning to port - track.add(fix2_5); - // force fix2_5 to get moved to FixWindow: - final GPSFixMoving fix11 = travel(fix10, 1000l, 5, lastCOG); - track.add(fix11); // expected to trigger moving oldest queued fix2_5 to get added to the FixWindow + final GPSFixMoving fix1_75 = travel(fix1_5, 250l, 5, 9); + track.add(fix1_75); + // force fix4_5 to get moved to FixWindow: + final GPSFixMoving fix9 = travel(fix8, 1000l, 5, lastCOG); + track.add(fix9); // expected to trigger moving oldest queued fix2_5 to get added to the FixWindow // we expect one maneuver candidate to have been recognized now - Iterable candidates2 = approximation.approximate(fix1.getTimePoint(), fix5.getTimePoint()); + Iterable candidates2 = approximation.approximate(fix1.getTimePoint(), fix3.getTimePoint()); assertEquals(1, Util.size(candidates2)); -// assertSame(fix5, candidates2.iterator().next()); // TODO bug6222: fixes are replaced upon track insertion; use equality + assertEquals(fix2.getTimePoint(), candidates2.iterator().next().getTimePoint()); // and this should have spanned fix1..fix5 with the greatest course change on fix5, so that gets // emitted as the maneuver candidate, and all fixes from FixWindow's head up to and including fix5 // are expected to get removed from FixWindow // Now add an ever newer fix to the queue, forcing fix3_5 to get added if it hasn't been cleaned up // by the FixWindow trimming: - final GPSFixMoving fix12 = travel(fix11, 4000l, 5, 2); - track.add(fix12); + final GPSFixMoving fix10 = travel(fix9, 4000l, 5, 2); + track.add(fix10); } @Test diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java index 3ced3cce002..7d180a81c06 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java @@ -366,6 +366,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra */ private void removeFirst(int howManyElementsToRemove) { assert !window.isEmpty(); + final int oldSize = window.size(); for (int i=0; i= maximumCourseChangeToPort ? 1 : -1); if (absoluteCourseChangeInDegrees > maximumAbsoluteCourseChangeInCorrectDirection) { maximumAbsoluteCourseChangeInCorrectDirection = absoluteCourseChangeInDegrees; - indexOfMaximumAbsoluteCourseChangeInCorrectDirection = i; + indexOfMaximumAbsoluteCourseChangeInCorrectDirection = i+1; // the course change is to the next fix in window } i++; } @@ -420,6 +425,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra } else { result = null; } + assert indexOfMaximumAbsoluteCourseChangeInCorrectDirection < window.size(); return result == null ? null : new Pair<>(result, indexOfMaximumAbsoluteCourseChangeInCorrectDirection); } From bbc8d9d6ed064c0491536f1188fb0b6971e460e4 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sun, 22 Mar 2026 23:20:14 +0100 Subject: [PATCH 9/9] bug6222: this has the fix, trimming the queue of course approximator after removing from window --- .../impl/CourseChangeBasedTrackApproximation.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java index 7d180a81c06..8c1d9c0f65b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java @@ -371,6 +371,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra window.removeFirst(); speedForFixesInWindow.removeFirst(); } + trimQueue(); windowDuration = window.isEmpty() ? Duration.NULL : window.getFirst().getTimePoint().until(window.getLast().getTimePoint()); // adjust totalCourseChangeFromBeginningOfWindow by subtracting the first course change from all others // and shifting all by one position to the "left" @@ -383,6 +384,20 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra } } + /** + * After having {@link #removeFirst(int) removed} items from the {@link #window}, the {@link #queueOfNewFixes} + * may now contain fixes older than the oldest element in {@link #window}. This would violate our assumption that + * only fixes at or after the start of the window are added, so we need to "trim" the queue accordingly. + */ + private void trimQueue() { + if (!window.isEmpty()) { + final TimePoint timePointOfOldestFixInWindow = window.getFirst().getTimePoint(); + while (!queueOfNewFixes.isEmpty() && queueOfNewFixes.peekFirst().getTimePoint().before(timePointOfOldestFixInWindow)) { + queueOfNewFixes.removeFirst(); + } + } + } + /** * If the {@link #absoluteMaximumTotalCourseChangeFromBeginningOfWindowInDegrees} is greater than or equal to * the {@link #maneuverAngleInDegreesThreshold}, the fix representing the maneuver candidate best is returned.