Initial commit

This commit is contained in:
2025-05-13 19:24:51 +02:00
commit a950f49678
10604 changed files with 932663 additions and 0 deletions

View File

@@ -0,0 +1,214 @@
package com.thoughtworks.xstream.persistence;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.ConverterLookup;
import com.thoughtworks.xstream.io.StreamException;
import com.thoughtworks.xstream.mapper.Mapper;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.Map;
/* loaded from: classes.dex */
public abstract class AbstractFilePersistenceStrategy implements PersistenceStrategy {
private final File baseDirectory;
private final String encoding;
private final FilenameFilter filter = new ValidFilenameFilter();
private final transient XStream xstream;
protected class ValidFilenameFilter implements FilenameFilter {
protected ValidFilenameFilter() {
}
@Override // java.io.FilenameFilter
public boolean accept(File file, String str) {
return new File(file, str).isFile() && AbstractFilePersistenceStrategy.this.isValid(file, str);
}
}
protected class XmlMapEntriesIterator implements Iterator {
private final File[] files;
private int position = -1;
private File current = null;
protected XmlMapEntriesIterator() {
this.files = AbstractFilePersistenceStrategy.this.baseDirectory.listFiles(AbstractFilePersistenceStrategy.this.filter);
}
static /* synthetic */ int access$404(XmlMapEntriesIterator xmlMapEntriesIterator) {
int i = xmlMapEntriesIterator.position + 1;
xmlMapEntriesIterator.position = i;
return i;
}
@Override // java.util.Iterator
public boolean hasNext() {
return this.position + 1 < this.files.length;
}
@Override // java.util.Iterator
public Object next() {
return new Map.Entry() { // from class: com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy.XmlMapEntriesIterator.1
private final File file;
private final Object key;
{
XmlMapEntriesIterator xmlMapEntriesIterator = XmlMapEntriesIterator.this;
this.file = xmlMapEntriesIterator.current = xmlMapEntriesIterator.files[XmlMapEntriesIterator.access$404(XmlMapEntriesIterator.this)];
this.key = AbstractFilePersistenceStrategy.this.extractKey(this.file.getName());
}
@Override // java.util.Map.Entry
public boolean equals(Object obj) {
if (!(obj instanceof Map.Entry)) {
return false;
}
Object value = getValue();
Map.Entry entry = (Map.Entry) obj;
Object key = entry.getKey();
Object value2 = entry.getValue();
Object obj2 = this.key;
if (obj2 == null) {
if (key != null) {
return false;
}
} else if (!obj2.equals(key)) {
return false;
}
if (value == null) {
if (value2 != null) {
return false;
}
} else if (!getValue().equals(entry.getValue())) {
return false;
}
return true;
}
@Override // java.util.Map.Entry
public Object getKey() {
return this.key;
}
@Override // java.util.Map.Entry
public Object getValue() {
return AbstractFilePersistenceStrategy.this.readFile(this.file);
}
@Override // java.util.Map.Entry
public Object setValue(Object obj) {
return AbstractFilePersistenceStrategy.this.put(this.key, obj);
}
};
}
@Override // java.util.Iterator
public void remove() {
File file = this.current;
if (file == null) {
throw new IllegalStateException();
}
file.delete();
}
}
public AbstractFilePersistenceStrategy(File file, XStream xStream, String str) {
this.baseDirectory = file;
this.xstream = xStream;
this.encoding = str;
}
private File getFile(String str) {
return new File(this.baseDirectory, str);
}
/* JADX INFO: Access modifiers changed from: private */
public Object readFile(File file) {
try {
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = this.encoding != null ? new InputStreamReader(fileInputStream, this.encoding) : new InputStreamReader(fileInputStream);
try {
return this.xstream.fromXML(inputStreamReader);
} finally {
inputStreamReader.close();
}
} catch (FileNotFoundException unused) {
return null;
} catch (IOException e) {
throw new StreamException(e);
}
}
private void writeFile(File file, Object obj) {
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
OutputStreamWriter outputStreamWriter = this.encoding != null ? new OutputStreamWriter(fileOutputStream, this.encoding) : new OutputStreamWriter(fileOutputStream);
try {
this.xstream.toXML(obj, outputStreamWriter);
} finally {
outputStreamWriter.close();
}
} catch (IOException e) {
throw new StreamException(e);
}
}
public boolean containsKey(Object obj) {
return getFile(getName(obj)).isFile();
}
protected abstract Object extractKey(String str);
@Override // com.thoughtworks.xstream.persistence.PersistenceStrategy
public Object get(Object obj) {
return readFile(getFile(getName(obj)));
}
protected ConverterLookup getConverterLookup() {
return this.xstream.getConverterLookup();
}
protected Mapper getMapper() {
return this.xstream.getMapper();
}
protected abstract String getName(Object obj);
protected boolean isValid(File file, String str) {
return str.endsWith(".xml");
}
@Override // com.thoughtworks.xstream.persistence.PersistenceStrategy
public Iterator iterator() {
return new XmlMapEntriesIterator();
}
@Override // com.thoughtworks.xstream.persistence.PersistenceStrategy
public Object put(Object obj, Object obj2) {
Object obj3 = get(obj);
writeFile(new File(this.baseDirectory, getName(obj)), obj2);
return obj3;
}
@Override // com.thoughtworks.xstream.persistence.PersistenceStrategy
public Object remove(Object obj) {
File file = getFile(getName(obj));
if (!file.isFile()) {
return null;
}
Object readFile = readFile(file);
file.delete();
return readFile;
}
@Override // com.thoughtworks.xstream.persistence.PersistenceStrategy
public int size() {
return this.baseDirectory.list(this.filter).length;
}
}

