提交 016cef69 编写于 作者: S Sandeep Somavarapu

Smart merge of override contents

上级 0d3c0dcb
......@@ -60,17 +60,33 @@ export class ConfigurationModel implements IConfiguraionModel {
}
public override<V>(identifier: string): ConfigurationModel {
const result = new ConfigurationModel();
const contents = objects.clone<any>(this.contents);
if (this._overrides) {
for (const override of this._overrides) {
if (override.identifiers.indexOf(identifier) !== -1) {
merge(contents, override.contents, true);
const overrideContents = this.getContentsForOverrideIdentifer(identifier);
if (!overrideContents) {
// If there are no overrides, use base contents
return new ConfigurationModel(this._contents);
}
let contents = {};
for (const key of Object.keys(this._contents)) {
let contentsForKey = this._contents[key];
let overrideContentsForKey = overrideContents[key];
// If there are override contents for the key clone and merge otherwise use base contents
if (overrideContentsForKey) {
// Clone and merge only if base contents is of type object otherwise just override
if (typeof contentsForKey === 'object') {
contentsForKey = objects.clone(contents[key]);
merge(contentsForKey, overrideContentsForKey, true);
} else {
contentsForKey = overrideContentsForKey;
}
}
result._contents = contents;
return result;
contents[key] = contentsForKey;
}
return new ConfigurationModel(contents);
}
public merge(other: ConfigurationModel, overwrite: boolean = true): ConfigurationModel {
......@@ -93,6 +109,15 @@ export class ConfigurationModel implements IConfiguraionModel {
}
source._overrides = overrides;
}
private getContentsForOverrideIdentifer(identifier: string): any {
for (const override of this._overrides) {
if (override.identifiers.indexOf(identifier) !== -1) {
return override.contents;
}
}
return null;
}
}
export class DefaultConfigurationModel extends ConfigurationModel {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册