import {
Zondy
} from '../../common/Base';
import {
ServiceBase
} from "../../ServiceBase";
import {
newGuid,
extendDeep
} from "../../common/Util";
import {
IgsServiceBase
} from "../../baseserver/IServiceBase";
import {
CMultiClassTheme
} from "./CMultiClassTheme";
import {
CSimpleTheme
} from "./CSimpleTheme";
import {
CChartTheme
} from "./CChartTheme";
import {
CGraduatedSymbolTheme
} from "./CGraduatedSymbolTheme";
import {
CDotDensityTheme
} from "./CDotDensityTheme";
import {
CRandomTheme
} from "./CRandomTheme";
import {
CFourColorTheme
} from "./CFourColorTheme";
import {
CUniqueTheme
} from "./CUniqueTheme";
import {
CRangeTheme
} from "./CRangeTheme";
import {
FolderInfoAttribute
} from "./FolderInfoAttribute";
import {
FolderInfo
} from "./FolderInfo";
import {
ThemesInfo
} from "./ThemesInfo";
/**
* 专题图服务
* @class module:专题图服务.ThemeOper
* @classdesc 专题图服务
* @description Zondy.Service.ThemeOper
* @extends ServiceBase
* @param {String} [opt_guid=newGuid()] 客户端标识,用以服务器缓存地图
* @param {Object} options 属性键值对
* @param {Function} [options.p_onSuccess=null] 获取成功回调方法 onSuccess(Array<Zondy.Object.Theme.CThemeInfo>)
*/
class ThemeOper extends ServiceBase {
constructor(opt_guid, options) {
var options = options || {};
options.baseUrl = "igs/rest/theme";
super(options);
/**
* @private
* @member Zondy.Object.Theme.ThemesInfo.prototype.guid
* @type {String}
* @description 客户端标识,用以服务器缓存地图
* @default ""
*/
if (opt_guid !== null) {
this.guid = opt_guid;
} else {
this.guid = newGuid();
}
/**
* @private
* @member Zondy.Object.Theme.ThemesInfo.prototype.p_onSuccess
* @type {Function}
* @description 获取成功回调方法 onSuccess(Array<Zondy.Object.Theme.CThemeInfo>)
* @default null
*/
this.p_onSuccess = options.p_onSuccess !== undefined ? options.p_onSuccess : null;
}
/***
* @description 解析专题图信息
* @param {Object} jsonObj 专题图信息Json对象
* json还需解析(2018/01/31)
*/
onGetThemesInfoSuccess(jsonObj) {
var folderInfo = new FolderInfo();
extendDeep(folderInfo, jsonObj.result || jsonObj);
if (folderInfo !== null && folderInfo.attribute !== null && folderInfo.attribute.length > 0) {
var themesInfoArr = []; //new ThemesInfo[folderInfo.attribute.Length];
var attArr = null;
for (var i = 0; i < folderInfo.attribute.length; i++) {
themesInfoArr[i] = new ThemesInfo();
if (folderInfo.attribute[i] !== null) {
themesInfoArr[i].LayerName = folderInfo.attribute[i].name;
attArr = JSON.parse(folderInfo.attribute[i].value); //[];
if (attArr !== null && attArr.length > 0) {
themesInfoArr[i].ThemeArr = []; //new ThemeBase[attArr.Length];
for (var j = 0; j < attArr.length; j++) {
switch (attArr[j].name) {
case "CMultiClassTheme": //多表达式(多分段)专题图
themesInfoArr[i].ThemeArr[j] = new CMultiClassTheme();
break;
case "CSimpleTheme": //简单专题图
themesInfoArr[i].ThemeArr[j] = new CSimpleTheme();
break;
case "CChartTheme": //统计专题图
themesInfoArr[i].ThemeArr[j] = new CChartTheme();
break;
case "CGraduatedSymbolTheme": //等级符号专题图
themesInfoArr[i].ThemeArr[j] = new CGraduatedSymbolTheme();
break;
case "CDotDensityTheme": ////点密度专题图
themesInfoArr[i].ThemeArr[j] = new CDotDensityTheme();
break;
case "CRandomTheme": //随机专题图
themesInfoArr[i].ThemeArr[j] = new CRandomTheme();
break;
case "CFourColorTheme": //四色专题图
themesInfoArr[i].ThemeArr[j] = new CFourColorTheme();
break;
case "CUniqueTheme": //唯一值专题图
themesInfoArr[i].ThemeArr[j] = new CUniqueTheme();
break;
case "CRangeTheme": //范围专题图(分段专题图)
themesInfoArr[i].ThemeArr[j] = new CRangeTheme();
break;
}
extendDeep(themesInfoArr[i].ThemeArr[j], JSON.parse(attArr[j].value));
}
}
}
}
if (this.p_onSuccess !== null && typeof this.p_onSuccess === 'function') {
this.p_onSuccess(themesInfoArr);
}
}
}
/***
* @description 获取专题图信息
* @param {String} mapDocName 地图文档名称
* @param {Array} idxArr 专题图索引数组(索引从0开始,例如:"0,1,2") Array<Integer>
* @param onSuccess - {Function} 添加成功回调函数。
* @param onError - {Function} 添加失败回调函数。
*/
getThemesInfo(mapDocName, idxArr, onSuccess, onError) {
var me = this;
me.p_onSuccess = onSuccess;
var rand = Math.random();
me.partUrl = mapDocName + "/get?idxArr=" + idxArr + "&r=" + rand + "&guid=" + me.guid;
var url = me.getFullUrl();
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: me.onGetThemesInfoSuccess,
processFailed: onError
}
});
service.processAsync();
}
/***
* @description 删除专题图信息
* @param {String} mapDocName 地图文档名称
* @param {Array} idxArr 专题图索引数组(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引 Array<Integer>
* @param onSuccess - {Function} 添加成功回调函数。
* @param onError - {Function} 添加失败回调函数。
*/
removeThemesInfo(mapDocName, idxArr, onSuccess, onError) {
var me = this;
var rand = Math.random();
me.partUrl = mapDocName + "/remove?idxArr=" + idxArr + "&r=" + rand + "&guid=" + me.guid;
var url = me.getFullUrl();
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: onSuccess,
processFailed: onError
}
});
service.processAsync();
}
/***
* @description 更新专题图信息
* @param {String} mapDocName 地图文档名称
* @param {Array} idxArr 专题图索引数组(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引 Array<Integer>
* @param {Array} themesInfoArr 更新的数据 Array<Zondy.Object.Theme.CThemeInfo>
* @param onSuccess - {Function} 添加成功回调函数。
* @param onError - {Function} 添加失败回调函数。
*/
updateThemesInfo(mapDocName, idxArr, themesInfoArr, onSuccess, onError) {
var me = this;
var rand = Math.random();
me.partUrl = mapDocName + "/update?idxArr=" + idxArr + "&guid=" + this.guid;
var url = me.getFullUrl();
var folderInfo = new FolderInfo();
if (themesInfoArr !== null && themesInfoArr.length > 0) {
folderInfo.name = "ThemeInfo";
folderInfo.attribute = []; //new FolderInfoAttribute[themesInfoArr.Length];
for (var i = 0; i < themesInfoArr.length; i++) {
folderInfo.attribute[i] = new FolderInfoAttribute();
folderInfo.attribute[i].name = themesInfoArr[i].LayerName;
if (themesInfoArr[i].ThemeArr !== null && themesInfoArr[i].ThemeArr.length > 0) {
var res = []; //new FolderInfoAttribute[themesInfoArr[i].ThemeArr.Length];
for (var j = 0; j < themesInfoArr[i].ThemeArr.length; j++) {
if (themesInfoArr[i].ThemeArr[j] !== null)
res[j] = new FolderInfoAttribute(themesInfoArr[i].ThemeArr[j].Type, JSON.stringify(themesInfoArr[i].ThemeArr[j]));
}
folderInfo.attribute[i].value = JSON.stringify(res);
}
}
}
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: onSuccess,
processFailed: onError
}
});
service.processAsync({
method: 'POST',
data: JSON.stringify(folderInfo),
headers: {
'Content-Type': 'text/plain;charset=UTF-8'
}
});
}
/***
* @description 添加专题图信息
* @param {String} mapDocName 地图文档名称
* @param {Array} idxArr 专题图索引数组(索引从0开始,例如:"0,1,2/0,0,0"):图层索引/专题图索引 Array<Integer>
* @param {Array} themesInfoArr 更新的数据 Array<Zondy.Object.Theme.CThemeInfo>
* @param onSuccess - {Function} 添加成功回调函数。
* @param onError - {Function} 添加失败回调函数。
*/
addThemesInfo(mapDocName, idxArr, themesInfoArr, onSuccess, onError) {
var me = this;
var rand = Math.random();
me.partUrl = mapDocName + "/add?idxArr=" + idxArr + "&guid=" + this.guid;
var url = me.getFullUrl();
var folderInfo = new FolderInfo();
if (themesInfoArr !== null && themesInfoArr.length > 0) {
folderInfo.name = "ThemeInfo";
folderInfo.attribute = []; //new FolderInfoAttribute[themesInfoArr.Length];
for (var i = 0; i < themesInfoArr.length; i++) {
folderInfo.attribute[i] = new FolderInfoAttribute();
folderInfo.attribute[i].name = themesInfoArr[i].LayerName;
if (themesInfoArr[i].ThemeArr !== null && themesInfoArr[i].ThemeArr.length > 0) {
var res = []; //new FolderInfoAttribute[themesInfoArr[i].ThemeArr.Length];
for (var j = 0; j < themesInfoArr[i].ThemeArr.length; j++) {
if (themesInfoArr[i].ThemeArr[j] !== null)
res[j] = new FolderInfoAttribute(themesInfoArr[i].ThemeArr[j].Type, JSON.stringify(themesInfoArr[i].ThemeArr[j]));
}
folderInfo.attribute[i].value = JSON.stringify(res);
}
}
}
var service = new IgsServiceBase(url, {
eventListeners: {
scope: me,
processCompleted: onSuccess,
processFailed: onError
}
});
service.processAsync({
method: 'POST',
data: JSON.stringify(folderInfo),
headers: {
'Content-Type': 'text/plain;charset=UTF-8'
}
});
}
}
export {
ThemeOper
};
Zondy.Service.ThemeOper = ThemeOper;