View File

@@ -0,0 +1,104 @@
package com.thoughtworks.xstream.persistence;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.SingleValueConverter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.File;
/* loaded from: classes.dex */
public class FilePersistenceStrategy extends AbstractFilePersistenceStrategy {
private final String illegalChars;
public FilePersistenceStrategy(File file) {
this(file, new XStream(new DomDriver()));
}
protected String escape(String str) {
StringBuffer stringBuffer = new StringBuffer();
for (char c : str.toCharArray()) {
if (c < ' ' || this.illegalChars.indexOf(c) >= 0) {
StringBuffer stringBuffer2 = new StringBuffer();
stringBuffer2.append("%");
stringBuffer2.append(Integer.toHexString(c).toUpperCase());
stringBuffer.append(stringBuffer2.toString());
} else {
stringBuffer.append(c);
}
}
return stringBuffer.toString();
}
@Override // com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy
protected Object extractKey(String str) {
String unescape = unescape(str.substring(0, str.length() - 4));
if ("null@null".equals(unescape)) {
return null;
}
int indexOf = unescape.indexOf(64);
if (indexOf < 0) {
ConversionException conversionException = new ConversionException("No valid key");
conversionException.add("key", unescape);
throw conversionException;
}
Class realClass = getMapper().realClass(unescape.substring(0, indexOf));
Converter lookupConverterForType = getConverterLookup().lookupConverterForType(realClass);
if (lookupConverterForType instanceof SingleValueConverter) {
return ((SingleValueConverter) lookupConverterForType).fromString(unescape.substring(indexOf + 1));
}
ConversionException conversionException2 = new ConversionException("No SingleValueConverter available for key type");
conversionException2.add("key-type", realClass.getName());
throw conversionException2;
}
@Override // com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy
protected String getName(Object obj) {
if (obj == null) {
return "null@null.xml";
}
Class<?> cls = obj.getClass();
Converter lookupConverterForType = getConverterLookup().lookupConverterForType(cls);
if (!(lookupConverterForType instanceof SingleValueConverter)) {
ConversionException conversionException = new ConversionException("No SingleValueConverter available for key type");
conversionException.add("key-type", cls.getName());
throw conversionException;
}
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(getMapper().serializedClass(cls));
stringBuffer.append('@');
stringBuffer.append(escape(((SingleValueConverter) lookupConverterForType).toString(obj)));
stringBuffer.append(".xml");
return stringBuffer.toString();
}
@Override // com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy
protected boolean isValid(File file, String str) {
return super.isValid(file, str) && str.indexOf(64) > 0;
}
protected String unescape(String str) {
StringBuffer stringBuffer = new StringBuffer();
while (true) {
int indexOf = str.indexOf(37);
if (indexOf < 0) {
stringBuffer.append(str);
return stringBuffer.toString();
}
stringBuffer.append(str.substring(0, indexOf));
int i = indexOf + 1;
int i2 = indexOf + 3;
stringBuffer.append((char) Integer.parseInt(str.substring(i, i2), 16));
str = str.substring(i2);
}
}
public FilePersistenceStrategy(File file, XStream xStream) {
this(file, xStream, "utf-8", "<>?:/\\\"|*%");
}
public FilePersistenceStrategy(File file, XStream xStream, String str, String str2) {
super(file, xStream, str);
this.illegalChars = str2;
}
}

