what-the-bank/sources/org/simpleframework/xml/convert/AnnotationStrategy.java

66 lines
2.3 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.simpleframework.xml.convert;
import java.util.Map;
import org.simpleframework.xml.strategy.Strategy;
import org.simpleframework.xml.strategy.TreeStrategy;
import org.simpleframework.xml.strategy.Type;
import org.simpleframework.xml.strategy.Value;
import org.simpleframework.xml.stream.InputNode;
import org.simpleframework.xml.stream.NodeMap;
import org.simpleframework.xml.stream.OutputNode;
/* loaded from: classes6.dex */
public class AnnotationStrategy implements Strategy {
private final ConverterScanner scanner;
private final Strategy strategy;
public AnnotationStrategy() {
this(new TreeStrategy());
}
public AnnotationStrategy(Strategy strategy) {
this.scanner = new ConverterScanner();
this.strategy = strategy;
}
@Override // org.simpleframework.xml.strategy.Strategy
public Value read(Type type, NodeMap<InputNode> nodeMap, Map map) throws Exception {
Value read = this.strategy.read(type, nodeMap, map);
return isReference(read) ? read : read(type, nodeMap, read);
}
private Value read(Type type, NodeMap<InputNode> nodeMap, Value value) throws Exception {
Converter converter = this.scanner.getConverter(type, value);
InputNode node = nodeMap.getNode();
if (converter == null) {
return value;
}
Object read = converter.read(node);
Class type2 = type.getType();
if (value != null) {
value.setValue(read);
}
return new Reference(value, read, type2);
}
@Override // org.simpleframework.xml.strategy.Strategy
public boolean write(Type type, Object obj, NodeMap<OutputNode> nodeMap, Map map) throws Exception {
boolean write = this.strategy.write(type, obj, nodeMap, map);
return !write ? write(type, obj, nodeMap) : write;
}
private boolean write(Type type, Object obj, NodeMap<OutputNode> nodeMap) throws Exception {
Converter converter = this.scanner.getConverter(type, obj);
OutputNode node = nodeMap.getNode();
if (converter == null) {
return false;
}
converter.write(node, obj);
return true;
}
private boolean isReference(Value value) {
return value != null && value.isReference();
}
}