// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2018 Georgi Marinov // // 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 { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { environment } from '../../../environments/environment'; import { Observable } from 'rxjs'; import { ImageDataService } from '../image-data/image-data.service'; /** * Data connection service. * * Retrieves data from a project server. */ @Injectable({ providedIn: 'root' }) export class DataService { /** The data server endpoint. */ private serverEndpointUri = environment.serverEndpointUri; /** The json data path. */ private json: string = this.urlResolve(this.serverEndpointUri, 'json'); /** The cv data path. */ private cv: string = this.urlResolveJson(this.json, 'cv'); /** The professional experience data path. */ private professionalExperience: string = this.urlResolveJson(this.json, 'experience'); /** The education data path. */ private education: string = this.urlResolveJson(this.json, 'education'); /** The education data path. */ private accomplishments: string = this.urlResolveJson(this.json, 'accomplishments'); /** The publications data path. */ private publications: string = this.urlResolveJson(this.json, 'publications'); /** The projects data path. */ private projects: string = this.urlResolveJson(this.json, 'projects'); /** The gantt chart data path. */ private ganttChart: string = this.urlResolveJson(this.json, 'gantt-chart'); /** The general timeline data path. */ private generalTimeline: string = this.urlResolveJson(this.json, 'general-timeline'); /** The entities data path. */ private entities: string = this.urlResolveJson(this.json, 'entities'); /** The ontology data path. */ private ontology: string = this.urlResolveJson(this.json, 'ontology'); /** The ui data path. */ private ui: string = this.urlResolveJson(this.json, 'ui'); /** The themes data path. */ private themes: string = this.urlResolve(this.serverEndpointUri, 'themes'); /** The default theme data path. */ private themesDefault: string = this.getTheme('default'); /** The theme data path resolver. */ private getTheme(themeName: string): string { return this.urlResolve(this.themes, themeName); } /** The json-type data path resolver. */ private urlResolveJson(base: string, url: string): string { return this.urlResolve(base, url + '.json'); } /** * Constructs the data service. * ~constructor * * @param imageDataService The data service injected dependency. * @param httpClient The http client for requests to the server. */ constructor( public imageDataService: ImageDataService, protected httpClient: HttpClient) { // console.log('Debug: DataService: hostname: ' + location.hostname); // for (const key in environment) { // if (Object.prototype.hasOwnProperty.call(environment, key)) { // const element = environment[key]; // console.log('Debug: DataService: environment.' + key + ': ' + element); // } // } } /** * Retrieves a CV. * * @returns The CV. */ public getCv(): Observable { const cv$ = this.httpClient.get(this.cv); return cv$; } /** * Retrieves professional experience. * * @returns The professional experience. */ public getProfessionalExperience(): Observable { const experience$ = this.httpClient.get(this.professionalExperience); return experience$; } /** * Retrieves education. * * @returns The education. */ public getEducation(): Observable { const education$ = this.httpClient.get(this.education); return education$; } /** * Retrieves accomplishments. * * @returns The accomplishments. */ public getAccomplishments(): Observable { const accomplishments$ = this.httpClient.get(this.accomplishments); return accomplishments$; } /** * Retrieves publications. * * @returns The publications. */ public getPublications(): Observable { const publications$ = this.httpClient.get(this.publications); return publications$; } /** * Retrieves a projects array. * * @returns The projects array. */ public getProjects(): Observable { const projects$ = this.httpClient.get(this.projects); return projects$; } /** * Retrieves a gantt chart. * * @returns The gantt chart. */ public getGanttChart(): Observable { const ganttChart$ = this.httpClient.get(this.ganttChart); return ganttChart$; } /** * Retrieves a general timeline. * * @returns The general timeline. */ public getGeneralTimeline(): Observable { const generalTimeline$ = this.httpClient.get(this.generalTimeline); return generalTimeline$; } /** * Retrieves an entities array. * * @returns The entities array. */ public getEntities(): Observable { const entities$ = this.httpClient.get(this.entities); return entities$; } /** * Retrieves an ontology array. * * @returns The ontology array. */ public getOntology(): Observable { const ontology$ = this.httpClient.get(this.ontology); return ontology$; } /** * Retrieves a UI. * * @returns The UI. */ public getUi(): Observable { const ui$ = this.httpClient.get(this.ui); return ui$; } /** * Retrieves the app version. * * @returns The app version. */ public getVersion(): Observable { const httpHeaders = new HttpHeaders({ 'Content-Type': 'application/json' }); httpHeaders.set('Authorization', 'Bearer ' + (environment.CV_GENERATOR_APPVEYOR_TOKEN || '')); const options = { headers: httpHeaders }; const url = 'https://ci.appveyor.com/api/projects/Yrkki/cv-generator-fe/history?recordsNumber=1'; const version$ = this.httpClient.get(url, options); return version$; } /** * Retrieves a themes holder URI. * * @returns The themes holder URI. */ private getThemesUri(): string { const uri = this.themes; return uri; } /** * Retrieves a theme URI. * * @param themeName The theme name. * * @returns The theme URI. */ private getThemeUri(themeName: string): string { const uri = this.urlResolve(this.themes, themeName); return uri; } /** * Retrieves a default theme URI. * * @returns The default theme URI. */ private getThemesDefaultUri(): string { const uri = this.themesDefault; return uri; } /** * Retrieves a theme-dependent resource URI. * * @param resourceName The resource name. * @param themeName The theme name. * * @returns The theme-dependent resource URI. */ public getResourceUri(resourceName: string, themeName: string): string { if (typeof themeName === 'undefined') { themeName = this.getThemesDefaultUri(); } else { themeName = this.getTheme(themeName); } const uri = this.urlResolve(themeName, resourceName); return uri; } /** * Resolves an url to a base. * * @param base The base. * @param url The url to process. * * @returns The resolved url. */ public urlResolve(base: string, url: string): string { return base + '/' + url; } }