jec-glasscat
Version:
JEC GlassCat - The GlassCat Aplication Server is the default JEC implementation.
204 lines (186 loc) • 8.21 kB
text/typescript
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
//
// Copyright 2016-2018 Pascal ECHEMANN.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {Component, OnInit, OnDestroy} from "@angular/core";
import {Router, ActivatedRoute} from '@angular/router';
import {Subscription} from "rxjs/Rx";
import {EjpService} from "../../services/EjpService";
import {BootstrapService} from "../../services/BootstrapService";
import {EjpWebAppConfig, EjpBootstrapConfig} from "jec-glasscat-config";
import {BreadcrumbService} from "../../services/messaging/BreadcrumbService";
import {DialogMessageService} from '../../services/messaging/DialogMessageService';
import {MessagingService} from '../../services/messaging/MessagingService';
import {FormBuilder, FormGroup, FormControl, Validators} from "@angular/forms";
import {SelectItem} from "primeng/components/common/api";
import {AbstractEjpComponent} from "./AbstractEjpComponent";
import {ConsoleMenuItem} from "../../business/messaging/ConsoleMenuItem";
import {BootstrapFileInfo} from "../../business/EjpFileInfo";
import {ClassPathProperties, ClassPathUtils} from "../../utils/ClassPathUtils";
import {ConsoleMessage} from "../../business/messaging/ConsoleMessage";
export class EjpBootstrapComponent extends AbstractEjpComponent
implements OnInit, OnDestroy {
constructor(protected __ejpService:EjpService,
protected __breadcrumbService:BreadcrumbService,
protected __dialogMessageService:DialogMessageService,
protected __messagingService:MessagingService,
protected __router:Router,
protected __route:ActivatedRoute,
private _bootstrapService:BootstrapService,
private _fb:FormBuilder){
super(
__ejpService, __breadcrumbService, __dialogMessageService,
__messagingService, __router, __route,
);
this._classPathUtils = new ClassPathUtils();
}
public editBootstrapForm:FormGroup = null;
public bootstrapListModel:SelectItem[] = null;
public selectedBootstrap:EjpBootstrapConfig = null;
public bootstrapEditable:boolean = false;
public onParamsLoad():void {
this._ejpEditBootstrapPathControl = new FormControl(this.EMPTY_STRING);
this._editBootstrapClassNameControl =
new FormControl(
this.EMPTY_STRING,
Validators.compose([Validators.required, Validators.minLength(3)])
);
this._ejpEditBootstrapPriorityControl = new FormControl(this.EMPTY_STRING);
this.editBootstrapForm = this._fb.group({
editBootstrapPath: this._ejpEditBootstrapPathControl,
editBootstrapClassName: this._editBootstrapClassNameControl,
editBootstrapPriority: this._ejpEditBootstrapPriorityControl
});
}
public onEjpLoad():void {
this.initBootstrapListModel();
}
public bootstrapListChange():void {
let bootstrapFile:EjpBootstrapConfig = null;
let props:ClassPathProperties = null;
if(this.selectedBootstrap) {
props = this._classPathUtils.getClassPathProperties(this.selectedBootstrap.path);
this.bootstrapEditable = true;
this.editBootstrapForm.patchValue({
editBootstrapPath: props.classPath,
editBootstrapClassName: props.className,
editBootstrapPriority: this.selectedBootstrap.priority
});
this._ejpEditBootstrapPathControl.disable();
this._editBootstrapClassNameControl.disable();
}
}
public cancelBootstrapEdit():void {
this.selectedBootstrap = null;
this.resetForm();
}
public resetForm():void {
this.editBootstrapForm.reset();
this.bootstrapEditable = false;
this._ejpEditBootstrapPathControl.enable();
this._editBootstrapClassNameControl.enable();
}
public onEjpUpdate():void {
this.initBootstrapListModel();
this.resetForm();
}
public createBootstrapFile():void {
const fileInfo:BootstrapFileInfo = new BootstrapFileInfo();
const bootstrapCfg:EjpBootstrapConfig[] = this.__ejpModel.webapp.bootstrap;
const props:ClassPathProperties =
this._classPathUtils.createClassPathProperties(
this._editBootstrapClassNameControl.value,
this._ejpEditBootstrapPathControl.value
);
let fileCfg:EjpBootstrapConfig = null;
fileInfo.path = props.classPath;
fileInfo.className = props.className;
fileInfo.ejpDirectory = this.ejpDirectory;
fileInfo.priority = this._ejpEditBootstrapPriorityControl.value;
if(this._bootstrapUpdateSubscriber) this._bootstrapUpdateSubscriber.unsubscribe();
this._bootstrapUpdateSubscriber = this._bootstrapService.create(fileInfo).subscribe(
data => {
this.__messagingService.push(
ConsoleMessage.buildMessage("success", "Bootstrap class created")
);
this._bootstrapUpdateSubscriber.unsubscribe();
fileCfg = {
path: props.fullPath,
priority: fileInfo.priority
};
bootstrapCfg.push(fileCfg);
this.updateEjp();
},
err => {
this.__dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "File creation error",
"An error occured while creating the bootstrap class.<br/>You must restart the application."
));
console.log(err);
}
);
}
public updateBootstrapFile():void {
const bootstrapCfg:EjpBootstrapConfig[] = this.__ejpModel.webapp.bootstrap;
const bootstrapId:number = bootstrapCfg.indexOf(this.selectedBootstrap);
const fileCfg:EjpBootstrapConfig = {
path: this.selectedBootstrap.path,
priority: this._ejpEditBootstrapPriorityControl.value
};
bootstrapCfg.splice(bootstrapId, 1, fileCfg);
this.updateEjp();
}
public deleteBootstrapFile():void {
const bootstrapCfg:EjpBootstrapConfig[] = this.__ejpModel.webapp.bootstrap;
const bootstrapId:number = bootstrapCfg.indexOf(this.selectedBootstrap);
bootstrapCfg.splice(bootstrapId, 1);
this.updateEjp();
}
protected initBreadcrumb():void {
const dirPath:string = this.SLASH + this.ejpDirectory;
this.__breadcrumbService.push([
ConsoleMenuItem.buildItem("Console", [this.SLASH]),
ConsoleMenuItem.buildItem("EJPs"),
ConsoleMenuItem.buildItem(this.ejpDirectory, [dirPath]),
ConsoleMenuItem.buildItem("Context properties", [dirPath + '/context']),
ConsoleMenuItem.buildItem("Bootstrap files manager", [dirPath + "/context/bootstrap-files-manager"])
]);
}
private _ejpEditBootstrapPathControl:FormControl = null;
private _ejpEditBootstrapPriorityControl:FormControl = null;
private _bootstrapUpdateSubscriber:Subscription = null;
private _editBootstrapClassNameControl:FormControl = null;
private _classPathUtils:ClassPathUtils = null;
private initBootstrapListModel():void {
const webapp:EjpWebAppConfig = this.__ejpModel.webapp;
const bootstrapCfg:EjpBootstrapConfig[] = webapp.bootstrap;
let fileCfg:EjpBootstrapConfig = null;
if(this.bootstrapListModel) this.bootstrapListModel.splice(0);
if(bootstrapCfg) {
const configModel:SelectItem[] = new Array<SelectItem>();
let len:number = bootstrapCfg.length;
while(len--) {
fileCfg = bootstrapCfg[len];
configModel.push(
{label:fileCfg.path, value:fileCfg}
)
}
this.bootstrapListModel = configModel;
}
}
}