@xmobitea/gn-typescript-client
Version:
GearN Typescript Client SDK by XmobiTea (Pro)
276 lines (275 loc) • 12.8 kB
JavaScript
import { GNFieldDataType, getGNObjectMetadata } from "./../entity/DataMember";
import { GNArray, GNData, GNHashtable } from "./../common/GNData";
class DataMemberFieldInfoTypeMapper {
getGNEnhancedObjectFieldMetadata(cls) {
let declaredFields;
if (this.declaredFieldsMap.has(cls)) {
declaredFields = this.declaredFieldsMap.get(cls);
}
else {
let gnObjectMetadata = getGNObjectMetadata(cls);
declaredFields = gnObjectMetadata != null ? gnObjectMetadata.fields : [];
this.declaredFieldsMap.set(cls, declaredFields);
}
return declaredFields;
}
constructor() {
this.declaredFieldsMap = new Map();
}
}
class DeserializeConverter {
deserializeObject(gnHashtable, cls) {
if (gnHashtable == null)
return null;
let declaredFields = this.dataMemberFieldInfoMapper.getGNEnhancedObjectFieldMetadata(cls);
let answer = new cls();
declaredFields.forEach(declaredField => {
let value = gnHashtable.getObject(declaredField.code);
let typeOfValue = typeof value;
if (declaredField.gnFieldType == GNFieldDataType.String) {
if (value == null)
answer[declaredField.name] = declaredField.defaultValue;
else if (typeOfValue == "string")
answer[declaredField.name] = value;
}
else if (declaredField.gnFieldType == GNFieldDataType.Boolean) {
if (value == null)
answer[declaredField.name] = declaredField.defaultValue;
else if (typeOfValue == "boolean")
answer[declaredField.name] = value;
}
else if (declaredField.gnFieldType == GNFieldDataType.GNHashtable) {
if (value == null) {
if (declaredField.defaultValue != null) {
if (declaredField.cls == GNHashtable)
answer[declaredField.name] = declaredField.defaultValue;
else if (typeof declaredField.cls == "object")
answer[declaredField.name] = declaredField.defaultValue.toData();
else
answer[declaredField.name] = this.deserializeObject(declaredField.defaultValue, declaredField.cls);
}
}
else {
if (declaredField.cls == GNHashtable)
answer[declaredField.name] = value;
else if (typeof declaredField.cls == "object")
answer[declaredField.name] = value.toData();
else
answer[declaredField.name] = this.deserializeObject(value, declaredField.cls);
}
}
else if (declaredField.gnFieldType == GNFieldDataType.GNArray) {
if (value == null) {
if (declaredField.defaultValue != null) {
if (declaredField.cls == GNArray)
answer[declaredField.name] = declaredField.defaultValue;
else if (typeof declaredField.cls == "object")
answer[declaredField.name] = declaredField.defaultValue.toData();
else
answer[declaredField.name] = this.deserializeArray(declaredField.defaultValue, declaredField.cls);
}
}
else {
if (declaredField.cls == GNArray)
answer[declaredField.name] = value;
else if (typeof declaredField.cls == "object")
answer[declaredField.name] = value.toData();
else
answer[declaredField.name] = this.deserializeArray(value, declaredField.cls);
}
}
else if (declaredField.gnFieldType == GNFieldDataType.Number) {
if (value == null)
answer[declaredField.name] = declaredField.defaultValue;
else if (typeOfValue == "number")
answer[declaredField.name] = value;
}
else {
if (value == null) {
if (declaredField.defaultValue != null) {
if (declaredField.cls == Number)
answer[declaredField.name] = declaredField.defaultValue;
else if (declaredField.cls == String)
answer[declaredField.name] = declaredField.defaultValue;
else if (declaredField.cls == Boolean)
answer[declaredField.name] = declaredField.defaultValue;
else if (declaredField.cls == GNHashtable)
answer[declaredField.name] = this.deserializeObject(declaredField.defaultValue, declaredField.cls);
else if (declaredField.cls == GNArray)
answer[declaredField.name] = this.deserializeArray(declaredField.defaultValue, declaredField.cls);
else
answer[declaredField.name] = declaredField.defaultValue;
}
}
else {
if (declaredField.cls == Number)
answer[declaredField.name] = value;
else if (declaredField.cls == String)
answer[declaredField.name] = value;
else if (declaredField.cls == Boolean)
answer[declaredField.name] = value;
else if (declaredField.cls == GNHashtable)
answer[declaredField.name] = this.deserializeObject(value, declaredField.cls);
else if (declaredField.cls == GNArray)
answer[declaredField.name] = this.deserializeArray(value, declaredField.cls);
else
answer[declaredField.name] = value;
}
}
});
return answer;
}
deserializeArray(gnArray, cls) {
if (gnArray == null)
return null;
let answer = [];
for (let i = 0; i < gnArray.count(); i++) {
let value = gnArray.getObject(i);
if (value == null)
answer.push(null);
else {
let typeOfValue = typeof value;
if (typeOfValue == "number")
answer.push(value);
else if (typeOfValue == "string")
answer.push(value);
else if (typeOfValue == "boolean")
answer.push(value);
else if (cls == GNArray)
answer.push(value);
else if (cls == GNData)
answer.push(value);
else if (typeOfValue == "object") {
if (Array.isArray(value)) {
answer.push(this.deserializeArray(gnArray.getGNArray(i), cls));
}
else {
answer.push(this.deserializeObject(gnArray.getGNHashtable(i), cls));
}
}
}
}
return answer;
}
constructor(dataMemberFieldInfoMapper) {
this.dataMemberFieldInfoMapper = dataMemberFieldInfoMapper;
}
}
class SerializeConverter {
serializeObject(obj, cls) {
if (obj == null)
return null;
let fieldInfos = this.dataMemberFieldInfoMapper.getGNEnhancedObjectFieldMetadata(cls);
let answer = new GNHashtable();
fieldInfos.forEach((field) => {
let dataMemberAnno = field;
let value = obj[dataMemberAnno.name];
if (value == null) {
if (!dataMemberAnno.isOptional)
answer.add(dataMemberAnno.code, null);
}
else {
let typeOfValue = typeof value;
if (dataMemberAnno.gnFieldType == GNFieldDataType.String) {
if (typeOfValue == "string")
answer.add(dataMemberAnno.code, value);
}
else if (dataMemberAnno.gnFieldType == GNFieldDataType.Boolean) {
if (typeOfValue == "boolean")
answer.add(dataMemberAnno.code, value);
}
else if (dataMemberAnno.gnFieldType == GNFieldDataType.GNHashtable) {
if (value instanceof GNHashtable)
answer.add(dataMemberAnno.code, value);
else if (typeOfValue === "object") {
if (!Array.isArray(value))
answer.add(dataMemberAnno.code, this.serializeObject(value, dataMemberAnno.cls));
}
}
else if (dataMemberAnno.gnFieldType == GNFieldDataType.GNArray) {
if (value instanceof GNArray)
answer.add(dataMemberAnno.code, value);
else if (typeOfValue === "object") {
if (Array.isArray(value))
answer.add(dataMemberAnno.code, this.serializeArray(value, dataMemberAnno.cls));
}
}
else if (dataMemberAnno.gnFieldType == GNFieldDataType.Number) {
if (typeOfValue == "number")
answer.add(dataMemberAnno.code, value);
}
else {
if (typeOfValue == "string")
answer.add(dataMemberAnno.code, value);
else if (typeOfValue == "boolean")
answer.add(dataMemberAnno.code, value);
else if (typeOfValue == "number")
answer.add(dataMemberAnno.code, value);
else if (value instanceof GNData)
answer.add(dataMemberAnno.code, value);
else if (typeOfValue == "object") {
if (Array.isArray(value))
answer.add(dataMemberAnno.code, this.serializeArray(value, dataMemberAnno.cls));
else
answer.add(dataMemberAnno.code, GNHashtable.builder().addAll(value).build());
}
else
answer.add(dataMemberAnno.code, this.serializeObject(value, dataMemberAnno.cls));
}
}
});
return answer;
}
serializeArray(objLst, cls) {
if (objLst == null)
return null;
let answer = new GNArray();
for (let i = 0; i < objLst.length; i++) {
let obj = objLst[i];
if (obj == null)
answer.add(null);
else {
let typeOfValue = typeof obj;
if (typeOfValue === "string")
answer.add(obj);
else if (typeOfValue === "boolean")
answer.add(obj);
else if (typeOfValue === "number")
answer.add(obj);
else if (obj instanceof GNData)
answer.add(obj);
else {
if (typeOfValue === "object") {
if (Array.isArray(obj))
answer.add(this.serializeArray(obj, cls));
else
answer.add(this.serializeObject(obj, cls));
}
}
}
}
return answer;
}
constructor(dataMemberFieldInfoMapper) {
this.dataMemberFieldInfoMapper = dataMemberFieldInfoMapper;
}
}
export class ConverterService {
static deserializeObject(gnHashtable, cls) {
return ConverterService.deserializeConverter.deserializeObject(gnHashtable, cls);
}
static deserializeArray(gnArray, cls) {
return ConverterService.deserializeConverter.deserializeArray(gnArray, cls);
}
static serializeObject(obj, cls) {
return ConverterService.serializeConverter.serializeObject(obj, cls);
}
static serializeArray(objLst, cls) {
return ConverterService.serializeConverter.serializeArray(objLst, cls);
}
static init() {
let dataMemberFieldInfoMapper = new DataMemberFieldInfoTypeMapper();
ConverterService.serializeConverter = new SerializeConverter(dataMemberFieldInfoMapper);
ConverterService.deserializeConverter = new DeserializeConverter(dataMemberFieldInfoMapper);
}
}