Address reviews on jakarta migration.

Fix JettyServerTest, init package, and some java docs.
Make scope extraction more flexible.
Bumped Kustvakt version to 0.72-SNAPSHOT
Updated changes file

Change-Id: I9ba8620e244106b706e95d82dc2e3aeaceb37ae5
diff --git a/full/src/main/java/de/ids_mannheim/korap/init/Initializator.java b/full/src/main/java/de/ids_mannheim/korap/init/Initializator.java
new file mode 100644
index 0000000..e908737
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/init/Initializator.java
@@ -0,0 +1,68 @@
+package de.ids_mannheim.korap.init;
+
+import java.io.IOException;
+import java.util.EnumSet;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import de.ids_mannheim.korap.annotation.FreeResourceParser;
+import de.ids_mannheim.korap.config.FullConfiguration;
+import de.ids_mannheim.korap.config.NamedVCLoader;
+import de.ids_mannheim.korap.constant.OAuth2Scope;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.oauth2.dao.AccessScopeDao;
+import de.ids_mannheim.korap.oauth2.service.OAuth2InitClientService;
+import de.ids_mannheim.korap.util.QueryException;
+
+/**
+ * Initializes values in the database from kustvakt configuration and
+ * performs named VC caching.
+ * 
+ * @author margaretha
+ *
+ */
+public class Initializator {
+
+    @Autowired
+    private AccessScopeDao accessScopeDao;
+    @Autowired
+    private NamedVCLoader vcLoader;
+    @Autowired
+    private FreeResourceParser resourceParser;
+    @Autowired
+    private FullConfiguration config;
+    @Autowired
+    private OAuth2InitClientService clientService;
+
+    public Initializator () {}
+
+    public void init () throws IOException, QueryException, KustvaktException {
+        setInitialAccessScope();
+        resourceParser.run();
+
+        if (config.createInitialSuperClient()) {
+            clientService.createInitialSuperClient(
+                    OAuth2InitClientService.OUTPUT_FILENAME);
+        }
+
+        Thread t = new Thread(vcLoader);
+        t.start();
+    }
+
+    public void initTest () throws IOException, KustvaktException {
+        setInitialAccessScope();
+        if (config.createInitialSuperClient()) {
+            clientService.createInitialTestSuperClient();
+        }
+    }
+
+    public void initResourceTest () throws IOException, KustvaktException {
+        setInitialAccessScope();
+        resourceParser.run();
+    }
+
+    private void setInitialAccessScope () {
+        EnumSet<OAuth2Scope> scopes = EnumSet.allOf(OAuth2Scope.class);
+        accessScopeDao.storeAccessScopes(scopes);
+    }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
index 06960bb..19cf2e1 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
@@ -160,7 +160,7 @@
      * @param username
      * @param clientId
      * @param redirectUri
-     * @param scopeSet
+     * @param scope
      * @param code
      * @param authenticationTime
      *            user authentication time
@@ -208,9 +208,6 @@
      * 
      * @param client
      *            an OAuth2Client
-     * @param hasRedirectUri
-     *            true if request contains redirect_uri, false
-     *            otherwise
      * @param redirectUri
      *            the redirect_uri value
      * @return a client's redirect URI
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
index 56f0115..f8430aa 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
@@ -78,7 +78,7 @@
     public Set<AccessScope> convertToAccessScope (String scopes)
             throws KustvaktException {
 
-        String[] scopeArray = scopes.split(" ");
+        String[] scopeArray = scopes.split("\\s+");
         List<AccessScope> definedScopes = accessScopeDao.retrieveAccessScopes();
         Set<AccessScope> requestedScopes =
                 new HashSet<AccessScope>(scopeArray.length);
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
index 40ef907..70c9a0b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
@@ -449,6 +449,8 @@
      *            a user id
      * @param authenticationTime
      *            the user authentication time
+     * @param client
+     *            an OAuth2Client
      * @return an {@link OAuthResponse}
      * @throws OAuthSystemException
      * @throws KustvaktException
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
index 0686a89..a74d241 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
@@ -40,6 +40,7 @@
 import de.ids_mannheim.korap.web.filter.BlockingFilter;
 import de.ids_mannheim.korap.web.utils.ResourceFilters;
 import jakarta.servlet.http.HttpServletRequest;
+import jakarta.validation.constraints.NotEmpty;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.FormParam;
 import jakarta.ws.rs.GET;
@@ -261,7 +262,8 @@
     @ResourceFilters({APIVersionFilter.class})
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     public Response requestAccessToken (@Context HttpServletRequest request,
-            @FormParam("client_id") String clientId,
+            @NotEmpty @FormParam("grant_type") String grantType,
+            @NotEmpty @FormParam("client_id") String clientId,
             @FormParam("client_secret") String clientSecret,
             MultivaluedMap<String, String> form) {