what-the-bank/sources/org/simpleframework/xml/strategy/TreeStrategy.java

75 lines
2.3 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package org.simpleframework.xml.strategy;
import java.lang.reflect.Array;
import java.util.Map;
import org.simpleframework.xml.stream.Node;
import org.simpleframework.xml.stream.NodeMap;
/* loaded from: classes.dex */
public class TreeStrategy implements Strategy {
private final String label;
private final String length;
private final Loader loader;
public TreeStrategy() {
this(Name.LABEL, Name.LENGTH);
}
public TreeStrategy(String str, String str2) {
this.loader = new Loader();
this.length = str2;
this.label = str;
}
@Override // org.simpleframework.xml.strategy.Strategy
public Value read(Type type, NodeMap nodeMap, Map map) throws Exception {
Class readValue = readValue(type, nodeMap);
Class type2 = type.getType();
if (type2.isArray()) {
return readArray(readValue, nodeMap);
}
if (type2 != readValue) {
return new ObjectValue(readValue);
}
return null;
}
private Value readArray(Class cls, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.length);
return new ArrayValue(cls, remove != null ? Integer.parseInt(remove.getValue()) : 0);
}
private Class readValue(Type type, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.label);
Class<?> type2 = type.getType();
if (type2.isArray()) {
type2 = type2.getComponentType();
}
if (remove == null) {
return type2;
}
return this.loader.load(remove.getValue());
}
@Override // org.simpleframework.xml.strategy.Strategy
public boolean write(Type type, Object obj, NodeMap nodeMap, Map map) {
Class<?> cls = obj.getClass();
Class<?> type2 = type.getType();
Class<?> writeArray = cls.isArray() ? writeArray(type2, obj, nodeMap) : cls;
if (cls == type2) {
return false;
}
nodeMap.put(this.label, writeArray.getName());
return false;
}
private Class writeArray(Class cls, Object obj, NodeMap nodeMap) {
int length = Array.getLength(obj);
String str = this.length;
if (str != null) {
nodeMap.put(str, String.valueOf(length));
}
return cls.getComponentType();
}
}