Bug 572026 - Support Jetty 9 and 10

Make USS-SDK work with Jetty 9 and 10.  Note that Jetty 10
made some bundle changes

- Pull in javax.servlet APIs through import-package
- Fix uses of sendError() to setStatus() to preserve response headers
- Remove deprecated Jetty logger; tests now show Jetty output,
  which is actually useful

- added new .target for eclipse-latest, orbit-latest, and jetty 10
  for use as an Eclipse target platform for development
- added new profiles to build and test for other named Eclipse releases

    mvn -Declipse.target=neon verify

  or use the following to test with Jetty 10

    mvn -Declipse.target=latest verify

Change-Id: I385b9c883bc4615e372a08238a2a158010368825
Signed-off-by: Brian de Alwis <bsd@acm.org>
diff --git a/org.eclipse.userstorage.releng/org.eclipse.userstorage.releng.latest.target b/org.eclipse.userstorage.releng/org.eclipse.userstorage.releng.latest.target
new file mode 100644
index 0000000..05449cb
--- /dev/null
+++ b/org.eclipse.userstorage.releng/org.eclipse.userstorage.releng.latest.target
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?>
+<target name="Generated from User Storage SDK" sequenceNumber="1">
+  <locations>
+	  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="false" type="InstallableUnit">
+		  <repository location="http://download.eclipse.org/releases/latest"/>
+		  <unit id="org.eclipse.sdk.feature.group" version="4.19.0.v20210303-1800"/>
+	  </location>
+	  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="false" type="InstallableUnit">
+		  <repository location="https://download.eclipse.org/eclipse/jetty/10.0.2/"/>
+		  <unit id="org.eclipse.jetty.server" version="10.0.2"/>
+		  <unit id="slf4j.api" version="2.0.0.alpha1"/>
+	  </location>
+	  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="false" type="InstallableUnit">
+		  <repository location="http://download.eclipse.org/tools/orbit/downloads/latest-R"/>
+		  <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+		  <unit id="org.hamcrest.core" version="1.1.0.v20090501071000"/>
+		  <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
+		  <unit id="org.apache.commons.logging" version="1.1.1.v201101211721"/>
+	  </location>
+  </locations>
+</target>
\ No newline at end of file
diff --git a/org.eclipse.userstorage.tests/META-INF/MANIFEST.MF b/org.eclipse.userstorage.tests/META-INF/MANIFEST.MF
index 680e099..6255c47 100644
--- a/org.eclipse.userstorage.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.userstorage.tests/META-INF/MANIFEST.MF
@@ -10,14 +10,15 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.0.0,4.0.0)",
  org.apache.httpcomponents.httpclient;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
  org.apache.httpcomponents.httpcore;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.jetty.server;bundle-version="[9.0.0,10.1.0)";visibility:=reexport,
+ org.eclipse.jetty.servlet;bundle-version="[9.0.0,10.1.0)";visibility:=reexport,
+ org.eclipse.jetty.http;bundle-version="[9.0.0,10.1.0)";visibility:=reexport,
+ org.eclipse.jetty.io;bundle-version="[9.0.0,10.1.0)";visibility:=reexport,
+ org.eclipse.jetty.util;bundle-version="[9.0.0,10.1.0)";visibility:=reexport,
  org.eclipse.userstorage;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
- org.eclipse.jetty.server;bundle-version="[9.0.0,10.0.0)";visibility:=reexport,
- org.eclipse.jetty.servlet;bundle-version="[9.0.0,10.0.0)";visibility:=reexport,
- org.eclipse.jetty.http;bundle-version="[9.0.0,10.0.0)";visibility:=reexport,
- org.eclipse.jetty.io;bundle-version="[9.0.0,10.0.0)";visibility:=reexport,
- org.eclipse.jetty.util;bundle-version="[9.0.0,10.0.0)";visibility:=reexport,
- javax.servlet;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
  org.junit;bundle-version="[4.11.0,5.0.0)";visibility:=reexport
 Export-Package: org.eclipse.userstorage.tests;version="1.0.0";x-internal:=true,
  org.eclipse.userstorage.tests.util;version="1.0.0";x-internal:=true
 Eclipse-RegisterBuddy: org.eclipse.userstorage
