From f1c9fba68ef3d0028e15aedb3f82b95d80056ea5 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Thu, 4 Aug 2022 00:43:53 +0200 Subject: [PATCH] #56 step into layout revamp --- .../src/app/app.component.html | 11 +- .../src/app/app.component.scss | 15 +-- quartz-manager-frontend/src/app/app.module.ts | 14 ++- .../components/footer/footer.component.html | 15 +-- .../components/footer/footer.component.scss | 22 ++-- .../components/header/header.component.html | 2 +- .../src/app/components/index.ts | 1 + .../progress-panel.component.html | 18 +-- .../scheduler-control.component.html | 35 ++++-- .../scheduler-control.component.scss | 13 ++- .../scheduler-control.component.spec.ts | 105 ++++++++++++++++++ .../scheduler-control.component.ts | 78 ++++++++----- .../simple-trigger-config.component.html | 2 +- .../src/app/components/trigger-list/index.ts | 1 + .../trigger-list/trigger-list.component.html | 19 ++++ .../trigger-list/trigger-list.component.scss | 21 ++++ .../trigger-list/trigger-list.component.ts | 36 ++++++ .../src/app/model/scheduler.model.ts | 4 +- .../src/app/services/index.ts | 1 + .../src/app/services/scheduler.service.ts | 11 +- .../src/app/services/trigger.service.ts | 20 ++++ .../app/views/manager/manager.component.html | 41 ++++--- .../app/views/manager/manager.component.scss | 1 + .../app/views/manager/manager.component.ts | 8 +- quartz-manager-frontend/src/styles.css | 7 ++ .../controllers/SchedulerController.java | 52 ++++----- .../controllers/TriggerController.java | 12 +- .../converters/SchedulerToSchedulerDTO.java | 11 ++ .../quartzmanager/dto/SchedulerDTO.java | 32 ++---- ...edulerStates.java => SchedulerStatus.java} | 4 +- .../services/SchedulerService.java | 19 ++++ .../services/TriggerService.java | 34 ++++++ 32 files changed, 503 insertions(+), 162 deletions(-) create mode 100644 quartz-manager-frontend/src/app/components/scheduler-control/scheduler-control.component.spec.ts create mode 100644 quartz-manager-frontend/src/app/components/trigger-list/index.ts create mode 100644 quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.html create mode 100644 quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.scss create mode 100644 quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts create mode 100644 quartz-manager-frontend/src/app/services/trigger.service.ts rename quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/{SchedulerStates.java => SchedulerStatus.java} (69%) create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/SchedulerService.java create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/TriggerService.java diff --git a/quartz-manager-frontend/src/app/app.component.html b/quartz-manager-frontend/src/app/app.component.html index d2bb06e..91994a2 100644 --- a/quartz-manager-frontend/src/app/app.component.html +++ b/quartz-manager-frontend/src/app/app.component.html @@ -1,5 +1,8 @@ - -
- +
+ +
+ +
+
- + diff --git a/quartz-manager-frontend/src/app/app.component.scss b/quartz-manager-frontend/src/app/app.component.scss index 5293b8d..6e1eb96 100644 --- a/quartz-manager-frontend/src/app/app.component.scss +++ b/quartz-manager-frontend/src/app/app.component.scss @@ -2,20 +2,9 @@ display: block; color: rgba(0,0,0,.54); font-family: Roboto,"Helvetica Neue"; + height: 100%; } .content { - margin: 50px 70px; -} - -@media screen and (min-width: 600px) and (max-width: 1279px) { - .content { - margin: 20px 30px; - } -} - -@media screen and (max-width: 599px) { - .content { - margin: 8px 12px; - } + padding: 20px; } diff --git a/quartz-manager-frontend/src/app/app.module.ts b/quartz-manager-frontend/src/app/app.module.ts index 57b3a54..15dd847 100644 --- a/quartz-manager-frontend/src/app/app.module.ts +++ b/quartz-manager-frontend/src/app/app.module.ts @@ -18,6 +18,8 @@ import {MatIconModule} from '@angular/material/icon'; import {MatButtonModule} from '@angular/material/button'; import {MatCardModule} from '@angular/material/card'; import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatListModule} from '@angular/material/list'; +import {MatSidenavModule} from '@angular/material/sidenav'; import {MatNativeDateModule} from '@angular/material/core'; import { NgxMatTimepickerModule, NgxMatDatetimePickerModule} from '@angular-material-components/datetime-picker'; @@ -40,7 +42,8 @@ import { SchedulerConfigComponent, SchedulerControlComponent, LogsPanelComponent, - ProgressPanelComponent + ProgressPanelComponent, + TriggerListComponent } from './components'; import { @@ -51,7 +54,8 @@ import { ConfigService, ProgressWebsocketService, LogsWebsocketService, - getHtmlBaseUrl + getHtmlBaseUrl, + TriggerService } from './services'; import { ChangePasswordComponent } from './views/change-password/change-password.component'; import { ForbiddenComponent } from './views/forbidden/forbidden.component'; @@ -113,7 +117,8 @@ export function jwtOptionsFactory(apiService: ApiService) { LogsPanelComponent, ProgressPanelComponent, ChangePasswordComponent, - ForbiddenComponent + ForbiddenComponent, + TriggerListComponent ], imports: [ BrowserAnimationsModule, @@ -137,11 +142,13 @@ export function jwtOptionsFactory(apiService: ApiService) { MatInputModule, MatToolbarModule, MatCardModule, + MatListModule, MatProgressSpinnerModule, MatProgressBarModule, MatDatepickerModule, MatNativeDateModule, NgxMatMomentModule, NgxMatDatetimePickerModule, + MatSidenavModule, FlexLayoutModule ], providers: [ @@ -159,6 +166,7 @@ export function jwtOptionsFactory(apiService: ApiService) { GuestGuard, AdminGuard, SchedulerService, + TriggerService, ProgressWebsocketService, LogsWebsocketService, AuthService, diff --git a/quartz-manager-frontend/src/app/components/footer/footer.component.html b/quartz-manager-frontend/src/app/components/footer/footer.component.html index 43d36df..ddc9c70 100644 --- a/quartz-manager-frontend/src/app/components/footer/footer.component.html +++ b/quartz-manager-frontend/src/app/components/footer/footer.component.html @@ -1,7 +1,8 @@ -

- Hand crafted with love by - Fabio Formosa -

- - - + + + +   Quartz Manager + + + + diff --git a/quartz-manager-frontend/src/app/components/footer/footer.component.scss b/quartz-manager-frontend/src/app/components/footer/footer.component.scss index a5f4583..786b1b1 100644 --- a/quartz-manager-frontend/src/app/components/footer/footer.component.scss +++ b/quartz-manager-frontend/src/app/components/footer/footer.component.scss @@ -1,18 +1,20 @@ -:host { - display: block; - font-weight: 300; - font-size: 15px; - display: block; +:host{ + //position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 64px; +} + +#footer{ background-color: rgb(33, 33, 33); - height: 236px; - padding: 72px 24px; + font-size: 15px; box-sizing: border-box; text-align: center; a { text-decoration: none; - cursor: auto; + cursor: pointer; color: #FFFFFF; - margin-top: 32px; } h3 { @@ -21,7 +23,5 @@ font-weight: 300; font-size: 22px; } - } - diff --git a/quartz-manager-frontend/src/app/components/header/header.component.html b/quartz-manager-frontend/src/app/components/header/header.component.html index 7d8b4b4..b44ce6a 100644 --- a/quartz-manager-frontend/src/app/components/header/header.component.html +++ b/quartz-manager-frontend/src/app/components/header/header.component.html @@ -1,6 +1,6 @@ diff --git a/quartz-manager-frontend/src/app/components/index.ts b/quartz-manager-frontend/src/app/components/index.ts index 54bec53..fe73207 100644 --- a/quartz-manager-frontend/src/app/components/index.ts +++ b/quartz-manager-frontend/src/app/components/index.ts @@ -5,3 +5,4 @@ export * from './logs-panel'; export * from './scheduler-config'; export * from './scheduler-control'; export * from './progress-panel'; +export * from './trigger-list'; diff --git a/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.html b/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.html index a5da15c..479abc6 100644 --- a/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.html +++ b/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.html @@ -1,6 +1,6 @@ diff --git a/quartz-manager-frontend/src/app/components/trigger-list/index.ts b/quartz-manager-frontend/src/app/components/trigger-list/index.ts new file mode 100644 index 0000000..2dadc65 --- /dev/null +++ b/quartz-manager-frontend/src/app/components/trigger-list/index.ts @@ -0,0 +1 @@ +export * from './trigger-list.component' diff --git a/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.html b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.html new file mode 100644 index 0000000..36e76a9 --- /dev/null +++ b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.html @@ -0,0 +1,19 @@ + + + TRIGGERS + + + + + + + {{ triggerKey.name }} + + + + + + + diff --git a/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.scss b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.scss new file mode 100644 index 0000000..8507fa3 --- /dev/null +++ b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.scss @@ -0,0 +1,21 @@ +/* ===== Scrollbar CSS ===== */ +/* Firefox */ +* { + scrollbar-width: auto; + scrollbar-color: #b8b8b8 #ffffff; +} + +/* Chrome, Edge, and Safari */ +*::-webkit-scrollbar { + width: 16px; +} + +*::-webkit-scrollbar-track { + background: #ffffff; +} + +*::-webkit-scrollbar-thumb { + background-color: #b8b8b8; + border-radius: 10px; + border: 3px solid #ffffff; +} diff --git a/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts new file mode 100644 index 0000000..490f68b --- /dev/null +++ b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts @@ -0,0 +1,36 @@ +import {Component, EventEmitter, OnInit, Output} from '@angular/core'; +import {TriggerService} from '../../services/trigger.service'; +import {TriggerKey} from '../../model/triggerKey.model'; + +@Component({ + selector: 'qrzmng-trigger-list', + templateUrl: './trigger-list.component.html', + styleUrls: ['./trigger-list.component.scss'] +}) +export class TriggerListComponent implements OnInit { + + loading = true; + triggerKeys: Array = []; + + @Output() openedNewTriggerFormEvent = new EventEmitter(); + + constructor( + private triggerService: TriggerService + ) { } + + ngOnInit() { + this.loading = true; + this.fetchTriggers(); + } + + private fetchTriggers() { + this.triggerService.fetchTriggers() + .subscribe((triggerKeys: Array) => { + this.triggerKeys = triggerKeys; + }) + } + + openNewTriggerForm() { + this.openedNewTriggerFormEvent.emit(true); + } +} diff --git a/quartz-manager-frontend/src/app/model/scheduler.model.ts b/quartz-manager-frontend/src/app/model/scheduler.model.ts index adad75f..e7df13a 100644 --- a/quartz-manager-frontend/src/app/model/scheduler.model.ts +++ b/quartz-manager-frontend/src/app/model/scheduler.model.ts @@ -3,10 +3,12 @@ import {TriggerKey} from './triggerKey.model'; export class Scheduler { name: string; instanceId: string; + status: string; triggerKeys: TriggerKey[]; - constructor(name: string, instanceId: string, triggerKeys: TriggerKey[]) { + constructor(name: string, instanceId: string, status: string, triggerKeys: TriggerKey[]) { this.name = name; + this.status = status; this.instanceId = instanceId; this.triggerKeys = triggerKeys; } diff --git a/quartz-manager-frontend/src/app/services/index.ts b/quartz-manager-frontend/src/app/services/index.ts index db5951e..1352120 100644 --- a/quartz-manager-frontend/src/app/services/index.ts +++ b/quartz-manager-frontend/src/app/services/index.ts @@ -6,4 +6,5 @@ export * from './scheduler.service'; export * from './websocket.service'; export * from './progress.websocket.service'; export * from './logs.websocket.service'; +export * from './trigger.service' diff --git a/quartz-manager-frontend/src/app/services/scheduler.service.ts b/quartz-manager-frontend/src/app/services/scheduler.service.ts index 7320dc9..afc94ec 100644 --- a/quartz-manager-frontend/src/app/services/scheduler.service.ts +++ b/quartz-manager-frontend/src/app/services/scheduler.service.ts @@ -5,6 +5,7 @@ import {Trigger} from '../model/trigger.model'; import {Observable} from 'rxjs'; import {SimpleTriggerCommand} from '../model/simple-trigger.command'; import {SchedulerConfig} from '../model/schedulerConfig.model'; +import {Scheduler} from '../model/scheduler.model'; @Injectable() export class SchedulerService { @@ -13,19 +14,19 @@ export class SchedulerService { private apiService: ApiService ) { } - startScheduler = () => { + startScheduler = (): Observable => { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/run') } - stopScheduler = () => { + stopScheduler = (): Observable => { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/stop') } - pauseScheduler = () => { + pauseScheduler = (): Observable => { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/pause') } - resumeScheduler = () => { + resumeScheduler = (): Observable => { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/resume') } @@ -33,7 +34,7 @@ export class SchedulerService { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/status') } - getScheduler = () => { + getScheduler = (): Observable => { return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler') } diff --git a/quartz-manager-frontend/src/app/services/trigger.service.ts b/quartz-manager-frontend/src/app/services/trigger.service.ts new file mode 100644 index 0000000..55d5bf2 --- /dev/null +++ b/quartz-manager-frontend/src/app/services/trigger.service.ts @@ -0,0 +1,20 @@ +import {ApiService} from './api.service'; +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs'; +import {Trigger} from '../model/trigger.model'; +import {TriggerKey} from '../model/triggerKey.model'; +import {getBaseUrl} from './config.service'; + +@Injectable() +export class TriggerService { + + constructor( + private apiService: ApiService) { + } + + fetchTriggers = (): Observable> => { + return this.apiService.get(getBaseUrl() + 'quartz-manager/triggers'); + } + + +} diff --git a/quartz-manager-frontend/src/app/views/manager/manager.component.html b/quartz-manager-frontend/src/app/views/manager/manager.component.html index 7c5e377..df44e6d 100644 --- a/quartz-manager-frontend/src/app/views/manager/manager.component.html +++ b/quartz-manager-frontend/src/app/views/manager/manager.component.html @@ -1,19 +1,32 @@ -
+
-
-
- -
- -
+
+
-
-
-
-
-
-
-
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+ +
+ + diff --git a/quartz-manager-frontend/src/app/views/manager/manager.component.scss b/quartz-manager-frontend/src/app/views/manager/manager.component.scss index e69de29..8b13789 100644 --- a/quartz-manager-frontend/src/app/views/manager/manager.component.scss +++ b/quartz-manager-frontend/src/app/views/manager/manager.component.scss @@ -0,0 +1 @@ + diff --git a/quartz-manager-frontend/src/app/views/manager/manager.component.ts b/quartz-manager-frontend/src/app/views/manager/manager.component.ts index a780d49..839c3e7 100644 --- a/quartz-manager-frontend/src/app/views/manager/manager.component.ts +++ b/quartz-manager-frontend/src/app/views/manager/manager.component.ts @@ -11,8 +11,8 @@ import { }) export class ManagerComponent implements OnInit { - whoamIResponse = {}; - allUserResponse = {}; + newTriggerFormOpened = false; + constructor( private config: ConfigService, private userService: UserService @@ -21,4 +21,8 @@ export class ManagerComponent implements OnInit { ngOnInit() { } + setnewTriggerFormOpened(opened: boolean){ + this.newTriggerFormOpened = opened; + } + } diff --git a/quartz-manager-frontend/src/styles.css b/quartz-manager-frontend/src/styles.css index dcbd1da..e6babad 100644 --- a/quartz-manager-frontend/src/styles.css +++ b/quartz-manager-frontend/src/styles.css @@ -1,6 +1,13 @@ /* You can add global styles to this file, and also import other style files */ @import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; +html { + display: flex; + flex-direction: column; + height: 100%; +} body { margin: 0; + flex:1; + background-color: #f1f1f1; } 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 6799df1..b8a6a1a 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 @@ -9,8 +9,8 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; 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.LegacySchedulerService; +import it.fabioformosa.quartzmanager.services.SchedulerService; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.quartz.impl.triggers.SimpleTriggerImpl; @@ -24,8 +24,6 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.Collections; -import java.util.Map; /** * This controller provides scheduler info about config and status. It provides @@ -42,8 +40,11 @@ public class SchedulerController { private LegacySchedulerService legacySchedulerService; - public SchedulerController(LegacySchedulerService legacySchedulerService, ConversionService conversionService) { + private SchedulerService schedulerService; + + public SchedulerController(LegacySchedulerService legacySchedulerService, SchedulerService schedulerService, ConversionService conversionService) { this.legacySchedulerService = legacySchedulerService; + this.schedulerService = schedulerService; this.conversionService = conversionService; } @@ -82,9 +83,8 @@ public class SchedulerController { schema = @Schema(implementation = SchedulerDTO.class)) }) }) public SchedulerDTO getScheduler() { - log.debug("SCHEDULER - GET Scheduler..."); - SchedulerDTO schedulerDTO = conversionService.convert(legacySchedulerService.getScheduler(), SchedulerDTO.class); - return schedulerDTO; + log.trace("SCHEDULER - GET Scheduler..."); + return schedulerService.getScheduler(); } //TODO move this to the Trigger Controller @@ -113,24 +113,26 @@ public class SchedulerController { return progress; } - @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 = ""; - if (legacySchedulerService.getScheduler().isShutdown() || !legacySchedulerService.getScheduler().isStarted()) - schedulerState = SchedulerStates.STOPPED.toString(); - else if (legacySchedulerService.getScheduler().isStarted() && legacySchedulerService.getScheduler().isInStandbyMode()) - schedulerState = SchedulerStates.PAUSED.toString(); - else - schedulerState = SchedulerStates.RUNNING.toString(); - return Collections.singletonMap("data", schedulerState.toLowerCase()); - } + + //REMOVEME +// @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 = ""; +// if (legacySchedulerService.getScheduler().isShutdown() || !legacySchedulerService.getScheduler().isStarted()) +// schedulerState = SchedulerStates.STOPPED.toString(); +// else if (legacySchedulerService.getScheduler().isStarted() && legacySchedulerService.getScheduler().isInStandbyMode()) +// schedulerState = SchedulerStates.PAUSED.toString(); +// else +// schedulerState = SchedulerStates.RUNNING.toString(); +// return Collections.singletonMap("data", schedulerState.toLowerCase()); +// } @GetMapping("/pause") @Operation(summary = "Get paused the scheduler") 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 47ea4a9..edff08d 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 @@ -10,12 +10,14 @@ import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam; import it.fabioformosa.quartzmanager.dto.TriggerDTO; import it.fabioformosa.quartzmanager.exceptions.TriggerNotFoundException; import it.fabioformosa.quartzmanager.services.LegacySchedulerService; +import it.fabioformosa.quartzmanager.services.TriggerService; import lombok.extern.slf4j.Slf4j; import org.quartz.SchedulerException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; @Slf4j @RequestMapping(TriggerController.TRIGGER_CONTROLLER_BASE_URL) @@ -26,11 +28,19 @@ public class TriggerController extends AbstractTriggerController { static public final String TRIGGER_CONTROLLER_BASE_URL = "/quartz-manager/triggers"; private LegacySchedulerService schedulerService; + private TriggerService triggerService; - public TriggerController(LegacySchedulerService schedulerService) { + public TriggerController(LegacySchedulerService schedulerService, TriggerService triggerService) { this.schedulerService = schedulerService; + this.triggerService = triggerService; } + @GetMapping + public List listTriggers() throws SchedulerException { + return triggerService.fetchTriggers(); + } + + @GetMapping("/{name}") public TriggerDTO getTrigger(@PathVariable String name) throws SchedulerException, TriggerNotFoundException { return schedulerService.getLegacyTriggerByName(name); diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/converters/SchedulerToSchedulerDTO.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/converters/SchedulerToSchedulerDTO.java index fcc01a7..ad4515c 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/converters/SchedulerToSchedulerDTO.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/converters/SchedulerToSchedulerDTO.java @@ -2,8 +2,10 @@ package it.fabioformosa.quartzmanager.converters; import it.fabioformosa.metamorphosis.core.converters.AbstractBaseConverterToDTO; import it.fabioformosa.quartzmanager.dto.SchedulerDTO; +import it.fabioformosa.quartzmanager.enums.SchedulerStatus; import lombok.SneakyThrows; import org.quartz.Scheduler; +import org.quartz.SchedulerException; import org.quartz.impl.matchers.GroupMatcher; import org.springframework.stereotype.Component; @@ -16,6 +18,15 @@ public class SchedulerToSchedulerDTO extends AbstractBaseConverterToDTO triggerKeys; - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - public String getInstanceId() { - return instanceId; - } - - public void setTriggerKeys(Set triggerKeys) { - this.triggerKeys = triggerKeys; - } - - public Set getTriggerKeys() { - return triggerKeys; - } } diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStates.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStatus.java similarity index 69% rename from quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStates.java rename to quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStatus.java index f248106..f37d113 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStates.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/enums/SchedulerStatus.java @@ -1,5 +1,5 @@ package it.fabioformosa.quartzmanager.enums; -public enum SchedulerStates { +public enum SchedulerStatus { RUNNING, STOPPED, PAUSED -} \ No newline at end of file +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/SchedulerService.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/SchedulerService.java new file mode 100644 index 0000000..40e4cd4 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/SchedulerService.java @@ -0,0 +1,19 @@ +package it.fabioformosa.quartzmanager.services; + +import it.fabioformosa.quartzmanager.dto.SchedulerDTO; +import org.quartz.Scheduler; +import org.springframework.core.convert.ConversionService; +import org.springframework.stereotype.Service; + +@Service +public class SchedulerService extends AbstractSchedulerService{ + + public SchedulerService(Scheduler scheduler, ConversionService conversionService) { + super(scheduler, conversionService); + } + + public SchedulerDTO getScheduler() { + return conversionService.convert(scheduler, SchedulerDTO.class); + } + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/TriggerService.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/TriggerService.java new file mode 100644 index 0000000..d71aced --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/TriggerService.java @@ -0,0 +1,34 @@ +package it.fabioformosa.quartzmanager.services; + +import it.fabioformosa.quartzmanager.dto.TriggerDTO; +import it.fabioformosa.quartzmanager.dto.TriggerKeyDTO; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.TriggerKey; +import org.quartz.impl.matchers.GroupMatcher; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.TypeDescriptor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; + +@Service +public class TriggerService { + + private Scheduler scheduler; + private ConversionService conversionService; + + public TriggerService(Scheduler scheduler, ConversionService conversionService) { + this.scheduler = scheduler; + this.conversionService = conversionService; + } + + public List fetchTriggers() throws SchedulerException { + Set triggerKeys = scheduler.getTriggerKeys(GroupMatcher.anyTriggerGroup()); + return (List) conversionService.convert(triggerKeys, + TypeDescriptor.collection(Set.class, TypeDescriptor.valueOf(TriggerKey.class)), + TypeDescriptor.collection(List.class, TypeDescriptor.valueOf(TriggerKeyDTO.class))); + } + +}