View File

@@ -0,0 +1,78 @@
package com.thoughtworks.xstream.persistence;
import com.thoughtworks.xstream.XStream;
import java.io.File;
/* loaded from: classes.dex */
public class FileStreamStrategy extends AbstractFilePersistenceStrategy implements StreamStrategy {
public FileStreamStrategy(File file) {
this(file, new XStream());
}
protected String escape(String str) {
StringBuffer stringBuffer = new StringBuffer();
for (char c : str.toCharArray()) {
if (Character.isDigit(c) || ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))) {
stringBuffer.append(c);
} else if (c == '_') {
stringBuffer.append("__");
} else {
StringBuffer stringBuffer2 = new StringBuffer();
stringBuffer2.append("_");
stringBuffer2.append(Integer.toHexString(c));
stringBuffer2.append("_");
stringBuffer.append(stringBuffer2.toString());
}
}
return stringBuffer.toString();
}
@Override // com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy
protected Object extractKey(String str) {
String unescape = unescape(str.substring(0, str.length() - 4));
if (unescape.equals("\u0000")) {
return null;
}
return unescape;
}
@Override // com.thoughtworks.xstream.persistence.AbstractFilePersistenceStrategy
protected String getName(Object obj) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(escape(obj == null ? "\u0000" : obj.toString()));
stringBuffer.append(".xml");
return stringBuffer.toString();
}
protected String unescape(String str) {
StringBuffer stringBuffer = new StringBuffer();
char[] charArray = str.toCharArray();
int i = 0;
int i2 = -1;
char c = 65535;
while (i < charArray.length) {
char c2 = charArray[i];
if (c2 == '_' && i2 != -1) {
if (c == '_') {
stringBuffer.append('_');
} else {
stringBuffer.append((char) i2);
}
i2 = -1;
} else if (c2 == '_') {
i2 = 0;
} else if (i2 != -1) {
i2 = (i2 * 16) + Integer.parseInt(String.valueOf(c2), 16);
} else {
stringBuffer.append(c2);
}
i++;
c = c2;
}
return stringBuffer.toString();
}
public FileStreamStrategy(File file, XStream xStream) {
super(file, xStream, null);
}
}

View File

@@ -0,0 +1,16 @@
package com.thoughtworks.xstream.persistence;
import java.util.Iterator;
/* loaded from: classes.dex */
public interface PersistenceStrategy {
Object get(Object obj);
Iterator iterator();
Object put(Object obj, Object obj2);
Object remove(Object obj);
int size();
}

View File

@@ -0,0 +1,5 @@
package com.thoughtworks.xstream.persistence;
/* loaded from: classes.dex */
public interface StreamStrategy extends PersistenceStrategy {
}

View File

