com.phloxui
Version:
PhloxUI Ng2+ Framework
139 lines (138 loc) • 17.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { Headers, RequestOptions, RequestMethod } from '@angular/http';
import { ConnectionManager } from './ConnectionManager.service';
export class JsonSchemaService {
/**
* @param {?} connectionMgr
*/
constructor(connectionMgr) {
this.basePath = 'http://' + window.location.hostname + ':8081/hello/json';
this.connectionMgr = connectionMgr;
this.schemaCached = {};
this.defaultHeaders = new Headers(); // default more if exist
}
/**
* @param {?} className
* @return {?}
*/
getSchema(className) {
if (className === null || typeof className !== 'string' || className === '') {
return Promise.resolve(null);
}
if (this.schemaCached[className] !== null && typeof this.schemaCached[className] !== 'undefined') {
return Promise.resolve(this.schemaCached[className]);
}
return new Promise((resolve, reject) => {
// cache only default load
let /** @type {?} */ path = this.basePath + "/" + className + "/schema";
let /** @type {?} */ headers = new Headers(this.defaultHeaders.toJSON());
let /** @type {?} */ requestOptions = new RequestOptions({
method: RequestMethod.Get,
headers: headers
});
let /** @type {?} */ prom = this.connectionMgr.getWithHttpInfo(path, requestOptions);
prom.then((response) => {
let /** @type {?} */ jsonSchemaResult = null;
if (response !== null && typeof response !== 'undefined') {
jsonSchemaResult = response.json();
if (jsonSchemaResult !== null && typeof jsonSchemaResult !== 'undefined') {
// cache result
this.schemaCached[className] = jsonSchemaResult;
}
}
resolve(jsonSchemaResult);
}, (errorResult) => {
reject(errorResult);
});
}).catch((error) => {
return Promise.reject(error);
});
}
/**
* @param {?} className
* @param {?} ignoreNull
* @param {?} ignoreEmpty
* @param {?} ignorePropRegex
* @param {?} includePropsFields
* @return {?}
*/
getSchemaWithConfigs(className, ignoreNull, ignoreEmpty, ignorePropRegex, includePropsFields) {
if (className === null || typeof className !== 'string' || className === '') {
return Promise.resolve(null);
}
return new Promise((resolve, reject) => {
// cache only default load
let /** @type {?} */ path = this.basePath + "/" + className + "/schema";
let /** @type {?} */ pathParam = "";
if (ignoreNull !== null && typeof ignoreNull !== 'undefined') {
pathParam += "ignoreNull=" + (ignoreNull ? "true" : "false") + "&";
}
if (ignoreEmpty !== null && typeof ignoreEmpty !== 'undefined') {
pathParam += "ignoreEmpty=" + (ignoreEmpty ? "true" : "false") + "&";
}
if (ignorePropRegex !== null && typeof ignorePropRegex !== 'undefined' && ignorePropRegex !== '') {
pathParam += "ignorePropRegex=" + ignorePropRegex + "&";
}
if (includePropsFields !== null && typeof includePropsFields !== 'undefined') {
let /** @type {?} */ nameAppendStmt = "";
for (let /** @type {?} */ name of includePropsFields) {
nameAppendStmt += name + ",";
}
if (nameAppendStmt !== '') {
nameAppendStmt = nameAppendStmt.slice(0, nameAppendStmt.length - 1);
pathParam += "includePropsFields=" + nameAppendStmt + "&";
}
}
if (pathParam !== "") {
pathParam = pathParam.slice(0, pathParam.length - 1);
path += "?" + pathParam;
}
let /** @type {?} */ headers = new Headers(this.defaultHeaders.toJSON());
let /** @type {?} */ requestOptions = new RequestOptions({
method: RequestMethod.Get,
headers: headers
});
let /** @type {?} */ prom = this.connectionMgr.getWithHttpInfo(path, requestOptions);
prom.then((response) => {
let /** @type {?} */ jsonSchemaResult = null;
if (response !== null && typeof response !== 'undefined') {
jsonSchemaResult = response.json();
}
resolve(jsonSchemaResult);
}, (errorResult) => {
reject(errorResult);
});
}).catch((error) => {
return Promise.reject(error);
});
}
}
JsonSchemaService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
JsonSchemaService.ctorParameters = () => [
{ type: ConnectionManager, },
];
function JsonSchemaService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
JsonSchemaService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
JsonSchemaService.ctorParameters;
/** @type {?} */
JsonSchemaService.prototype.connectionMgr;
/** @type {?} */
JsonSchemaService.prototype.schemaCached;
/** @type {?} */
JsonSchemaService.prototype.basePath;
/** @type {?} */
JsonSchemaService.prototype.defaultHeaders;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblNjaGVtYVNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvSnNvblNjaGVtYVNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFVLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWtCLE9BQU8sRUFBRSxjQUFjLEVBQTRELGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU1oRSxNQUFNOzs7O0lBT0osWUFBWSxhQUFnQzt3QkFIdkIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLGtCQUFrQjtRQUk1RSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7S0FDckM7Ozs7O0lBRU0sU0FBUyxDQUFDLFNBQWlCO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFD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QUksRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzFCLHFCQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQztnQkFDakMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUN6RCxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ3BDO2dCQUVELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzNCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3JCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QixDQUFDLENBQUM7Ozs7WUE3R04sVUFBVTs7OztZQUxGLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHAsIFJlc3BvbnNlLCBIZWFkZXJzLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdE9wdGlvbnNBcmdzLCBVUkxTZWFyY2hQYXJhbXMsIFJlc3BvbnNlQ29udGVudFR5cGUsIFJlcXVlc3RNZXRob2QgfSBmcm9tICdAYW5ndWxhci9odHRwJztcbmltcG9ydCB7IENvbm5lY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Db25uZWN0aW9uTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEpzb25TY2hlbWEgfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEpzb25TY2hlbWFTZXJ2aWNlIHtcblxuICBwcml2YXRlIGNvbm5lY3Rpb25NZ3I6IENvbm5lY3Rpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNjaGVtYUNhY2hlZDogYW55OyAvLyBNYXA8U3RyaW5nW2NsYXNzTmFtZV0sIEpzb25TY2hlbWE+XG4gIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6ODA4MS9oZWxsby9qc29uJztcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzOiBIZWFkZXJzO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25NZ3I6IENvbm5lY3Rpb25NYW5hZ2VyKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uTWdyID0gY29ubmVjdGlvbk1ncjtcbiAgICB0aGlzLnNjaGVtYUNhY2hlZCA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMgPSBuZXcgSGVhZGVycygpOyAvLyBkZWZhdWx0IG1vcmUgaWYgZXhpc3RcbiAgfVxuXG4gIHB1YmxpYyBnZXRTY2hlbWEoY2xhc3NOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2YgY2xhc3NOYW1lICE9PSAnc3RyaW5nJyB8fCBjbGFzc05hbWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjaGVtYUNhY2hlZFtjbGFzc05hbWVdICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnNjaGVtYUNhY2hlZFtjbGFzc05hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnNjaGVtYUNhY2hlZFtjbGFzc05hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8UmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNhY2hlIG9ubHkgZGVmYXVsdCBsb2FkXG4gICAgICBsZXQgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyBcIi9cIiArIGNsYXNzTmFtZSArIFwiL3NjaGVtYVwiO1xuXG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHRoaXMuZGVmYXVsdEhlYWRlcnMudG9KU09OKCkpO1xuICAgICAgbGV0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICBtZXRob2Q6IFJlcXVlc3RNZXRob2QuR2V0LFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXG4gICAgICB9KTtcblxuICAgICAgbGV0IHByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IuZ2V0V2l0aEh0dHBJbmZvKHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgIHByb20udGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBsZXQganNvblNjaGVtYVJlc3VsdDogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSBudWxsICYmIHR5cGVvZiByZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBqc29uU2NoZW1hUmVzdWx0ID0gcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICAgICAgaWYgKGpzb25TY2hlbWFSZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIGpzb25TY2hlbWFSZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBjYWNoZSByZXN1bHRcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ2FjaGVkW2NsYXNzTmFtZV0gPSBqc29uU2NoZW1hUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoanNvblNjaGVtYVJlc3VsdCk7XG4gICAgICB9LCAoZXJyb3JSZXN1bHQpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTY2hlbWFXaXRoQ29uZmlncyhjbGFzc05hbWU6IHN0cmluZywgaWdub3JlTnVsbDogYm9vbGVhbiwgaWdub3JlRW1wdHk6IGJvb2xlYW4sIGlnbm9yZVByb3BSZWdleDogc3RyaW5nLCBpbmNsdWRlUHJvcHNGaWVsZHM6IFN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmIChjbGFzc05hbWUgPT09IG51bGwgfHwgdHlwZW9mIGNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgY2xhc3NOYW1lID09PSAnJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8UmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNhY2hlIG9ubHkgZGVmYXVsdCBsb2FkXG4gICAgICBsZXQgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyBcIi9cIiArIGNsYXNzTmFtZSArIFwiL3NjaGVtYVwiO1xuXG4gICAgICBsZXQgcGF0aFBhcmFtID0gXCJcIjtcbiAgICAgIGlmIChpZ25vcmVOdWxsICE9PSBudWxsICYmIHR5cGVvZiBpZ25vcmVOdWxsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwYXRoUGFyYW0gKz0gXCJpZ25vcmVOdWxsPVwiICsgKGlnbm9yZU51bGwgPyBcInRydWVcIiA6IFwiZmFsc2VcIikgKyBcIiZcIjtcbiAgICAgIH1cbiAgICAgIGlmIChpZ25vcmVFbXB0eSAhPT0gbnVsbCAmJiB0eXBlb2YgaWdub3JlRW1wdHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhdGhQYXJhbSArPSBcImlnbm9yZUVtcHR5PVwiICsgKGlnbm9yZUVtcHR5ID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpICsgXCImXCI7XG4gICAgICB9XG4gICAgICBpZiAoaWdub3JlUHJvcFJlZ2V4ICE9PSBudWxsICYmIHR5cGVvZiBpZ25vcmVQcm9wUmVnZXggIT09ICd1bmRlZmluZWQnICYmIGlnbm9yZVByb3BSZWdleCAhPT0gJycpIHtcbiAgICAgICAgcGF0aFBhcmFtICs9IFwiaWdub3JlUHJvcFJlZ2V4PVwiICsgaWdub3JlUHJvcFJlZ2V4ICsgXCImXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVByb3BzRmllbGRzICE9PSBudWxsICYmIHR5cGVvZiBpbmNsdWRlUHJvcHNGaWVsZHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBuYW1lQXBwZW5kU3RtdCA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgaW5jbHVkZVByb3BzRmllbGRzKSB7XG4gICAgICAgICAgbmFtZUFwcGVuZFN0bXQgKz0gbmFtZSArIFwiLFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWVBcHBlbmRTdG10ICE9PSAnJykge1xuICAgICAgICAgIG5hbWVBcHBlbmRTdG10ID0gbmFtZUFwcGVuZFN0bXQuc2xpY2UoMCwgbmFtZUFwcGVuZFN0bXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgcGF0aFBhcmFtICs9IFwiaW5jbHVkZVByb3BzRmllbGRzPVwiICsgbmFtZUFwcGVuZFN0bXQgKyBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFBhcmFtICE9PSBcIlwiKSB7XG4gICAgICAgIHBhdGhQYXJhbSA9IHBhdGhQYXJhbS5zbGljZSgwLCBwYXRoUGFyYW0ubGVuZ3RoIC0gMSk7XG4gICAgICAgIHBhdGggKz0gXCI/XCIgKyBwYXRoUGFyYW07XG4gICAgICB9XG5cbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnModGhpcy5kZWZhdWx0SGVhZGVycy50b0pTT04oKSk7XG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zQXJncyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgIG1ldGhvZDogUmVxdWVzdE1ldGhvZC5HZXQsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5nZXRXaXRoSHR0cEluZm8ocGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgcHJvbS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGxldCBqc29uU2NoZW1hUmVzdWx0OiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpzb25TY2hlbWFSZXN1bHQgPSByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGpzb25TY2hlbWFSZXN1bHQpO1xuICAgICAgfSwgKGVycm9yUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvclJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==