import {AssertUtil} from '../../common/AssertUtil';
import {RuntimeUtil} from '../../common/RuntimeUtil';
import {Dictionary} from '../../common/lang/Dictionary';
import {ObjectUtil} from '../../common/lang/ObjectUtil';
import {ScopeEnum} from '../../common/lang/ScopeEnum';
import {StringUtil} from '../../common/lang/StringUtil';
import {ClassUtil} from '../../common/reflect/ClassUtil';
import {Service} from '../Service';
import {Environment} from './Environment';
//==========================================================
// 环境控制台。
//
// @console
// @author maocy
// @version 150606
//==========================================================
export class EnvironmentService extends Service {
// 范围类型
protected _scopeCd = ScopeEnum.Local;
// 环境变量
protected _environments: Dictionary = null;
//==========================================================
// 构造处理。
//
// @method
//==========================================================
public constructor() {
super();
this._environments = new Dictionary();
}
//==========================================================
// 注册一个环境。
//
// @method
// @param environment:FEnvironment 环境
//==========================================================
public register(environment:Environment) {
var name = environment.name;
AssertUtil.debugNotEmpty(name);
this._environments.set(name, environment);
}
//==========================================================
// 注册一个环境内容。
//
// @method
// @param name:String 名称
// @param value:String 内容
// @return FEnvironment 环境
//==========================================================
public registerValue(name:string, value:any) {
AssertUtil.debugNotEmpty(name);
var environment = ClassUtil.create(Environment);
environment.set(name, value);
this._environments.set(name, environment);
return environment;
}
//==========================================================
// 根据名称查找一个环境。
//
// @method
// @param name:String 名称
// @return FEnvironment 环境
//==========================================================
public find(name) {
return this._environments.get(name);
}
//==========================================================
// 根据名称查找一个环境内容。
//
// @method
// @param name:String 名称
// @return String 环境内容
//==========================================================
public findValue(name) {
var value = null;
var environment:Environment = this._environments.get(name);
if (environment) {
value = environment.value;
}
return value;
}
//==========================================================
// 解析内容。
//
// @method
// @param value:String 内容
// @return String 解析内容
//==========================================================
public parse(value) {
AssertUtil.debugNotEmpty(value);
var result = value;
var environments = this._environments;
var count = environments.count();
for (var i = 0; i < count; i++) {
var environment = environments.at(i);
result = StringUtil.replace(result, '\\${' + environment.name + '}', environment.value);
}
return result;
}
//==========================================================
// 解析网络内容。
//
// @method
// @param value:String 内容
// @return String 解析内容
//==========================================================
public parseUrl(value) {
var result = null;
var version = RuntimeUtil.version;
var url = this.parse(value);
if (url.indexOf('?') != -1) {
result = url + '&' + version;
} else {
result = url + '?' + version;
}
return result;
}
//==========================================================
// 释放处理。
//==========================================================
public dispose() {
// 释放处理
this._environments = ObjectUtil.dispose(this._environments);
// 父处理
super.dispose();
}
}