mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
253 lines
5 KiB
Java
253 lines
5 KiB
Java
/*
|
|
* This code is in the public domain.
|
|
*/
|
|
|
|
package org.geometerplus.android.fbreader.api;
|
|
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
|
|
public abstract class ApiObject implements Parcelable {
|
|
protected static interface Type {
|
|
int ERROR = -1;
|
|
int VOID = 0;
|
|
int INT = 1;
|
|
int STRING = 2;
|
|
int BOOLEAN = 3;
|
|
int DATE = 4;
|
|
int LONG = 5;
|
|
int FLOAT = 6;
|
|
int TEXT_POSITION = 10;
|
|
}
|
|
|
|
static class Void extends ApiObject {
|
|
static Void Instance = new Void();
|
|
|
|
private Void() {
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.VOID;
|
|
}
|
|
}
|
|
|
|
static class Integer extends ApiObject {
|
|
final int Value;
|
|
|
|
Integer(int value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.INT;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeInt(Value);
|
|
}
|
|
}
|
|
|
|
static class Float extends ApiObject {
|
|
final float Value;
|
|
|
|
Float(float value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.FLOAT;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeFloat(Value);
|
|
}
|
|
}
|
|
|
|
static class Long extends ApiObject {
|
|
final long Value;
|
|
|
|
Long(long value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.LONG;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeLong(Value);
|
|
}
|
|
}
|
|
|
|
static class Boolean extends ApiObject {
|
|
final boolean Value;
|
|
|
|
Boolean(boolean value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.BOOLEAN;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeByte((byte)(Value ? 1 : 0));
|
|
}
|
|
}
|
|
|
|
static class Date extends ApiObject {
|
|
final java.util.Date Value;
|
|
|
|
Date(java.util.Date value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.DATE;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeLong(Value.getTime());
|
|
}
|
|
}
|
|
|
|
static class String extends ApiObject {
|
|
final java.lang.String Value;
|
|
|
|
String(java.lang.String value) {
|
|
Value = value;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.STRING;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeString(Value);
|
|
}
|
|
}
|
|
|
|
static class Error extends ApiObject {
|
|
final java.lang.String Message;
|
|
|
|
Error(java.lang.String message) {
|
|
Message = message;
|
|
}
|
|
|
|
@Override
|
|
protected int type() {
|
|
return Type.ERROR;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
super.writeToParcel(parcel, flags);
|
|
parcel.writeString(Message);
|
|
}
|
|
}
|
|
|
|
static ApiObject envelope(int value) {
|
|
return new Integer(value);
|
|
}
|
|
|
|
static ApiObject envelope(float value) {
|
|
return new Float(value);
|
|
}
|
|
|
|
static ApiObject envelope(long value) {
|
|
return new Long(value);
|
|
}
|
|
|
|
static ApiObject envelope(boolean value) {
|
|
return new Boolean(value);
|
|
}
|
|
|
|
static ApiObject envelope(java.lang.String value) {
|
|
return new String(value);
|
|
}
|
|
|
|
static ApiObject envelope(java.util.Date value) {
|
|
return new Date(value);
|
|
}
|
|
|
|
static List<ApiObject> envelopeStringList(List<java.lang.String> values) {
|
|
final ArrayList<ApiObject> objects = new ArrayList<ApiObject>(values.size());
|
|
for (java.lang.String v : values) {
|
|
objects.add(new String(v));
|
|
}
|
|
return objects;
|
|
}
|
|
|
|
static List<ApiObject> envelopeIntegerList(List<java.lang.Integer> values) {
|
|
final ArrayList<ApiObject> objects = new ArrayList<ApiObject>(values.size());
|
|
for (java.lang.Integer v : values) {
|
|
objects.add(new Integer(v));
|
|
}
|
|
return objects;
|
|
}
|
|
|
|
abstract protected int type();
|
|
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
public void writeToParcel(Parcel parcel, int flags) {
|
|
parcel.writeInt(type());
|
|
}
|
|
|
|
public static final Parcelable.Creator<ApiObject> CREATOR =
|
|
new Parcelable.Creator<ApiObject>() {
|
|
public ApiObject createFromParcel(Parcel parcel) {
|
|
final int code = parcel.readInt();
|
|
switch (code) {
|
|
default:
|
|
return new Error("Unknown object code: " + code);
|
|
case Type.ERROR:
|
|
return new Error(parcel.readString());
|
|
case Type.VOID:
|
|
return Void.Instance;
|
|
case Type.INT:
|
|
return new Integer(parcel.readInt());
|
|
case Type.FLOAT:
|
|
return new Float(parcel.readFloat());
|
|
case Type.LONG:
|
|
return new Long(parcel.readLong());
|
|
case Type.BOOLEAN:
|
|
return new Boolean(parcel.readByte() == 1);
|
|
case Type.DATE:
|
|
return new Date(new java.util.Date(parcel.readLong()));
|
|
case Type.STRING:
|
|
return new String(parcel.readString());
|
|
case Type.TEXT_POSITION:
|
|
return new TextPosition(parcel.readInt(), parcel.readInt(), parcel.readInt());
|
|
}
|
|
}
|
|
|
|
public ApiObject[] newArray(int size) {
|
|
return new ApiObject[size];
|
|
}
|
|
};
|
|
}
|