+Import-Package: javax.servlet;version="[3.1.0,4.0.0]",
+ javax.servlet.http;version="[3.1.0,4.0.0]"
diff --git a/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/ServerFixture.java b/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/ServerFixture.java
index 470c9ad..4ec332b 100644
--- a/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/ServerFixture.java
+++ b/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/ServerFixture.java
@@ -19,13 +19,10 @@
 import org.eclipse.userstorage.internal.util.IOUtil;
 import org.eclipse.userstorage.internal.util.StringUtil;
 import org.eclipse.userstorage.spi.ISettings;
-import org.eclipse.userstorage.tests.util.USSServer.NOOPLogger;
 import org.eclipse.userstorage.tests.util.USSServer.User;
 import org.eclipse.userstorage.util.NotFoundException;
 import org.eclipse.userstorage.util.Settings.MemorySettings;
 
-import org.eclipse.jetty.util.log.Log;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.UUID;
@@ -216,7 +213,6 @@
 
   protected void configureServerLogging()
   {
-    Log.setLog(new NOOPLogger());
   }
 
   protected boolean manageBundleLifecycle()
diff --git a/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/USSServer.java b/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/USSServer.java
index 522634a..cc6c369 100644
--- a/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/USSServer.java
+++ b/org.eclipse.userstorage.tests/src/org/eclipse/userstorage/tests/util/USSServer.java
@@ -22,8 +22,6 @@
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.eclipse.jetty.util.log.Log;
-import org.eclipse.jetty.util.log.Logger;
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
@@ -349,7 +347,7 @@
       if (StringUtil.isEmpty(ifMatch) || !ifMatch.equals(etag))
       {
         response.setHeader("ETag", "\"" + etag + "\"");
-        response.sendError(HttpServletResponse.SC_CONFLICT);
+        response.setStatus(HttpServletResponse.SC_CONFLICT);
         return;
       }
     }
@@ -803,94 +801,8 @@
     }
   }
 
