Skip to content

Commit

Permalink
Use anotation for most types except generics
Browse files Browse the repository at this point in the history
  • Loading branch information
vinamogit committed May 3, 2022
1 parent fb6dbe9 commit fe9c9de
Show file tree
Hide file tree
Showing 18 changed files with 84 additions and 67 deletions.
5 changes: 5 additions & 0 deletions src/main/java/org/stellar/sdk/Asset.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package org.stellar.sdk;

import org.stellar.sdk.responses.AssetDeserializer;

import com.google.gson.annotations.JsonAdapter;

/**
* Base Asset class.
* @see <a href="https://developers.stellar.org/docs/glossary/assets/" target="_blank">Assets</a>
*/
@JsonAdapter(AssetDeserializer.class)
public abstract class Asset implements Comparable<Asset> {
Asset() {}

Expand Down
9 changes: 7 additions & 2 deletions src/main/java/org/stellar/sdk/LiquidityPoolID.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package org.stellar.sdk;

import com.google.common.base.Objects;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.stellar.sdk.xdr.*;
import org.stellar.sdk.responses.LiquidityPoolIDDeserializer;
import org.stellar.sdk.xdr.LiquidityPoolType;
import org.stellar.sdk.xdr.XdrDataOutputStream;

import com.google.common.base.Objects;
import com.google.gson.annotations.JsonAdapter;

/**
* Base LiquidityPoolID class.
* @see <a href="https://developers.stellar.org/docs/glossary/liquidity-pool/" target="_blank">Liquidity Pool</a>
*/
@JsonAdapter(LiquidityPoolIDDeserializer.class)
public final class LiquidityPoolID {
protected final byte[] hash;

Expand Down
10 changes: 7 additions & 3 deletions src/main/java/org/stellar/sdk/Predicate.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.stellar.sdk;

import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import java.util.List;

import org.stellar.sdk.responses.PredicateDeserializer;
import org.stellar.sdk.xdr.ClaimPredicate;
import org.stellar.sdk.xdr.ClaimPredicateType;
import org.stellar.sdk.xdr.Duration;
Expand All @@ -10,8 +11,11 @@
import org.stellar.sdk.xdr.Uint64;
import org.threeten.bp.Instant;

import java.util.List;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.gson.annotations.JsonAdapter;

@JsonAdapter(PredicateDeserializer.class)
public abstract class Predicate {

private static List<Predicate> convertXDRPredicates(ClaimPredicate[] predicates) {
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/org/stellar/sdk/responses/AssetDeserializer.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package org.stellar.sdk.responses;

import static com.google.common.base.Optional.fromNullable;

import java.lang.reflect.Type;

import org.stellar.sdk.Asset;

import com.google.common.base.Function;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import org.stellar.sdk.Asset;

import java.lang.reflect.Type;

import static com.google.common.base.Optional.fromNullable;

class AssetDeserializer implements JsonDeserializer<Asset> {
public class AssetDeserializer implements JsonDeserializer<Asset> {
@Override
public Asset deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (!json.isJsonObject()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.Asset;
import org.stellar.sdk.LiquidityPoolID;
Expand All @@ -15,7 +16,7 @@

import java.lang.reflect.Type;

class EffectDeserializer implements JsonDeserializer<EffectResponse> {
public class EffectDeserializer implements JsonDeserializer<EffectResponse> {
@Override
public EffectResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Create new Gson object with adapters needed in Operation
Expand Down
42 changes: 16 additions & 26 deletions src/main/java/org/stellar/sdk/responses/GsonSingleton.java
Original file line number Diff line number Diff line change
@@ -1,47 +1,37 @@
package org.stellar.sdk.responses;

import org.stellar.sdk.responses.effects.EffectResponse;
import org.stellar.sdk.responses.operations.OperationResponse;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import org.stellar.sdk.Asset;
import org.stellar.sdk.Predicate;
import org.stellar.sdk.LiquidityPoolID;
import org.stellar.sdk.responses.effects.EffectResponse;
import org.stellar.sdk.responses.operations.OperationResponse;
import org.stellar.sdk.xdr.LiquidityPoolType;

public class GsonSingleton {
private static Gson instance = null;

protected GsonSingleton() {}

public static Gson getInstance() {
if (instance == null) {
TypeToken accountPageType = new TypeToken<Page<AccountResponse>>() {};
TypeToken assetPageType = new TypeToken<Page<AssetResponse>>() {};
TypeToken effectPageType = new TypeToken<Page<EffectResponse>>() {};
TypeToken ledgerPageType = new TypeToken<Page<LedgerResponse>>() {};
TypeToken liquidityPoolPageType = new TypeToken<Page<LiquidityPoolResponse>>() {};
TypeToken offerPageType = new TypeToken<Page<OfferResponse>>() {};
TypeToken operationPageType = new TypeToken<Page<OperationResponse>>() {};
TypeToken pathPageType = new TypeToken<Page<PathResponse>>() {};
TypeToken tradePageType = new TypeToken<Page<TradeResponse>>() {};
TypeToken tradeAggregationPageType = new TypeToken<Page<TradeAggregationResponse>>() {};
TypeToken transactionPageType = new TypeToken<Page<TransactionResponse>>() {};
TypeToken claimableBalancePageType = new TypeToken<Page<ClaimableBalanceResponse>>() {};
TypeToken<Page<AccountResponse>> accountPageType = new TypeToken<Page<AccountResponse>>() {};
TypeToken<Page<AssetResponse>> assetPageType = new TypeToken<Page<AssetResponse>>() {};
TypeToken<Page<EffectResponse>> effectPageType = new TypeToken<Page<EffectResponse>>() {};
TypeToken<Page<LedgerResponse>> ledgerPageType = new TypeToken<Page<LedgerResponse>>() {};
TypeToken<Page<LiquidityPoolResponse>> liquidityPoolPageType = new TypeToken<Page<LiquidityPoolResponse>>() {};
TypeToken<Page<OfferResponse>> offerPageType = new TypeToken<Page<OfferResponse>>() {};
TypeToken<Page<OperationResponse>> operationPageType = new TypeToken<Page<OperationResponse>>() {};
TypeToken<Page<PathResponse>> pathPageType = new TypeToken<Page<PathResponse>>() {};
TypeToken<Page<TradeResponse>> tradePageType = new TypeToken<Page<TradeResponse>>() {};
TypeToken<Page<TradeAggregationResponse>> tradeAggregationPageType = new TypeToken<Page<TradeAggregationResponse>>() {};
TypeToken<Page<TransactionResponse>> transactionPageType = new TypeToken<Page<TransactionResponse>>() {};
TypeToken<Page<ClaimableBalanceResponse>> claimableBalancePageType = new TypeToken<Page<ClaimableBalanceResponse>>() {};

instance = new GsonBuilder()
.registerTypeAdapter(Asset.class, new AssetDeserializer())
.registerTypeAdapter(Predicate.class, new PredicateDeserializer())
.registerTypeAdapter(OperationResponse.class, new OperationDeserializer())
.registerTypeAdapter(EffectResponse.class, new EffectDeserializer())
.registerTypeAdapter(LiquidityPoolID.class, new LiquidityPoolIDDeserializer())
.registerTypeAdapter(LiquidityPoolType.class, new LiquidityPoolTypeDeserializer())
.registerTypeAdapter(TransactionResponse.class, new TransactionDeserializer())
.registerTypeAdapter(accountPageType.getType(), new PageDeserializer<AccountResponse>(accountPageType))
.registerTypeAdapter(assetPageType.getType(), new PageDeserializer<AssetResponse>(assetPageType))
.registerTypeAdapter(effectPageType.getType(), new PageDeserializer<AccountResponse>(effectPageType))
.registerTypeAdapter(effectPageType.getType(), new PageDeserializer<EffectResponse>(effectPageType))
.registerTypeAdapter(ledgerPageType.getType(), new PageDeserializer<LedgerResponse>(ledgerPageType))
.registerTypeAdapter(liquidityPoolPageType.getType(), new PageDeserializer<LiquidityPoolResponse>(liquidityPoolPageType))
.registerTypeAdapter(offerPageType.getType(), new PageDeserializer<OfferResponse>(offerPageType))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.LiquidityPoolID;

import java.lang.reflect.Type;

class LiquidityPoolIDDeserializer implements JsonDeserializer<LiquidityPoolID> {

public class LiquidityPoolIDDeserializer implements JsonDeserializer<LiquidityPoolID> {
@Override
public LiquidityPoolID deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new LiquidityPoolID(json.getAsString());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.stellar.sdk.responses;

import com.google.gson.*;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.xdr.LiquidityPoolType;

import java.lang.reflect.Type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.Asset;
import org.stellar.sdk.LiquidityPoolID;
Expand All @@ -17,7 +18,7 @@

import java.lang.reflect.Type;

class OperationDeserializer implements JsonDeserializer<OperationResponse> {
public class OperationDeserializer implements JsonDeserializer<OperationResponse> {
private static final OperationType[] AllOperationTypes = OperationType.values();
@Override
public OperationResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/org/stellar/sdk/responses/Page.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package org.stellar.sdk.responses;


import com.google.common.base.Preconditions;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import org.stellar.sdk.requests.ResponseHandler;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;

import org.stellar.sdk.requests.ResponseHandler;

import com.google.common.base.Preconditions;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import okhttp3.OkHttpClient;
import okhttp3.Request;

Expand Down
16 changes: 3 additions & 13 deletions src/main/java/org/stellar/sdk/responses/PageDeserializer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.stellar.sdk.responses;

import java.lang.reflect.Type;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
Expand All @@ -9,13 +11,6 @@
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;

import org.stellar.sdk.Asset;
import org.stellar.sdk.Predicate;
import org.stellar.sdk.responses.effects.EffectResponse;
import org.stellar.sdk.responses.operations.OperationResponse;

import java.lang.reflect.Type;

class PageDeserializer<E> implements JsonDeserializer<Page<E>> {
private TypeToken<Page<E>> pageType;

Expand All @@ -39,14 +34,9 @@ public Page<E> deserialize(JsonElement json, Type typeOfT, JsonDeserializationCo

// Create new Gson object with adapters needed in Page
Gson gson = new GsonBuilder()
.registerTypeAdapter(Asset.class, new AssetDeserializer())
.registerTypeAdapter(Predicate.class, new PredicateDeserializer())
.registerTypeAdapter(OperationResponse.class, new OperationDeserializer())
.registerTypeAdapter(EffectResponse.class, new EffectDeserializer())
.registerTypeAdapter(LiquidityPoolResponse.class, new LiquidityPoolDeserializer())
.registerTypeAdapter(TransactionResponse.class, new TransactionDeserializer())
.create();

return gson.fromJson(newJson, pageType.getType());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.google.common.collect.Lists;
import com.google.gson.*;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.Predicate;
import org.stellar.sdk.xdr.Duration;
import org.stellar.sdk.xdr.Int64;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.common.io.BaseEncoding;
import com.google.gson.*;
import com.google.gson.annotations.JsonAdapter;

import org.stellar.sdk.Memo;
import org.stellar.sdk.xdr.TransactionEnvelope;
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/stellar/sdk/responses/TransactionResponse.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.stellar.sdk.responses;

import com.google.common.base.Optional;
import com.google.gson.annotations.SerializedName;

import org.stellar.sdk.Memo;
import static com.google.common.base.Preconditions.checkNotNull;

import java.math.BigInteger;
import java.util.List;

import static com.google.common.base.Preconditions.checkNotNull;
import org.stellar.sdk.Memo;

import com.google.common.base.Optional;
import com.google.gson.annotations.SerializedName;

/**
* Represents transaction response.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
package org.stellar.sdk.responses.effects;

import com.google.common.base.Optional;
import com.google.gson.annotations.SerializedName;
import java.math.BigInteger;

import org.stellar.sdk.responses.EffectDeserializer;
import org.stellar.sdk.responses.Link;
import org.stellar.sdk.responses.MuxedAccount;
import org.stellar.sdk.responses.Pageable;
import org.stellar.sdk.responses.Response;

import java.math.BigInteger;
import com.google.common.base.Optional;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;

/**
* Abstract class for effect responses.
* @see <a href="https://developers.stellar.org/api/resources/effects/" target="_blank">Effect documentation</a>
* @see org.stellar.sdk.requests.EffectsRequestBuilder
* @see org.stellar.sdk.Server#effects()
*/
@JsonAdapter(EffectDeserializer.class)
public abstract class EffectResponse extends Response implements Pageable {
@SerializedName("id")
private String id;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.stellar.sdk.responses.operations;

import com.google.common.base.Optional;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;

import org.stellar.sdk.responses.*;
Expand All @@ -13,6 +14,7 @@
* @see org.stellar.sdk.requests.OperationsRequestBuilder
* @see org.stellar.sdk.Server#operations()
*/
@JsonAdapter(OperationDeserializer.class)
public abstract class OperationResponse extends Response implements Pageable {
@SerializedName("id")
private Long id;
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/org/stellar/sdk/xdr/LiquidityPoolType.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

import java.io.IOException;

import org.stellar.sdk.responses.LiquidityPoolTypeDeserializer;

import com.google.gson.annotations.JsonAdapter;


// === xdr source ============================================================

Expand All @@ -15,6 +19,7 @@
// };

// ===========================================================================
@JsonAdapter(LiquidityPoolTypeDeserializer.class)
public enum LiquidityPoolType implements XdrElement {
LIQUIDITY_POOL_CONSTANT_PRODUCT(0),
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public void testDeserialize() {

assertEquals(transactionsPage.getRecords().get(0).getSourceAccount(), "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7");
assertEquals(transactionsPage.getRecords().get(0).getPagingToken(), "12884905984");
System.out.println(transactionsPage.getRecords().get(0));
assertTrue(transactionsPage.getRecords().get(0).getMemo() instanceof MemoText);
MemoText memoText = (MemoText) transactionsPage.getRecords().get(0).getMemo();
assertEquals(memoText.getText(), "hello world");
Expand Down

0 comments on commit fe9c9de

Please sign in to comment.