@@ -0,0 +1,80 @@
package com.thoughtworks.xstream.persistence;
import java.util.AbstractList;
/* loaded from: classes.dex */
public class XmlArrayList extends AbstractList {
private final XmlMap map;
public XmlArrayList(PersistenceStrategy persistenceStrategy) {
this.map = new XmlMap(persistenceStrategy);
}
private void rangeCheck(int i) {
int size = size();
if (i >= size || i < 0) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("Index: ");
stringBuffer.append(i);
stringBuffer.append(", Size: ");
stringBuffer.append(size);
throw new IndexOutOfBoundsException(stringBuffer.toString());
}
}
@Override // java.util.AbstractList, java.util.List
public void add(int i, Object obj) {
int size = size();
if (i >= size + 1 || i < 0) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("Index: ");
stringBuffer.append(i);
stringBuffer.append(", Size: ");
stringBuffer.append(size);
throw new IndexOutOfBoundsException(stringBuffer.toString());
}
int i2 = i != size ? i - 1 : i;
while (size > i2) {
this.map.put(new Integer(size + 1), this.map.get(new Integer(size)));
size--;
}
this.map.put(new Integer(i), obj);
}
@Override // java.util.AbstractList, java.util.List
public Object get(int i) {
rangeCheck(i);
return this.map.get(new Integer(i));
}
@Override // java.util.AbstractList, java.util.List
public Object remove(int i) {
int size = size();
rangeCheck(i);
Object obj = this.map.get(new Integer(i));
while (true) {
int i2 = size - 1;
if (i >= i2) {
this.map.remove(new Integer(i2));
return obj;
}
XmlMap xmlMap = this.map;
Integer num = new Integer(i);
i++;
xmlMap.put(num, this.map.get(new Integer(i)));
}
}
@Override // java.util.AbstractList, java.util.List
public Object set(int i, Object obj) {
rangeCheck(i);
Object obj2 = get(i);
this.map.put(new Integer(i), obj);
return obj2;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.List
public int size() {
return this.map.size();
}
}

View File

@@ -0,0 +1,60 @@
package com.thoughtworks.xstream.persistence;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.Iterator;
import java.util.Set;
/* loaded from: classes.dex */
public class XmlMap extends AbstractMap {
private final PersistenceStrategy persistenceStrategy;
class XmlMapEntries extends AbstractSet {
XmlMapEntries() {
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean isEmpty() {
return XmlMap.this.isEmpty();
}
@Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set
public Iterator iterator() {
return XmlMap.this.persistenceStrategy.iterator();
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public int size() {
return XmlMap.this.size();
}
}
public XmlMap(PersistenceStrategy persistenceStrategy) {
this.persistenceStrategy = persistenceStrategy;
}
@Override // java.util.AbstractMap, java.util.Map
public Set entrySet() {
return new XmlMapEntries();
}
@Override // java.util.AbstractMap, java.util.Map
public Object get(Object obj) {
return this.persistenceStrategy.get(obj);
}
@Override // java.util.AbstractMap, java.util.Map
public Object put(Object obj, Object obj2) {
return this.persistenceStrategy.put(obj, obj2);
}
@Override // java.util.AbstractMap, java.util.Map
public Object remove(Object obj) {
return this.persistenceStrategy.remove(obj);
}
@Override // java.util.AbstractMap, java.util.Map
public int size() {
return this.persistenceStrategy.size();
}
}

View File

@@ -0,0 +1,40 @@
package com.thoughtworks.xstream.persistence;
import java.util.AbstractSet;
import java.util.Iterator;
/* loaded from: classes.dex */
public class XmlSet extends AbstractSet {
private final XmlMap map;
public XmlSet(PersistenceStrategy persistenceStrategy) {
this.map = new XmlMap(persistenceStrategy);
}
private Long findEmptyKey() {
long currentTimeMillis = System.currentTimeMillis();
while (this.map.containsKey(new Long(currentTimeMillis))) {
currentTimeMillis++;
}
return new Long(currentTimeMillis);
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public boolean add(Object obj) {
if (this.map.containsValue(obj)) {
return false;
}
this.map.put(findEmptyKey(), obj);
return true;
}
@Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set
public Iterator iterator() {
return this.map.values().iterator();
}
@Override // java.util.AbstractCollection, java.util.Collection, java.util.Set
public int size() {
return this.map.size();
}
}