-  /**
-   * @author Eike Stepper
-   */
-  public static class NOOPLogger implements Logger
-  {
-    @Override
-    public String getName()
-    {
-      return "noop";
-    }
-
-    @Override
-    public void warn(String msg, Object... args)
-    {
-    }
-
-    @Override
-    public void warn(Throwable thrown)
-    {
-    }
-
-    @Override
-    public void warn(String msg, Throwable thrown)
-    {
-    }
-
-    @Override
-    public void info(String msg, Object... args)
-    {
-    }
-
-    @Override
-    public void info(Throwable thrown)
-    {
-    }
-
-    @Override
-    public void info(String msg, Throwable thrown)
-    {
-    }
-
-    @Override
-    public boolean isDebugEnabled()
-    {
-      return false;
-    }
-
-    @Override
-    public void setDebugEnabled(boolean enabled)
-    {
-    }
-
-    @Override
-    public void debug(String msg, Object... args)
-    {
-    }
-
-    @Override
-    public void debug(Throwable thrown)
-    {
-    }
-
-    @Override
-    public void debug(String msg, Throwable thrown)
-    {
-    }
-
-    @Override
-    public void debug(String msg, long value)
-    {
-    }
-
-    @Override
-    public Logger getLogger(String name)
-    {
-      return this;
-    }
-
-    @Override
-    public void ignore(Throwable ignored)
-    {
-    }
-  }
-
   public static void main(String[] args) throws Exception
   {
-    Log.setLog(new NOOPLogger());
-
     USSServer server = new USSServer(8080, new File(System.getProperty("java.io.tmpdir"), "uss-server"));
     server.addUser(FixedCredentialsProvider.DEFAULT_CREDENTIALS);
 
diff --git a/pom.xml b/pom.xml
index db778c3..ee14874 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <tycho.scmUrl>scm:git:https://git.eclipse.org/r/p/usssdk/org.eclipse.usssdk.git</tycho.scmUrl>
-    <tycho-version>1.6.0</tycho-version>
+    <tycho-version>2.2.0</tycho-version>
     <jarsigner-version>1.3.1</jarsigner-version>
 
     <!-- OS-specific JVM flags, empty for the default case but redefined below -->
@@ -89,6 +89,7 @@
         <artifactId>tycho-surefire-plugin</artifactId>
         <configuration>
           <useUIHarness>false</useUIHarness>
+          <trimStackTrace>false</trimStackTrace>
           <appArgLine>
             -consoleLog
             -eclipse.keyring /dev/null
@@ -148,22 +149,6 @@
         </plugin>
         <plugin>
           <groupId>org.eclipse.tycho</groupId>
-          <artifactId>target-platform-configuration</artifactId>
-          <version>${tycho-version}</version>
-          <configuration>
-            <target>
-              <artifact>
-                <groupId>org.eclipse.userstorage</groupId>
-                <artifactId>org.eclipse.userstorage.releng</artifactId>
-                <version>1.0.0-SNAPSHOT</version>
-              </artifact>
-            </target>
-            <!--executionEnvironmentDefault>JavaSE-${javaVersion}</executionEnvironmentDefault-->
-            <includePackedArtifacts>true</includePackedArtifacts>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.eclipse.tycho</groupId>
           <artifactId>tycho-surefire-plugin</artifactId>
           <version>${tycho-version}</version>
         </plugin>
@@ -301,6 +286,99 @@
       </build>
     </profile>
 
+    <profile>
+      <id>eclipse-target-4.5</id>
+      <activation>
+        <property>
+          <name>!eclipse.target</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.eclipse.tycho</groupId>
+            <artifactId>target-platform-configuration</artifactId>
+            <version>${tycho-version}</version>
+            <configuration>
+              <target>
+                <artifact>
+                  <groupId>org.eclipse.userstorage</groupId>
+                  <artifactId>org.eclipse.userstorage.releng</artifactId>
+                  <version>1.0.0-SNAPSHOT</version>
+                </artifact>
+              </target>
+              <!--executionEnvironmentDefault>JavaSE-${javaVersion}</executionEnvironmentDefault-->
+              <includePackedArtifacts>true</includePackedArtifacts>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+    <profile>
+      <!-- this target should only be used for testing purposes -->
+      <id>target-eclipse-release</id>
+      <activation>
+        <property>
+          <name>eclipse.target</name>
+        </property>
+      </activation>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>org.eclipse.tycho</groupId>
+              <artifactId>tycho-compiler-plugin</artifactId>
+              <version>${tycho-version}</version>
+              <configuration>
+		<!--
+                  tycho-compiler-plugin's useProjectSettings
+		  defaults to true, such that it will use the JDT
+                  compiler source and target settings.  These are
+                  currently set to JavaSE 1.6.  This setting causes
+                  issues for Eclipse Neon (Platform 4.6) or later
+                  as they target JavaSE 1.8 and so their .class files
+                  result in version errors.  Fix this problem by
+                  forcing a later target.
+                -->
+                <target>11</target>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+      </build>
+      <repositories>
+        <repository>
+          <id>eclipse-named</id>
+          <layout>p2</layout>
+          <url>http://download.eclipse.org/releases/${eclipse.target}</url>
+        </repository>
+        <repository>
+          <id>orbit-latest</id>
+          <layout>p2</layout>
+          <url>http://download.eclipse.org/tools/orbit/downloads/latest-R</url>
+        </repository>
+      </repositories>
+    </profile>
+
+    <profile>
+      <!-- this target should only be used for testing purposes -->
+      <id>eclipse-target-latest</id>
+      <activation>
+        <property>
+          <name>eclipse.target</name>
+          <value>latest</value>
+        </property>
+      </activation>
+      <repositories>
+        <repository>
+          <id>eclipse-jetty-10</id>
+          <layout>p2</layout>
+          <url>https://download.eclipse.org/eclipse/jetty/10.0.2/</url>
+        </repository>
+      </repositories>
+    </profile>
+
   </profiles>
 
 </project>