jec-glasscat
Version:
JEC GlassCat - The GlassCat Aplication Server is the default JEC implementation.
294 lines (265 loc) • 11.1 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 {DomainsService} from "../../services/DomainsService";
import {MessagingService} from "../../services/messaging/MessagingService";
import {ConsoleMessage} from "../../business/messaging/ConsoleMessage";
import {Subscription} from "rxjs/Rx";
import {FormBuilder, FormGroup, FormControl, Validators} from "@angular/forms";
import {BreadcrumbService} from "../../services/messaging/BreadcrumbService";
import {ConsoleMenuItem} from "../../business/messaging/ConsoleMenuItem";
import {ConfirmDialogMessageService} from '../../services/messaging/ConfirmDialogMessageService';
import {ContextService} from "../../services/ContextService";
import {DialogMessageService} from '../../services/messaging/DialogMessageService';
import {SelectItem} from "primeng/components/common/api";
import {HttpListenerConfig, BootstrapConfig, Domain} from "jec-glasscat-config";
export class DomainEditComponent implements OnInit, OnDestroy {
////////////////////////////////////////////////////////////////////////////
// Constructor function
////////////////////////////////////////////////////////////////////////////
constructor(private _domainService:DomainsService,
private _breadcrumbService:BreadcrumbService,
private _contextService:ContextService,
private _messagingService:MessagingService,
private _confirmDialogMessageService:ConfirmDialogMessageService,
private _dialogMessageService:DialogMessageService,
private _router:Router,
private _route:ActivatedRoute,
private _fb:FormBuilder){}
////////////////////////////////////////////////////////////////////////////
// Public properties
////////////////////////////////////////////////////////////////////////////
public deletable:boolean = false;
public domainName:string = null;
public projectPropertiesForm:FormGroup = null;
public domain:Domain = null;
public serverList:SelectItem[] = null;
////////////////////////////////////////////////////////////////////////////
// Public methods
////////////////////////////////////////////////////////////////////////////
public closeForm():void {
this._router.navigate(['/domains']);
}
public updateDomain():void {
if(this._domainUpdateSubscriber) this._domainUpdateSubscriber.unsubscribe();
this._domainUpdateSubscriber = this._domainService.updateDomain(this.domain).subscribe(
data => {
this._messagingService.push(
ConsoleMessage.buildMessage("success", "Domain updated")
);
this.closeForm();
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain update error",
"An error occured while updating the domain.<br/>You must restart the application."
));
console.log(err);
}
);
}
public unloadDomain():void {
if(this._domainUpdateSubscriber) this._domainUpdateSubscriber.unsubscribe();
this._domainUpdateSubscriber = this._domainService.unloadDomain(this.domain).subscribe(
data => {
this._messagingService.push(
ConsoleMessage.buildMessage("success", "Domain removed")
);
this.closeForm();
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain unload error",
"An error occured while removing the domain.<br/>You must restart the application."
));
console.log(err);
}
);
}
public deleteDomain():void {
/*this._confirmDialogMessageService.push({
message: "All project files will be deleted. This operation cannot be undone. Would you like to proceed?",
accept:() => {
if(this._domainUpdateSubscriber) this._domainUpdateSubscriber.unsubscribe();
this._domainUpdateSubscriber = this._domainService.deleteDomain(this.domain).subscribe(
data => {
this._messagingService.push(
ConsoleMessage.buildMessage("success", "Project deleted")
);
this.closeForm();
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain deletion error",
"An error occured while deleting the domain.<br/>You must restart the application."
));
console.log(err);
}
);
}
});*/
}
////////////////////////////////////////////////////////////////////////////
// Public methods
////////////////////////////////////////////////////////////////////////////
/**
* @override
*/
public ngOnInit():void {
this.init();
this._subscriber = this._route.params.subscribe(
params => {
this.domainName = params["id"];
this.initBreadcrumb();
if(this.domainName) {
if(this.domainName === "admin-ejp") this.deletable = false;
this.getContext();
}
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain error",
"Domain ID parameter is not valid."
));
console.error(err);
}
);
}
public serverChangeHandler(event:any):void {
const serverId:string = event.value;
const newHost:string = this._hostMap.get(serverId);
this.projectPropertiesForm.patchValue( { host: newHost });
this.domain.connector.server = serverId;
this.domain.host = newHost;
}
public ngOnDestroy():void {
this._subscriber.unsubscribe();
if(this._domainUpdateSubscriber) this._domainUpdateSubscriber.unsubscribe();
}
private _subscriber:Subscription = null;
private _contextSubscriber:Subscription = null;
private _domainUpdateSubscriber:Subscription = null;
private _context:BootstrapConfig = null;
private _hostMap:Map<string, string> = null;
private _initialServerId:string = null;
private _initialServerHost:string = null;
private _projectPropertiesName:FormControl = null;
private _projectPropertiesHost:FormControl = null;
private _projectPropertiesServer:FormControl = null;
private _projectPropertiesType:FormControl = null;
private init():void {
this._projectPropertiesName = new FormControl({disabled: true}, Validators.required);
this._projectPropertiesHost = new FormControl({disabled: true}, Validators.required);
this._projectPropertiesServer = new FormControl("", Validators.required);
this._projectPropertiesType = new FormControl({disabled: true}, Validators.required);
this.projectPropertiesForm = this._fb.group({
name: this._projectPropertiesName,
host: this._projectPropertiesHost,
serverId: this._projectPropertiesServer,
type: this._projectPropertiesType
});
}
private initBreadcrumb():void {
this._breadcrumbService.push([
ConsoleMenuItem.buildItem("Console", ['/']),
ConsoleMenuItem.buildItem("Domains", ['/domains']),
ConsoleMenuItem.buildItem("Edition"),
ConsoleMenuItem.buildItem(this.domainName, ['/' + this.domainName])
]);
}
private loadDomain():void {
this._domainService.getDomain(this.domainName).subscribe(
data => {
this.domain = data;
this.projectPropertiesForm.patchValue( { name: this.domain.name });
this.projectPropertiesForm.patchValue( { type: this.domain.connector.type });
this.checkServer();
this._projectPropertiesName.disable();
this._projectPropertiesType.disable();
this._projectPropertiesHost.disable();
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain initialization error",
"An error occured while loading domain configuration.<br/>You must restart the application."
));
}
);
}
private checkServer():void {
const serverId:string = this.domain.connector.server;
const hostName:string = this.domain.host;
let isValidserver:boolean = false;
let server:any = null;
let len:number = this.serverList.length;
while(len--) {
server = this.serverList[len];
if(server.label === serverId) {
isValidserver = true;
break;
}
}
if(!isValidserver) {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Domain initialization error",
"Server ID is not valid and has been replaced."
));
server = this.serverList[0];
}
this._initialServerId = server.value;
this._initialServerHost = this._hostMap.get(this._initialServerId);
this.projectPropertiesForm.patchValue( { serverId: this._initialServerId });
this.projectPropertiesForm.patchValue( { host: this._initialServerHost });
}
private getContext():void {
this._contextSubscriber = this._contextService.getContext().subscribe(
data => {
this._context = data;
this.initServerList();
this.loadDomain();
},
err => {
this._dialogMessageService.push(ConsoleMessage.buildMessage(
"error", "Context initialization error",
"An error occured while loading configuration files.<br/>You must restart the application."
));
console.error(err);
}
);
}
private initServerList():void {
const listeners:HttpListenerConfig[] = this._context.config.http.listeners;
const list:SelectItem[] = new Array<SelectItem>();
let listener:HttpListenerConfig = null;
let len:number = listeners.length;
this._hostMap = new Map<string, string>();
let serverId:string = null;
while(len--) {
listener = listeners[len];
serverId = listener.server;
this._hostMap.set(serverId, listener.domain);
list.push(
{ label: serverId, value: serverId }
);
}
this.serverList = list;
}
}