diff --git a/quartz-manager-backend/pom.xml b/quartz-manager-backend/pom.xml
index e3dea41..54f4f27 100644
--- a/quartz-manager-backend/pom.xml
+++ b/quartz-manager-backend/pom.xml
@@ -141,6 +141,11 @@
org.springframework.boot
spring-boot-starter-aop
+
+ org.yaml
+ snakeyaml
+
+
diff --git a/quartz-manager-backend/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java b/quartz-manager-backend/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java
index 5075c89..bcf5e35 100644
--- a/quartz-manager-backend/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java
+++ b/quartz-manager-backend/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java
@@ -43,7 +43,7 @@ public class SchedulerConfig {
factoryBean.setRepeatInterval(pollFrequencyMs);
factoryBean.setRepeatCount(repeatCount);
factoryBean
- .setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT);// in case of misfire, ignore all missed triggers and continue
+ .setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT);// in case of misfire, ignore all missed triggers and continue
return factoryBean;
}
diff --git a/quartz-manager-backend/src/main/resources/application.properties b/quartz-manager-backend/src/main/resources/application.properties
deleted file mode 100644
index 53cebd9..0000000
--- a/quartz-manager-backend/src/main/resources/application.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-server.context-path=/quartz-manager
-server.port=8080
-server.session.timeout=28800
-
-spring.thymeleaf.cache=false
-spring.thymeleaf.mode=LEGACYHTML5
-
-quartz.enabled=true
-
-job.frequency=4000
-job.repeatCount=19
-
-logging.level.org.springframework.web=WARN
-logging.level.it.fabioformosa=INFO
-
-app.name: quartz-manager
-jwt.header: Authorization
-jwt.expires_in: 600
-jwt.secret: queenvictoria
-jwt.cookie: AUTH-TOKEN
\ No newline at end of file
diff --git a/quartz-manager-backend/src/main/resources/application.yml b/quartz-manager-backend/src/main/resources/application.yml
new file mode 100644
index 0000000..d1a31e8
--- /dev/null
+++ b/quartz-manager-backend/src/main/resources/application.yml
@@ -0,0 +1,30 @@
+server:
+ context-path: /quartz-manager
+ port: 8080
+ session.timeout : 28800
+
+spring:
+ thymeleaf:
+ cache: false
+ mode: LEGACYHTML5
+
+quartz:
+ enabled: true
+
+job:
+ frequency: 4000
+ repeatCount: 19
+
+logging:
+ level:
+ org.springframework.web: WARN
+ it.fabioformosa: INFO
+
+app:
+ name: quartz-manager
+
+jwt:
+ header: Authorization
+ expires_in: 600 # 10 minutes
+ secret: queenvictoria
+ cookie: AUTH-TOKEN
\ No newline at end of file
diff --git a/quartz-manager-frontend/src/app/app-routing.module.ts b/quartz-manager-frontend/src/app/app-routing.module.ts
index 6c2d5a1..6905f1a 100644
--- a/quartz-manager-frontend/src/app/app-routing.module.ts
+++ b/quartz-manager-frontend/src/app/app-routing.module.ts
@@ -10,6 +10,8 @@ import { NotFoundComponent } from './not-found';
import { ChangePasswordComponent } from './change-password';
import { ForbiddenComponent } from './forbidden';
import { SignupComponent } from './signup';
+
+import { ManagerComponent } from './manager';
export const routes: Routes = [
{
@@ -17,6 +19,12 @@ export const routes: Routes = [
component: HomeComponent,
pathMatch: 'full'
},
+ {
+ path: 'manager',
+ component: ManagerComponent,
+ canActivate: [AdminGuard],
+ pathMatch: 'full'
+ },
{
path:'signup',
component: SignupComponent,
diff --git a/quartz-manager-frontend/src/app/app.component.spec.ts b/quartz-manager-frontend/src/app/app.component.spec.ts
index f5a514e..8ab6c09 100644
--- a/quartz-manager-frontend/src/app/app.component.spec.ts
+++ b/quartz-manager-frontend/src/app/app.component.spec.ts
@@ -3,6 +3,7 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { HomeComponent } from './home';
+import { ManagerComponent } from './manager';
import { LoginComponent } from './login';
import { MockApiService } from './service/mocks/api.service.mock';
diff --git a/quartz-manager-frontend/src/app/app.module.ts b/quartz-manager-frontend/src/app/app.module.ts
index e492f88..70742ab 100644
--- a/quartz-manager-frontend/src/app/app.module.ts
+++ b/quartz-manager-frontend/src/app/app.module.ts
@@ -20,15 +20,20 @@ import { FlexLayoutModule } from '@angular/flex-layout';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HomeComponent } from './home';
+import { ManagerComponent } from './manager';
import { LoginComponent } from './login';
import { LoginGuard, GuestGuard, AdminGuard } from './guard';
import { NotFoundComponent } from './not-found';
import { AccountMenuComponent } from './component/header/account-menu/account-menu.component';
+
import {
HeaderComponent,
ApiCardComponent,
FooterComponent,
- GithubComponent
+ GithubComponent,
+ SchedulerConfigComponent,
+ LogsPanelComponent,
+ ProgressPanelComponent
} from './component';
import {
@@ -54,10 +59,14 @@ export function initUserFactory(userService: UserService) {
FooterComponent,
ApiCardComponent,
HomeComponent,
+ ManagerComponent,
GithubComponent,
LoginComponent,
NotFoundComponent,
AccountMenuComponent,
+ SchedulerConfigComponent,
+ LogsPanelComponent,
+ ProgressPanelComponent,
ChangePasswordComponent,
ForbiddenComponent,
AdminComponent,
diff --git a/quartz-manager-frontend/src/app/component/index.ts b/quartz-manager-frontend/src/app/component/index.ts
index 3209f56..1463cfd 100644
--- a/quartz-manager-frontend/src/app/component/index.ts
+++ b/quartz-manager-frontend/src/app/component/index.ts
@@ -2,3 +2,6 @@ export * from './header';
export * from './github';
export * from './footer';
export * from './api-card';
+export * from './logs-panel';
+export * from './scheduler-config';
+export * from './progress-panel';
diff --git a/quartz-manager-frontend/src/app/component/logs-panel/index.ts b/quartz-manager-frontend/src/app/component/logs-panel/index.ts
new file mode 100644
index 0000000..e9b1c03
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/logs-panel/index.ts
@@ -0,0 +1 @@
+export * from './logs-panel.component';
diff --git a/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.html b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.html
new file mode 100644
index 0000000..2cda319
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.html
@@ -0,0 +1 @@
+LOGS PANEL HERE!!!
diff --git a/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.scss b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.scss
new file mode 100644
index 0000000..903036c
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.scss
@@ -0,0 +1,63 @@
+:host {
+ text-align: center;
+ max-width: 350px;
+}
+
+mat-card {
+ text-align: left;
+ .response-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d;
+ }
+ .response-error {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442;
+ }
+
+ .response {
+ max-height: 0;
+ transition: max-height 1s;
+ margin-left: -16px;
+ margin-right: -16px;
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: -16px;
+ padding-bottom: 0;
+ }
+
+ .expand {
+ padding: 15px;
+ border: 1px solid transparent;
+ max-height: 999px;
+ margin-top: 8px;
+ }
+
+ mat-card-actions {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ }
+
+ pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ }
+}
+
+
+@media screen and (max-width: 599px) {
+ :host {
+ max-width: 999px;
+ }
+}
diff --git a/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.ts b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.ts
new file mode 100644
index 0000000..cef64da
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/logs-panel/logs-panel.component.ts
@@ -0,0 +1,16 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+
+@Component({
+ selector: 'logs-panel',
+ templateUrl: './logs-panel.component.html',
+ styleUrls: ['./logs-panel.component.scss']
+})
+export class LogsPanelComponent implements OnInit {
+
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/quartz-manager-frontend/src/app/component/progress-panel/index.ts b/quartz-manager-frontend/src/app/component/progress-panel/index.ts
new file mode 100644
index 0000000..28a222f
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/progress-panel/index.ts
@@ -0,0 +1 @@
+export * from './progress-panel.component';
diff --git a/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.html b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.html
new file mode 100644
index 0000000..16a4b30
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.html
@@ -0,0 +1 @@
+PROGRESS PANEL HERE!!!
diff --git a/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.scss b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.scss
new file mode 100644
index 0000000..903036c
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.scss
@@ -0,0 +1,63 @@
+:host {
+ text-align: center;
+ max-width: 350px;
+}
+
+mat-card {
+ text-align: left;
+ .response-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d;
+ }
+ .response-error {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442;
+ }
+
+ .response {
+ max-height: 0;
+ transition: max-height 1s;
+ margin-left: -16px;
+ margin-right: -16px;
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: -16px;
+ padding-bottom: 0;
+ }
+
+ .expand {
+ padding: 15px;
+ border: 1px solid transparent;
+ max-height: 999px;
+ margin-top: 8px;
+ }
+
+ mat-card-actions {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ }
+
+ pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ }
+}
+
+
+@media screen and (max-width: 599px) {
+ :host {
+ max-width: 999px;
+ }
+}
diff --git a/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.ts b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.ts
new file mode 100644
index 0000000..88eea5d
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/progress-panel/progress-panel.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+
+@Component({
+ selector: 'progress-panel',
+ templateUrl: './progress-panel.component.html',
+ styleUrls: ['./progress-panel.component.scss']
+})
+export class ProgressPanelComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/quartz-manager-frontend/src/app/component/scheduler-config/index.ts b/quartz-manager-frontend/src/app/component/scheduler-config/index.ts
new file mode 100644
index 0000000..d8d3e69
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/scheduler-config/index.ts
@@ -0,0 +1 @@
+export * from './scheduler-config.component';
diff --git a/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.html b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.html
new file mode 100644
index 0000000..9bff02c
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.html
@@ -0,0 +1 @@
+SCHEDULER CONFIG HERE!!!
diff --git a/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.scss b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.scss
new file mode 100644
index 0000000..903036c
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.scss
@@ -0,0 +1,63 @@
+:host {
+ text-align: center;
+ max-width: 350px;
+}
+
+mat-card {
+ text-align: left;
+ .response-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d;
+ }
+ .response-error {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442;
+ }
+
+ .response {
+ max-height: 0;
+ transition: max-height 1s;
+ margin-left: -16px;
+ margin-right: -16px;
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: -16px;
+ padding-bottom: 0;
+ }
+
+ .expand {
+ padding: 15px;
+ border: 1px solid transparent;
+ max-height: 999px;
+ margin-top: 8px;
+ }
+
+ mat-card-actions {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ }
+
+ pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ }
+}
+
+
+@media screen and (max-width: 599px) {
+ :host {
+ max-width: 999px;
+ }
+}
diff --git a/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.ts b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.ts
new file mode 100644
index 0000000..6de350f
--- /dev/null
+++ b/quartz-manager-frontend/src/app/component/scheduler-config/scheduler-config.component.ts
@@ -0,0 +1,16 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+
+@Component({
+ selector: 'scheduler-config',
+ templateUrl: './scheduler-config.component.html',
+ styleUrls: ['./scheduler-config.component.scss']
+})
+export class SchedulerConfigComponent implements OnInit {
+
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/quartz-manager-frontend/src/app/manager/index.ts b/quartz-manager-frontend/src/app/manager/index.ts
new file mode 100644
index 0000000..729d041
--- /dev/null
+++ b/quartz-manager-frontend/src/app/manager/index.ts
@@ -0,0 +1 @@
+export * from './manager.component';
diff --git a/quartz-manager-frontend/src/app/manager/manager.component.html b/quartz-manager-frontend/src/app/manager/manager.component.html
new file mode 100644
index 0000000..4a10114
--- /dev/null
+++ b/quartz-manager-frontend/src/app/manager/manager.component.html
@@ -0,0 +1,22 @@
+
diff --git a/quartz-manager-frontend/src/app/manager/manager.component.scss b/quartz-manager-frontend/src/app/manager/manager.component.scss
new file mode 100644
index 0000000..7192410
--- /dev/null
+++ b/quartz-manager-frontend/src/app/manager/manager.component.scss
@@ -0,0 +1,42 @@
+app-api-card {
+ margin: 0 50px 0 0;
+ &.last {
+ margin: 0 0 0 0;
+ }
+}
+
+app-github {
+ margin: 50px -70px -50px;
+}
+
+@media screen and (min-width: 600px) and (max-width: 1279px) {
+ app-api-card {
+ margin: 0 4px 0 0;
+ &.last {
+ margin: 0 0 0 0;
+ }
+ }
+
+ app-github {
+ margin: 20px -30px -20px;
+ }
+}
+
+@media screen and (max-width: 599px) {
+
+ .content {
+ /* https://github.com/angular/flex-layout/issues/295 */
+ display: block !important;
+ }
+
+ app-api-card {
+ /* https://github.com/angular/flex-layout/issues/295 */
+ display: block !important;
+ margin: 0 0 12px 0;
+ }
+
+ app-github {
+ margin: 8px -12px -8px;
+ }
+
+}
diff --git a/quartz-manager-frontend/src/app/manager/manager.component.spec.ts b/quartz-manager-frontend/src/app/manager/manager.component.spec.ts
new file mode 100644
index 0000000..d4ce3a8
--- /dev/null
+++ b/quartz-manager-frontend/src/app/manager/manager.component.spec.ts
@@ -0,0 +1,58 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { HomeComponent } from './home.component';
+import { ApiCardComponent, GithubComponent } from '../component';
+import { MockApiService } from '../service/mocks/api.service.mock';
+
+import {
+ MatButtonModule,
+ MatCardModule
+} from '@angular/material';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+
+import {
+ ApiService,
+ AuthService,
+ UserService,
+ FooService,
+ ConfigService
+} from '../service';
+
+describe('HomeComponent', () => {
+ let component: HomeComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [
+ HomeComponent,
+ ApiCardComponent,
+ GithubComponent
+ ],
+ imports: [
+ MatButtonModule,
+ MatCardModule
+ ],
+ providers: [
+ {
+ provide: ApiService,
+ useClass: MockApiService
+ },
+ AuthService,
+ UserService,
+ FooService,
+ ConfigService
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(HomeComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/quartz-manager-frontend/src/app/manager/manager.component.ts b/quartz-manager-frontend/src/app/manager/manager.component.ts
new file mode 100644
index 0000000..8cea7f1
--- /dev/null
+++ b/quartz-manager-frontend/src/app/manager/manager.component.ts
@@ -0,0 +1,27 @@
+import { Component, OnInit } from '@angular/core';
+import {
+ FooService,
+ ConfigService,
+ UserService
+} from '../service';
+
+@Component({
+ selector: 'manager',
+ templateUrl: './manager.component.html',
+ styleUrls: ['./manager.component.scss']
+})
+export class ManagerComponent implements OnInit {
+
+ fooResponse = {};
+ whoamIResponse = {};
+ allUserResponse = {};
+ constructor(
+ private config: ConfigService,
+ private fooService: FooService,
+ private userService: UserService
+ ) { }
+
+ ngOnInit() {
+ }
+
+}