Commit ee9bd6c6 authored by p x's avatar p x
Browse files

对完8.5

parent 8bd7108c
package com.cusc.adas.v2x.events
import com.cusc.adas.v2x.dto.VehAdviceDto
import com.cusc.adas.v2x.clouddecision.dto.VehAdviceDto
class VehAdviceEvent {
var vehAdviceDto: VehAdviceDto<Any>? = null
......
......@@ -340,13 +340,28 @@ public class Parse {
// public static void convoterBean( Object source , Object target) throws IllegalArgumentException, IllegalAccessException, ClassNotFoundException, InstantiationException, NoSuchFieldException, SecurityException {
public static void convoterBean(Object source, Object target) {
Field[] fields = source.getClass().getDeclaredFields();
List<Field> fList = new ArrayList<>();
for (Field field : fields) {
if (field.isAnnotationPresent(Order.class)) {
fList.add(field);
}
}
Collections.sort(fList, new Comparator<Field>() {
@Override
public int compare(Field f1, Field f2) {
return f1.getAnnotation(Order.class).value() - f2.getAnnotation(Order.class).value();
}
});
Field tField = null;
try {
Field[] fields = source.getClass().getDeclaredFields();
// Field[] fields = source.getClass().getDeclaredFields();
//获取目标对象指定的属性
//List<Field> fList = new ArrayList<>();
//SortedMap<Integer,Field> rstMap = new TreeMap<>();
for (Field field : fields) {
for (Field field : fList) {
field.setAccessible(true);
Object o = field.get(source);
if (o == null) {
......@@ -435,26 +450,39 @@ public class Parse {
} else if (List.class.isAssignableFrom(field.getType())) {
// 集合类型
//读取属性的注解是否引用其他字段的长度
if (field.isAnnotationPresent(RefNumFlag.class)) {
// RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
// String refField = refNumFlag.value();
// Class<?> clazz1 = t.getClass();
// Field nameField = clazz1.getDeclaredField(refField);
// Type genericType = nameField.getGenericType();
// nameField.setAccessible(true);
//
// if (genericType instanceof ParameterizedType) {
// ParameterizedType pt = (ParameterizedType) genericType;
// Type[] actualTypes = pt.getActualTypeArguments();
// if (actualTypes.length > 0) {
// actualTypes[0].getClass();
// int len= (int) nameField.get(t);
// for(int i=0;i<len;i++) {
// actualTypes[0].getClass();
// }
// }
// }
if (field.isAnnotationPresent(RefNumFlag.class) && !field.isAnnotationPresent(DynamicsClassDef.class)) {
List<?> temp = (List<?>) o;
RefNumFlag refNumFlag = field.getAnnotation(RefNumFlag.class);
String refField = refNumFlag.value();
Class<?> clazz1 = target.getClass();
Field nameField = clazz1.getDeclaredField(refField);
Type genericType = field.getGenericType();
Type targetType = tField.getGenericType();
nameField.setAccessible(true);
if (genericType instanceof ParameterizedType) {
List<Object> dsts = new ArrayList<>();
ParameterizedType pt = (ParameterizedType) genericType;
Type[] actualTypes = pt.getActualTypeArguments();
ParameterizedType dspt = (ParameterizedType) targetType;
Type[] dstTypes = dspt.getActualTypeArguments();
if (actualTypes.length > 0 && actualTypes != null) {
for (int i = 0; i < temp.size(); i++) {
Object src = temp.get(i);
Object dst = null;
if (src instanceof Short) {
dst = (Short) src;
} else if (src instanceof Integer) {
dst = (int) src;
} else {
Class<?> cls = Class.forName(dstTypes[0].getTypeName());
dst = cls.newInstance();
convoterBean(src, dst);
}
dsts.add(dst);
}
tField.set(target, dsts);
}
}
}
} else if (field.getType() == String.class) {
......@@ -467,8 +495,21 @@ public class Parse {
// e.printStackTrace();
// }
} else {
//其他对象类型
if (field.isAnnotationPresent(DynamicsClassDef.class)) {
DynamicsClassDef dynamicsClassDef = field.getAnnotation(DynamicsClassDef.class);
String classtype = dynamicsClassDef.classtype();
DependencyDef dependencyDef = field.getAnnotation(DependencyDef.class);
String fieldname = dependencyDef.value();
Field tField2 = target.getClass().getDeclaredField(fieldname);
tField2.setAccessible(true);
Short key = (Short) tField2.get(target);
Class<?> cls = DynamicsClassMap.getDto(classtype, key);
Object obj = cls.newInstance();
convoterBean(o, obj);
tField.set(target, obj);
} else {
Class<?> cls = Class.forName(tField.getType().getName());
Object obj = cls.newInstance();
......@@ -477,6 +518,7 @@ public class Parse {
}
}
}
}
} catch (Exception e) {
System.out.println("----convoterBean Exception " + e + " tField " + tField);
}
......
......@@ -4,6 +4,12 @@ import java.util.HashMap;
import java.util.Map;
import com.cusc.adas.v2x.assist.vo.TrafficLight;
import com.cusc.adas.v2x.clouddecision.dto.AbnormalVehicleDto;
import com.cusc.adas.v2x.clouddecision.dto.AutoSpeedLimitDto;
import com.cusc.adas.v2x.clouddecision.dto.EmergencyVehicleDto;
import com.cusc.adas.v2x.clouddecision.dto.FawWarnningDto;
import com.cusc.adas.v2x.clouddecision.dto.RSIWarnningDto;
import com.cusc.adas.v2x.clouddecision.dto.TrafficLightDto;
import com.cusc.adas.v2x.clouddecision.vo.AbnormalVehicle;
import com.cusc.adas.v2x.clouddecision.vo.AutoSpeedLimit;
import com.cusc.adas.v2x.clouddecision.vo.EmergencyVehicle;
......@@ -12,30 +18,45 @@ import com.cusc.adas.v2x.clouddecision.vo.RSIWarnning;
import com.cusc.adas.v2x.clouddecision.vo.TrafficLightInfo;
public class DynamicsClassMap {
private static Map<String,Map<Short,Class>> map = new HashMap<>();
private static Map<String, Map<Short, Class>> map = new HashMap<>();
private static Map<String, Map<Short, Class>> mapDto = new HashMap<>();
static {
Map<Short,Class> cloundDecisionsubMap = new HashMap<>();
Map<Short, Class> cloundDecisionsubMap = new HashMap<>();
// 参考 adviceType 列表定义
cloundDecisionsubMap.put((short)1, TrafficLightInfo.class);//信号灯路口车速引导功能指令
cloundDecisionsubMap.put((short)5, AutoSpeedLimit.class);//动态车道级限速指令
cloundDecisionsubMap.put((short)9, FawWarnning.class);//前向碰撞预警
cloundDecisionsubMap.put((short)11, AbnormalVehicle.class);//异常车辆预警
cloundDecisionsubMap.put((short)13, EmergencyVehicle.class);//紧急车辆预警
cloundDecisionsubMap.put((short)17, RSIWarnning.class);//通用 RSI 预警
map.put("CloudDecision",cloundDecisionsubMap );
Map<Short,Class> assistSubMap = new HashMap<>();
assistSubMap.put((short)7, TrafficLight.class);
map.put("assist",assistSubMap );
cloundDecisionsubMap.put((short) 1, TrafficLightInfo.class);//信号灯路口车速引导功能指令
cloundDecisionsubMap.put((short) 5, AutoSpeedLimit.class);//动态车道级限速指令
cloundDecisionsubMap.put((short) 9, FawWarnning.class);//前向碰撞预警
cloundDecisionsubMap.put((short) 11, AbnormalVehicle.class);//异常车辆预警
cloundDecisionsubMap.put((short) 13, EmergencyVehicle.class);//紧急车辆预警
cloundDecisionsubMap.put((short) 17, RSIWarnning.class);//通用 RSI 预警
map.put("CloudDecision", cloundDecisionsubMap);
Map<Short, Class> assistSubMap = new HashMap<>();
assistSubMap.put((short) 7, TrafficLight.class);
map.put("assist", assistSubMap);
// 参考 adviceType 列表定义
Map<Short, Class> cloundDecisionsubMapDto = new HashMap<>();
cloundDecisionsubMapDto.put((short) 1, TrafficLightDto.class);//信号灯路口车速引导功能指令
cloundDecisionsubMapDto.put((short) 5, AutoSpeedLimitDto.class);//动态车道级限速指令
cloundDecisionsubMapDto.put((short) 9, FawWarnningDto.class);//前向碰撞预警
cloundDecisionsubMapDto.put((short) 11, AbnormalVehicleDto.class);//异常车辆预警
cloundDecisionsubMapDto.put((short) 13, EmergencyVehicleDto.class);//紧急车辆预警
cloundDecisionsubMapDto.put((short) 17, RSIWarnningDto.class);//通用 RSI 预警
//Android Dto
mapDto.put("CloudDecision", cloundDecisionsubMapDto);
}
public static Class get(String classtype, Short classkey) {
Map<Short, Class> subMap = map.get(classtype);
return subMap.get(classkey);
}
public static Class get(String classtype,Short classkey) {
Map<Short,Class> subMap = map.get(classtype);
public static Class getDto(String classtype, Short classkey) {
Map<Short, Class> subMap = mapDto.get(classtype);
return subMap.get(classkey);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment