com.phloxui
Version:
PhloxUI Ng2+ Framework
299 lines (298 loc) • 26.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable';
import { I18N } from '../../decorator/decorators';
export class TableRowController extends AbstractI18NApplicable {
/**
* @param {?} table
* @param {?=} data
*/
constructor(table, data) {
super();
this.table = table;
this.data = data;
this.cellEditing = new Array(table.getModel().getColumnModels().length);
// Init default values
for (let /** @type {?} */ index = 0; index < this.cellEditing.length; index++) {
this.cellEditing[index] = false;
}
this.selfEditable = table.getModel().getRowModel().isEditable();
this.wrapperHandler = (event) => {
this.instance = event.instance;
if (typeof this.instance.setController === 'function') {
// If it is an instance of ITableRow, call setController() automatically.
this.instance.setController(this);
}
if (typeof this.instance.initialize === 'function') {
// If it is an instance of ITableComponent, call initialize() automatically.
this.instance.initialize(this.table);
}
// Apply i18n automatically (in case of this.applyI18N() was called before creating component instance).
this.applyI18N(this.i18nValue);
};
if (table.getModel() && table.getModel().getRowModel() && table.getModel().getRowModel().getCellModels()
&& Array.isArray(table.getModel().getRowModel().getCellModels())) {
this.cellComponents = new Array(table.getModel().getRowModel().getCellModels().length);
}
else {
this.cellComponents = [];
}
}
/**
* @return {?}
*/
getRowIndex() {
return this.table.getRowIndex(this);
}
/**
* @return {?}
*/
getTable() {
return this.table;
}
/**
* @return {?}
*/
getComponentInstance() {
return this.instance;
}
/**
* @return {?}
*/
getCellComponentInstances() {
if (this.cellComponents === null || typeof this.cellComponents === 'undefined' || !Array.isArray(this.cellComponents)) {
return null;
}
return [].concat(this.cellComponents);
}
/**
* @param {?} index
* @return {?}
*/
getCellComponentInstanceAt(index) {
if (this.cellComponents === null || typeof this.cellComponents === 'undefined' || !Array.isArray(this.cellComponents)) {
return null;
}
if (index === null || typeof index !== 'number') {
return null;
}
if (index < 0 || index >= this.cellComponents.length) {
return null;
}
return this.cellComponents[index];
}
/**
* @param {?} index
* @param {?} component
* @return {?}
*/
setCellComponentInstanceAt(index, component) {
if (this.cellComponents === null || typeof this.cellComponents === 'undefined' || !Array.isArray(this.cellComponents)) {
return;
}
if (index < 0 || index >= this.cellComponents.length) {
return;
}
this.cellComponents[index] = component;
}
/**
* @return {?}
*/
resetCellComponents() {
this.cellComponents = [];
}
/**
* @return {?}
*/
getData() {
return this.data;
}
/**
* @param {?} data
* @return {?}
*/
setData(data) {
this.data = data;
}
/**
* @return {?}
*/
isSelfEditable() {
return this.selfEditable;
}
/**
* @param {?} editable
* @return {?}
*/
setSelfEditable(editable) {
this.selfEditable = editable;
}
/**
* @return {?}
*/
isEditable() {
if (this.table === null || typeof this.table === 'undefined') {
return false;
}
let /** @type {?} */ tblModel = this.table.getModel();
if (tblModel === null || typeof tblModel === 'undefined') {
return false;
}
let /** @type {?} */ rowModel = tblModel.rowModel;
if (rowModel === null || typeof rowModel === 'undefined') {
return false;
}
if (this.table.getModel().getRowModel().isEditable()) {
if (!this.isSelfEditable()) {
return false;
}
else {
return true;
}
}
else {
if (this.isSelfEditable()) {
return true;
}
else {
return false;
}
}
}
/**
* @param {?} editing
* @return {?}
*/
setEditing(editing) {
for (let /** @type {?} */ index = 0; index < this.table.getModel().getRowModel().getCellModels().length; index++) {
this.setCellEditing(index, editing);
}
}
/**
* @return {?}
*/
isEditing() {
for (let /** @type {?} */ index = 0; index < this.table.getModel().getRowModel().getCellModels().length; index++) {
let /** @type {?} */ editing = this.isCellEditing(index);
if (editing) {
return true;
}
}
return false;
}
/**
* @return {?}
*/
isEditingMode() {
for (let /** @type {?} */ index = 0; index < this.table.getModel().getRowModel().getCellModels().length; index++) {
let /** @type {?} */ editing = this.isCellEditingMode(index);
if (editing) {
return true;
}
}
return false;
}
/**
* @param {?} index
* @return {?}
*/
isCellEditable(index) {
if (index >= this.getTable().getModel().getColumnModels().length) {
return false;
}
let /** @type {?} */ cell = this.getTable().getModel().getRowModel().getCellModels()[index];
if (cell.getEditorComponentType() === null || cell.getEditorComponentType() === undefined) {
return false;
}
return this.isEditable() && this.getTable().getModel().getColumnModels()[index].isEditable();
}
/**
* @param {?} index
* @return {?}
*/
isCellEditingMode(index) {
return this.isCellEditable(index) && this.isCellEditing(index);
}
/**
* @param {?} index
* @return {?}
*/
isCellEditing(index) {
if (index >= this.cellEditing.length) {
return false;
}
return this.cellEditing[index];
}
/**
* @param {?} index
* @param {?} editing
* @return {?}
*/
setCellEditing(index, editing) {
if (index >= this.cellEditing.length) {
return;
}
let /** @type {?} */ cell = this.getTable().getModel().getRowModel().getCellModels()[index];
if (cell === null || cell === undefined) {
return;
}
if (cell.getEditorComponentType() !== null && cell.getEditorComponentType() !== undefined) {
this.cellEditing[index] = editing;
}
}
/**
* @return {?}
*/
getWrapperHandler() {
return this.wrapperHandler;
}
/**
* @param {?} oldState
* @return {?}
*/
loadState(oldState) {
this.oldState = oldState;
if (oldState === null || typeof oldState === 'undefined') {
return;
}
this.setEditing(oldState.isEditing());
}
/**
* @return {?}
*/
getOldState() {
return this.oldState;
}
}
tslib_1.__decorate([
I18N({
bypass: true
}),
tslib_1.__metadata("design:type", Object)
], TableRowController.prototype, "instance", void 0);
tslib_1.__decorate([
I18N('cells'),
tslib_1.__metadata("design:type", Array)
], TableRowController.prototype, "cellComponents", void 0);
function TableRowController_tsickle_Closure_declarations() {
/** @type {?} */
TableRowController.prototype.table;
/** @type {?} */
TableRowController.prototype.instance;
/** @type {?} */
TableRowController.prototype.data;
/** @type {?} */
TableRowController.prototype.cellEditing;
/** @type {?} */
TableRowController.prototype.selfEditable;
/** @type {?} */
TableRowController.prototype.wrapperHandler;
/** @type {?} */
TableRowController.prototype.cellComponents;
/** @type {?} */
TableRowController.prototype.oldState;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVSb3dDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L3RhYmxlL1RhYmxlUm93Q29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRCxNQUFNLHlCQUEwQixTQUFRLHNCQUFzQjs7Ozs7Z0JBZXpDLEtBQWlCLEVBQUUsSUFBVTtRQUM5QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztRQUV4RSxHQUFHLENBQUMsQ0FBQyxxQkFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUUvQixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7O2dCQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQzs7Z0JBRW5ELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0Qzs7WUFHRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoQyxDQUFDO1FBR0YsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxFQUFFO2VBQ25HLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hGO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztTQUMxQjs7Ozs7SUFHSSxXQUFXO1FBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7SUFHL0IsUUFBUTtRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzs7OztJQUdiLG9CQUFvQjtRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7SUFHaEIseUJBQXlCO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEgsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzs7Ozs7SUFHakMsMEJBQTBCLENBQUMsS0FBYTtRQUM3QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RILE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7UUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7Ozs7SUFHN0IsMEJBQTBCLENBQUMsS0FBYSxFQUFFLFNBQWM7UUFDN0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0SCxNQUFNLENBQUM7U0FDUjtRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUM7U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDOzs7OztJQUdsQyxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7Ozs7O0lBR3BCLE9BQU87UUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7O0lBR1osT0FBTyxDQUFDLElBQVM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Ozs7O0lBR1osY0FBYztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7Ozs7O0lBR3BCLGVBQWUsQ0FBQyxRQUFpQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQzs7Ozs7SUFHeEIsVUFBVTtRQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDZDtRQUVELHFCQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxxQkFBSSxRQUFRLEdBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2Q7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNkO1NBQ0Y7Ozs7OztJQUdJLFVBQVUsQ0FBQyxPQUFnQjtRQUNoQyxHQUFHLENBQUMsQ0FBQyxxQkFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQ3BDOzs7OztJQUdJLFNBQVM7UUFDZCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hHLHFCQUFJLE9BQU8sR0FBWSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7OztJQUdSLGFBQWE7UUFDbEIsR0FBRyxDQUFDLENBQUMscUJBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoRyxxQkFBSSxPQUFPLEdBQVksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHUixjQUFjLENBQUMsS0FBYTtRQUNqQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakUsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBRUQscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxRixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7Ozs7O0lBR3hGLGlCQUFpQixDQUFDLEtBQWE7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Ozs7O0lBRzFELGFBQWEsQ0FBQyxLQUFhO1FBQ2hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7Ozs7SUFHMUIsY0FBYyxDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUNuRCxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQztTQUNSO1FBRUQscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQTtTQUNQO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDbkM7Ozs7O0lBR0ksaUJBQWlCO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7Ozs7SUFHdEIsU0FBUyxDQUFDLFFBQTZCO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUM7U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Ozs7O0lBR2pDLFdBQVc7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7O0NBR3hCOztJQTVPRSxJQUFJLENBQUM7UUFDSixNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUM7Ozs7SUFNRCxJQUFJLENBQUMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGhsb3hUYWJsZSB9IGZyb20gJy4vUGhsb3hUYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vSVRhYmxlUm93Q29udHJvbGxlcic7XG5pbXBvcnQgeyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIH0gZnJvbSAnLi4vLi4vc2hhcmUvQWJzdHJhY3RJMThOQXBwbGljYWJsZSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dDb250cm9sbGVyIGV4dGVuZHMgQWJzdHJhY3RJMThOQXBwbGljYWJsZSBpbXBsZW1lbnRzIElUYWJsZVJvd0NvbnRyb2xsZXIge1xuXG4gIHByb3RlY3RlZCB0YWJsZTogUGhsb3hUYWJsZTtcbiAgQEkxOE4oe1xuICAgIGJ5cGFzczogdHJ1ZVxuICB9KVxuICBwcm90ZWN0ZWQgaW5zdGFuY2U6IGFueTtcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgcHJvdGVjdGVkIGNlbGxFZGl0aW5nOiBib29sZWFuW107XG4gIHByb3RlY3RlZCBzZWxmRWRpdGFibGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB3cmFwcGVySGFuZGxlcjogRnVuY3Rpb247XG4gIEBJMThOKCdjZWxscycpXG4gIHByb3RlY3RlZCBjZWxsQ29tcG9uZW50czogYW55W107XG4gIHByb3RlY3RlZCBvbGRTdGF0ZTogSVRhYmxlUm93Q29udHJvbGxlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IodGFibGU6IFBobG94VGFibGUsIGRhdGE/OiBhbnkpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICB0aGlzLmNlbGxFZGl0aW5nID0gbmV3IEFycmF5KHRhYmxlLmdldE1vZGVsKCkuZ2V0Q29sdW1uTW9kZWxzKCkubGVuZ3RoKTtcbiAgICAvLyBJbml0IGRlZmF1bHQgdmFsdWVzXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2VsbEVkaXRpbmcubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmNlbGxFZGl0aW5nW2luZGV4XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZkVkaXRhYmxlID0gdGFibGUuZ2V0TW9kZWwoKS5nZXRSb3dNb2RlbCgpLmlzRWRpdGFibGUoKTtcblxuICAgIHRoaXMud3JhcHBlckhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IGV2ZW50Lmluc3RhbmNlO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdGFuY2Uuc2V0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiBJVGFibGVSb3csIGNhbGwgc2V0Q29udHJvbGxlcigpIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0Q29udHJvbGxlcih0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0YW5jZS5pbml0aWFsaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIElmIGl0IGlzIGFuIGluc3RhbmNlIG9mIElUYWJsZUNvbXBvbmVudCwgY2FsbCBpbml0aWFsaXplKCkgYXV0b21hdGljYWxseS5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5pbml0aWFsaXplKHRoaXMudGFibGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBpMThuIGF1dG9tYXRpY2FsbHkgKGluIGNhc2Ugb2YgdGhpcy5hcHBseUkxOE4oKSB3YXMgY2FsbGVkIGJlZm9yZSBjcmVhdGluZyBjb21wb25lbnQgaW5zdGFuY2UpLlxuICAgICAgdGhpcy5hcHBseUkxOE4odGhpcy5pMThuVmFsdWUpO1xuICAgIH07XG5cblxuICAgIGlmICh0YWJsZS5nZXRNb2RlbCgpICYmIHRhYmxlLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKSAmJiB0YWJsZS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q2VsbE1vZGVscygpXG4gICAgICAmJiBBcnJheS5pc0FycmF5KHRhYmxlLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDZWxsTW9kZWxzKCkpKSB7XG4gICAgICB0aGlzLmNlbGxDb21wb25lbnRzID0gbmV3IEFycmF5KHRhYmxlLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDZWxsTW9kZWxzKCkubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jZWxsQ29tcG9uZW50cyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFJvd0luZGV4KHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlKCk6IFBobG94VGFibGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbENvbXBvbmVudEluc3RhbmNlcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuY2VsbENvbXBvbmVudHMgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuY2VsbENvbXBvbmVudHMgPT09ICd1bmRlZmluZWQnIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuY2VsbENvbXBvbmVudHMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW10uY29uY2F0KHRoaXMuY2VsbENvbXBvbmVudHMpO1xuICB9XG5cbiAgcHVibGljIGdldENlbGxDb21wb25lbnRJbnN0YW5jZUF0KGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGlmICh0aGlzLmNlbGxDb21wb25lbnRzID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLmNlbGxDb21wb25lbnRzID09PSAndW5kZWZpbmVkJyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmNlbGxDb21wb25lbnRzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpbmRleCA9PT0gbnVsbCB8fCB0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNlbGxDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2VsbENvbXBvbmVudHNbaW5kZXhdO1xuICB9XG5cbiAgcHVibGljIHNldENlbGxDb21wb25lbnRJbnN0YW5jZUF0KGluZGV4OiBudW1iZXIsIGNvbXBvbmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2VsbENvbXBvbmVudHMgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuY2VsbENvbXBvbmVudHMgPT09ICd1bmRlZmluZWQnIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuY2VsbENvbXBvbmVudHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jZWxsQ29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNlbGxDb21wb25lbnRzW2luZGV4XSA9IGNvbXBvbmVudDtcbiAgfVxuXG4gIHB1YmxpYyByZXNldENlbGxDb21wb25lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbENvbXBvbmVudHMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxmRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZkVkaXRhYmxlO1xuICB9XG5cbiAgcHVibGljIHNldFNlbGZFZGl0YWJsZShlZGl0YWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZkVkaXRhYmxlID0gZWRpdGFibGU7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy50YWJsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgdGJsTW9kZWw6IGFueSA9IHRoaXMudGFibGUuZ2V0TW9kZWwoKTtcbiAgICBpZiAodGJsTW9kZWwgPT09IG51bGwgfHwgdHlwZW9mIHRibE1vZGVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCByb3dNb2RlbDogYW55ID0gdGJsTW9kZWwucm93TW9kZWw7XG4gICAgaWYgKHJvd01vZGVsID09PSBudWxsIHx8IHR5cGVvZiByb3dNb2RlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuaXNFZGl0YWJsZSgpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNTZWxmRWRpdGFibGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNTZWxmRWRpdGFibGUoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdGluZyhlZGl0aW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudGFibGUuZ2V0TW9kZWwoKS5nZXRSb3dNb2RlbCgpLmdldENlbGxNb2RlbHMoKS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMuc2V0Q2VsbEVkaXRpbmcoaW5kZXgsIGVkaXRpbmcpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWRpdGluZygpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50YWJsZS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q2VsbE1vZGVscygpLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbGV0IGVkaXRpbmc6IGJvb2xlYW4gPSB0aGlzLmlzQ2VsbEVkaXRpbmcoaW5kZXgpO1xuXG4gICAgICBpZiAoZWRpdGluZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0aW5nTW9kZSgpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50YWJsZS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q2VsbE1vZGVscygpLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbGV0IGVkaXRpbmc6IGJvb2xlYW4gPSB0aGlzLmlzQ2VsbEVkaXRpbmdNb2RlKGluZGV4KTtcblxuICAgICAgaWYgKGVkaXRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzQ2VsbEVkaXRhYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5nZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Q29sdW1uTW9kZWxzKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGNlbGwgPSB0aGlzLmdldFRhYmxlKCkuZ2V0TW9kZWwoKS5nZXRSb3dNb2RlbCgpLmdldENlbGxNb2RlbHMoKVtpbmRleF07XG5cbiAgICBpZiAoY2VsbC5nZXRFZGl0b3JDb21wb25lbnRUeXBlKCkgPT09IG51bGwgfHwgY2VsbC5nZXRFZGl0b3JDb21wb25lbnRUeXBlKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzRWRpdGFibGUoKSAmJiB0aGlzLmdldFRhYmxlKCkuZ2V0TW9kZWwoKS5nZXRDb2x1bW5Nb2RlbHMoKVtpbmRleF0uaXNFZGl0YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGlzQ2VsbEVkaXRpbmdNb2RlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0NlbGxFZGl0YWJsZShpbmRleCkgJiYgdGhpcy5pc0NlbGxFZGl0aW5nKGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NlbGxFZGl0aW5nKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5jZWxsRWRpdGluZy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jZWxsRWRpdGluZ1tpbmRleF07XG4gIH1cblxuICBwdWJsaWMgc2V0Q2VsbEVkaXRpbmcoaW5kZXg6IG51bWJlciwgZWRpdGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLmNlbGxFZGl0aW5nLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjZWxsID0gdGhpcy5nZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDZWxsTW9kZWxzKClbaW5kZXhdO1xuXG4gICAgaWYgKGNlbGwgPT09IG51bGwgfHwgY2VsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2VsbC5nZXRFZGl0b3JDb21wb25lbnRUeXBlKCkgIT09IG51bGwgJiYgY2VsbC5nZXRFZGl0b3JDb21wb25lbnRUeXBlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jZWxsRWRpdGluZ1tpbmRleF0gPSBlZGl0aW5nO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRXcmFwcGVySGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgbG9hZFN0YXRlKG9sZFN0YXRlOiBJVGFibGVSb3dDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhpcy5vbGRTdGF0ZSA9IG9sZFN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBudWxsIHx8IHR5cGVvZiBvbGRTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldEVkaXRpbmcob2xkU3RhdGUuaXNFZGl0aW5nKCkpO1xuICB9XG5cbiAgcHVibGljIGdldE9sZFN0YXRlKCk6IElUYWJsZVJvd0NvbnRyb2xsZXIge1xuICAgIHJldHVybiB0aGlzLm9sZFN0YXRlO1xuICB9XG5cbn1cbiJdfQ==