com.phloxui
Version:
PhloxUI Ng2+ Framework
165 lines (164 loc) • 18.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { Headers, RequestOptions, RequestMethod } from '@angular/http';
import { ConnectionManager } from './ConnectionManager.service';
var JsonSchemaService = /** @class */ (function () {
function JsonSchemaService(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 {?}
*/
JsonSchemaService.prototype.getSchema = /**
* @param {?} className
* @return {?}
*/
function (className) {
var _this = this;
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(function (resolve, reject) {
// cache only default load
var /** @type {?} */ path = _this.basePath + "/" + className + "/schema";
var /** @type {?} */ headers = new Headers(_this.defaultHeaders.toJSON());
var /** @type {?} */ requestOptions = new RequestOptions({
method: RequestMethod.Get,
headers: headers
});
var /** @type {?} */ prom = _this.connectionMgr.getWithHttpInfo(path, requestOptions);
prom.then(function (response) {
var /** @type {?} */ jsonSchemaResult = null;
if (response !== null && typeof response !== 'undefined') {
jsonSchemaResult = response.json();
if (jsonSchemaResult !== null && typeof jsonSchemaResult !== 'undefined') {
// cache result
// cache result
_this.schemaCached[className] = jsonSchemaResult;
}
}
resolve(jsonSchemaResult);
}, function (errorResult) {
reject(errorResult);
});
}).catch(function (error) {
return Promise.reject(error);
});
};
/**
* @param {?} className
* @param {?} ignoreNull
* @param {?} ignoreEmpty
* @param {?} ignorePropRegex
* @param {?} includePropsFields
* @return {?}
*/
JsonSchemaService.prototype.getSchemaWithConfigs = /**
* @param {?} className
* @param {?} ignoreNull
* @param {?} ignoreEmpty
* @param {?} ignorePropRegex
* @param {?} includePropsFields
* @return {?}
*/
function (className, ignoreNull, ignoreEmpty, ignorePropRegex, includePropsFields) {
var _this = this;
if (className === null || typeof className !== 'string' || className === '') {
return Promise.resolve(null);
}
return new Promise(function (resolve, reject) {
// cache only default load
var /** @type {?} */ path = _this.basePath + "/" + className + "/schema";
var /** @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') {
var /** @type {?} */ nameAppendStmt = "";
try {
for (var includePropsFields_1 = tslib_1.__values(includePropsFields), includePropsFields_1_1 = includePropsFields_1.next(); !includePropsFields_1_1.done; includePropsFields_1_1 = includePropsFields_1.next()) {
var name_1 = includePropsFields_1_1.value;
nameAppendStmt += name_1 + ",";
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (includePropsFields_1_1 && !includePropsFields_1_1.done && (_a = includePropsFields_1.return)) _a.call(includePropsFields_1);
}
finally { if (e_1) throw e_1.error; }
}
if (nameAppendStmt !== '') {
nameAppendStmt = nameAppendStmt.slice(0, nameAppendStmt.length - 1);
pathParam += "includePropsFields=" + nameAppendStmt + "&";
}
}
if (pathParam !== "") {
pathParam = pathParam.slice(0, pathParam.length - 1);
path += "?" + pathParam;
}
var /** @type {?} */ headers = new Headers(_this.defaultHeaders.toJSON());
var /** @type {?} */ requestOptions = new RequestOptions({
method: RequestMethod.Get,
headers: headers
});
var /** @type {?} */ prom = _this.connectionMgr.getWithHttpInfo(path, requestOptions);
prom.then(function (response) {
var /** @type {?} */ jsonSchemaResult = null;
if (response !== null && typeof response !== 'undefined') {
jsonSchemaResult = response.json();
}
resolve(jsonSchemaResult);
}, function (errorResult) {
reject(errorResult);
});
var e_1, _a;
}).catch(function (error) {
return Promise.reject(error);
});
};
JsonSchemaService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
JsonSchemaService.ctorParameters = function () { return [
{ type: ConnectionManager, },
]; };
return JsonSchemaService;
}());
export { JsonSchemaService };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblNjaGVtYVNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvSnNvblNjaGVtYVNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFrQixPQUFPLEVBQUUsY0FBYyxFQUE0RCxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakosT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0lBYTlELDJCQUFZLGFBQWdDO3dCQUh2QixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCO1FBSTVFLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQUNyQzs7Ozs7SUFFTSxxQ0FBUzs7OztjQUFDLFNBQWlCOztRQUNoQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUN0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QUUsY0FBYyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFDLFFBQWE7Z0JBQ3RCLHFCQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQztnQkFDakMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUN6RCxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ3BDO2dCQUVELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzNCLEVBQUUsVUFBQyxXQUFXO2dCQUNiLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNyQixDQUFDLENBQUM7O1NBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLEtBQUs7WUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QixDQUFDLENBQUM7OztnQkE3R04sVUFBVTs7OztnQkFMRixpQkFBaUI7OzRCQUYxQjs7U0FRYSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwLCBSZXNwb25zZSwgSGVhZGVycywgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RPcHRpb25zQXJncywgVVJMU2VhcmNoUGFyYW1zLCBSZXNwb25zZUNvbnRlbnRUeXBlLCBSZXF1ZXN0TWV0aG9kIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTWFuYWdlciB9IGZyb20gJy4vQ29ubmVjdGlvbk1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcblxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKc29uU2NoZW1hU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uTWdyOiBDb25uZWN0aW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSBzY2hlbWFDYWNoZWQ6IGFueTsgLy8gTWFwPFN0cmluZ1tjbGFzc05hbWVdLCBKc29uU2NoZW1hPlxuICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOjgwODEvaGVsbG8vanNvbic7XG4gIHB1YmxpYyBkZWZhdWx0SGVhZGVyczogSGVhZGVycztcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uTWdyOiBDb25uZWN0aW9uTWFuYWdlcikge1xuICAgIHRoaXMuY29ubmVjdGlvbk1nciA9IGNvbm5lY3Rpb25NZ3I7XG4gICAgdGhpcy5zY2hlbWFDYWNoZWQgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRIZWFkZXJzID0gbmV3IEhlYWRlcnMoKTsgLy8gZGVmYXVsdCBtb3JlIGlmIGV4aXN0XG4gIH1cblxuICBwdWJsaWMgZ2V0U2NoZW1hKGNsYXNzTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmIChjbGFzc05hbWUgPT09IG51bGwgfHwgdHlwZW9mIGNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgY2xhc3NOYW1lID09PSAnJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBjYWNoZSBvbmx5IGRlZmF1bHQgbG9hZFxuICAgICAgbGV0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgXCIvXCIgKyBjbGFzc05hbWUgKyBcIi9zY2hlbWFcIjtcblxuICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh0aGlzLmRlZmF1bHRIZWFkZXJzLnRvSlNPTigpKTtcbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnNBcmdzID0gbmV3IFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kLkdldCxcbiAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9tID0gdGhpcy5jb25uZWN0aW9uTWdyLmdldFdpdGhIdHRwSW5mbyhwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICBwcm9tLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGpzb25TY2hlbWFSZXN1bHQ6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAganNvblNjaGVtYVJlc3VsdCA9IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICAgIGlmIChqc29uU2NoZW1hUmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiBqc29uU2NoZW1hUmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gY2FjaGUgcmVzdWx0XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNhY2hlZFtjbGFzc05hbWVdID0ganNvblNjaGVtYVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGpzb25TY2hlbWFSZXN1bHQpO1xuICAgICAgfSwgKGVycm9yUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvclJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2NoZW1hV2l0aENvbmZpZ3MoY2xhc3NOYW1lOiBzdHJpbmcsIGlnbm9yZU51bGw6IGJvb2xlYW4sIGlnbm9yZUVtcHR5OiBib29sZWFuLCBpZ25vcmVQcm9wUmVnZXg6IHN0cmluZywgaW5jbHVkZVByb3BzRmllbGRzOiBTdHJpbmdbXSk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBpZiAoY2xhc3NOYW1lID09PSBudWxsIHx8IHR5cGVvZiBjbGFzc05hbWUgIT09ICdzdHJpbmcnIHx8IGNsYXNzTmFtZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBjYWNoZSBvbmx5IGRlZmF1bHQgbG9hZFxuICAgICAgbGV0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgXCIvXCIgKyBjbGFzc05hbWUgKyBcIi9zY2hlbWFcIjtcblxuICAgICAgbGV0IHBhdGhQYXJhbSA9IFwiXCI7XG4gICAgICBpZiAoaWdub3JlTnVsbCAhPT0gbnVsbCAmJiB0eXBlb2YgaWdub3JlTnVsbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGF0aFBhcmFtICs9IFwiaWdub3JlTnVsbD1cIiArIChpZ25vcmVOdWxsID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpICsgXCImXCI7XG4gICAgICB9XG4gICAgICBpZiAoaWdub3JlRW1wdHkgIT09IG51bGwgJiYgdHlwZW9mIGlnbm9yZUVtcHR5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwYXRoUGFyYW0gKz0gXCJpZ25vcmVFbXB0eT1cIiArIChpZ25vcmVFbXB0eSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKSArIFwiJlwiO1xuICAgICAgfVxuICAgICAgaWYgKGlnbm9yZVByb3BSZWdleCAhPT0gbnVsbCAmJiB0eXBlb2YgaWdub3JlUHJvcFJlZ2V4ICE9PSAndW5kZWZpbmVkJyAmJiBpZ25vcmVQcm9wUmVnZXggIT09ICcnKSB7XG4gICAgICAgIHBhdGhQYXJhbSArPSBcImlnbm9yZVByb3BSZWdleD1cIiArIGlnbm9yZVByb3BSZWdleCArIFwiJlwiO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVQcm9wc0ZpZWxkcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5jbHVkZVByb3BzRmllbGRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgbmFtZUFwcGVuZFN0bXQgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBuYW1lIG9mIGluY2x1ZGVQcm9wc0ZpZWxkcykge1xuICAgICAgICAgIG5hbWVBcHBlbmRTdG10ICs9IG5hbWUgKyBcIixcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lQXBwZW5kU3RtdCAhPT0gJycpIHtcbiAgICAgICAgICBuYW1lQXBwZW5kU3RtdCA9IG5hbWVBcHBlbmRTdG10LnNsaWNlKDAsIG5hbWVBcHBlbmRTdG10Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgIHBhdGhQYXJhbSArPSBcImluY2x1ZGVQcm9wc0ZpZWxkcz1cIiArIG5hbWVBcHBlbmRTdG10ICsgXCImXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGhQYXJhbSAhPT0gXCJcIikge1xuICAgICAgICBwYXRoUGFyYW0gPSBwYXRoUGFyYW0uc2xpY2UoMCwgcGF0aFBhcmFtLmxlbmd0aCAtIDEpO1xuICAgICAgICBwYXRoICs9IFwiP1wiICsgcGF0aFBhcmFtO1xuICAgICAgfVxuXG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHRoaXMuZGVmYXVsdEhlYWRlcnMudG9KU09OKCkpO1xuICAgICAgbGV0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICBtZXRob2Q6IFJlcXVlc3RNZXRob2QuR2V0LFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXG4gICAgICB9KTtcblxuICAgICAgbGV0IHByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IuZ2V0V2l0aEh0dHBJbmZvKHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgIHByb20udGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBsZXQganNvblNjaGVtYVJlc3VsdDogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSBudWxsICYmIHR5cGVvZiByZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBqc29uU2NoZW1hUmVzdWx0ID0gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShqc29uU2NoZW1hUmVzdWx0KTtcbiAgICAgIH0sIChlcnJvclJlc3VsdCkgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3JSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=