diff --git a/quartz-manager-parent/quartz-manager-starter-api/pom.xml b/quartz-manager-parent/quartz-manager-starter-api/pom.xml
index 1156d07..d30e3b1 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/pom.xml
+++ b/quartz-manager-parent/quartz-manager-starter-api/pom.xml
@@ -137,16 +137,16 @@
snakeyaml
-
+
- io.springfox
- springfox-swagger2
- ${springfox.version}
+ org.springdoc
+ springdoc-openapi-ui
+ 1.5.12
- io.springfox
- springfox-swagger-ui
- ${springfox.version}
+ io.swagger.core.v3
+ swagger-annotations
+ 2.1.11
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/OpenApiConfig.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/OpenApiConfig.java
new file mode 100644
index 0000000..387aa8e
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/OpenApiConfig.java
@@ -0,0 +1,36 @@
+package it.fabioformosa.quartzmanager.configuration;
+
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class OpenApiConfig {
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+ return new OpenAPI().info(apiInfo());
+ }
+
+ private Info apiInfo() {
+ return new Info()
+ .title("QUARTZ MANAGER API")
+ .description("Quartz Manager - REST API")
+ .version("1.0.0")
+ .license(new License()
+ .name("Apache License 2.0")
+ .url("https://github.com/fabioformosa/quartz-manager/blob/master/LICENSE"));
+ }
+
+// private SecurityContext securityContext() {
+// return SecurityContext.builder().forPaths(PathSelectors.any()).build();
+// }
+
+// @Override
+// protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+// registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+// registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+// }
+}
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
index dba69cb..8d5cb21 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
@@ -1,18 +1,26 @@
package it.fabioformosa.quartzmanager.controllers;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam;
import it.fabioformosa.quartzmanager.dto.SchedulerDTO;
import it.fabioformosa.quartzmanager.dto.TriggerStatus;
import it.fabioformosa.quartzmanager.enums.SchedulerStates;
import it.fabioformosa.quartzmanager.services.SchedulerService;
-import org.quartz.*;
+import org.quartz.SchedulerException;
+import org.quartz.SimpleTrigger;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.ConversionService;
import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Collections;
@@ -26,7 +34,6 @@ import java.util.Map;
*/
@RestController
@RequestMapping("/quartz-manager/scheduler")
-@Api(value = "scheduler")
public class SchedulerController {
private final Logger log = LoggerFactory.getLogger(SchedulerController.class);
@@ -41,7 +48,14 @@ public class SchedulerController {
@Resource
private ConversionService conversionService;
+ //TODO replace this a list of trigger
@GetMapping("/config")
+ @Operation(summary = "Get the config of the trigger")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Return the trigger config",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = SchedulerConfigParam.class)) })
+ })
public SchedulerConfigParam getConfig() throws SchedulerException {
log.debug("SCHEDULER - GET CONFIG params");
SchedulerConfigParam schedulerConfigParam = schedulerService.getOneSimpleTrigger()
@@ -58,13 +72,26 @@ public class SchedulerController {
}
@GetMapping
+ @Operation(summary = "Get the scheduler details")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Return the scheduler config",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = SchedulerDTO.class)) })
+ })
public SchedulerDTO getScheduler() {
log.debug("SCHEDULER - GET Scheduler...");
SchedulerDTO schedulerDTO = conversionService.convert(schedulerService.getScheduler(), SchedulerDTO.class);
return schedulerDTO;
}
+ //TODO move this to the Trigger Controller
@GetMapping("/progress")
+ @Operation(summary = "Get the trigger status")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Return the trigger status",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = TriggerStatus.class)) })
+ })
public TriggerStatus getProgressInfo() throws SchedulerException {
log.trace("SCHEDULER - GET PROGRESS INFO");
TriggerStatus progress = new TriggerStatus();
@@ -84,6 +111,12 @@ public class SchedulerController {
}
@GetMapping(value = "/status", produces = "application/json")
+ @Operation(summary = "Get the scheduler status")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Return the scheduler status",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = SchedulerStates.class)) })
+ })
public Map getStatus() throws SchedulerException {
log.trace("SCHEDULER - GET STATUS");
String schedulerState = "";
@@ -97,6 +130,10 @@ public class SchedulerController {
}
@GetMapping("/pause")
+ @Operation(summary = "Get paused the scheduler")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "204", description = "Got paused successfully")
+ })
@ResponseStatus(HttpStatus.NO_CONTENT)
public void pause() throws SchedulerException {
log.info("SCHEDULER - PAUSE COMMAND");
@@ -104,6 +141,10 @@ public class SchedulerController {
}
@GetMapping("/resume")
+ @Operation(summary = "Get resumed the scheduler")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "204", description = "Got resumed successfully")
+ })
@ResponseStatus(HttpStatus.NO_CONTENT)
public void resume() throws SchedulerException {
log.info("SCHEDULER - RESUME COMMAND");
@@ -111,6 +152,10 @@ public class SchedulerController {
}
@GetMapping("/run")
+ @Operation(summary = "Start the scheduler")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "204", description = "Got started successfully")
+ })
@ResponseStatus(HttpStatus.NO_CONTENT)
public void run() throws SchedulerException {
log.info("SCHEDULER - START COMMAND");
@@ -118,6 +163,10 @@ public class SchedulerController {
}
@GetMapping("/stop")
+ @Operation(summary = "Stop the scheduler")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "204", description = "Got stopped successfully")
+ })
@ResponseStatus(HttpStatus.NO_CONTENT)
public void stop() throws SchedulerException {
log.info("SCHEDULER - STOP COMMAND");
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/TriggerController.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/TriggerController.java
index 03583ce..99d846e 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/TriggerController.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/controllers/TriggerController.java
@@ -1,6 +1,10 @@
package it.fabioformosa.quartzmanager.controllers;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam;
import it.fabioformosa.quartzmanager.dto.TriggerDTO;
import it.fabioformosa.quartzmanager.services.SchedulerService;
@@ -15,7 +19,6 @@ import javax.validation.Valid;
@Slf4j
@RequestMapping(TriggerController.TRIGGER_CONTROLLER_BASE_URL)
@RestController
-@Api(value = "triggers")
public class TriggerController {
static public final String TRIGGER_CONTROLLER_BASE_URL = "/quartz-manager/triggers";
@@ -34,8 +37,16 @@ public class TriggerController {
return schedulerService.getTriggerByName(name);
}
- @ResponseStatus(HttpStatus.CREATED)
@PostMapping("/{name}")
+ @ResponseStatus(HttpStatus.CREATED)
+ @Operation(summary = "Create a new trigger")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "201", description = "Created the new trigger",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = TriggerDTO.class)) }),
+ @ApiResponse(responseCode = "400", description = "Invalid config supplied",
+ content = @Content)
+ })
public TriggerDTO postTrigger(@PathVariable String name, @Valid @RequestBody SchedulerConfigParam config) throws SchedulerException, ClassNotFoundException {
log.info("TRIGGER - CREATING a trigger {} {}", name, config);
TriggerDTO newTriggerDTO = schedulerService.scheduleNewTrigger(name, jobClassname, config);
@@ -44,6 +55,14 @@ public class TriggerController {
}
@PutMapping("/{name}")
+ @Operation(summary = "Reschedule the trigger")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Rescheduled the trigger",
+ content = { @Content(mediaType = "application/json",
+ schema = @Schema(implementation = TriggerDTO.class)) }),
+ @ApiResponse(responseCode = "400", description = "Invalid config supplied",
+ content = @Content)
+ })
public TriggerDTO rescheduleTrigger(@PathVariable String name, @Valid @RequestBody SchedulerConfigParam config) throws SchedulerException {
log.info("TRIGGER - RESCHEDULING the trigger {} {}", name, config);
TriggerDTO triggerDTO = schedulerService.rescheduleTrigger(name, config);