Skip to content

Commit 2556c0c

Browse files
committed
Exceptions introduced
Minor refactoring Work in Progress
1 parent 68bbb4c commit 2556c0c

14 files changed

+227
-40
lines changed

src/main/java/io/api/App.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
*/
88
public class App {
99
public static void main(String[] args) {
10-
System.out.println("Hello World!");
1110
EtherScanApi api = new EtherScanApi(args[0]);
1211
String abi = api.contract().contractAbi("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413");
13-
int i = abi.length();
12+
System.out.println(abi);
1413
}
1514
}

src/main/java/io/api/core/IAccountProvider.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.api.model.Transaction;
66

77
import java.util.List;
8-
import java.util.Optional;
98

109
/**
1110
* EtherScan - API Descriptions
@@ -17,33 +16,30 @@
1716
public interface IAccountProvider {
1817

1918
/** Address ETH balance */
20-
Optional<Balance> balance(String address);
19+
Balance balance(String address);
2120

2221
/**
2322
* Maximum 20 address for batch request
24-
* If address > 20, then there will be more than 1 request
23+
* If address > 20, then there will be more than 1 request performed
2524
*/
2625
List<Balance> balances(List<String> addresses);
2726

2827
/** All txs */
2928
List<Transaction> txs(String address);
3029
/** Only last 10000 txs */
3130
List<Transaction> txs(String address, int startBlock);
32-
/** Only last 10000 txs */
3331
List<Transaction> txs(String address, int startBlock, int endBlock);
3432

3533
/** All internal txs */
3634
List<Transaction> txsInternal(String address);
3735
/** Only last 10000 internal txs */
3836
List<Transaction> txsInternal(String address, int startBlock);
39-
/** Only last 10000 internal txs */
4037
List<Transaction> txsInternal(String address, int startBlock, int endBlock);
4138

4239
/** All token txs */
4340
List<Transaction> txsToken(String address);
4441
/** Only last 10000 token txs */
4542
List<Transaction> txsToken(String address, int startBlock);
46-
/** Only last 10000 token txs */
4743
List<Transaction> txsToken(String address, int startBlock, int endBlock);
4844

4945
/** All blocks mined by address */
Lines changed: 91 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package io.api.core.impl;
22

3+
import com.sun.istack.internal.NotNull;
4+
import io.api.core.IAccountProvider;
5+
import io.api.model.Balance;
6+
import io.api.model.Block;
7+
import io.api.model.Transaction;
8+
9+
import java.util.List;
310
import java.util.Map;
411

512
/**
@@ -8,19 +15,94 @@
815
* @author GoodforGod
916
* @since 28.10.2018
1017
*/
11-
public class AccountProvider extends BasicProvider {
18+
public class AccountProvider extends BasicProvider implements IAccountProvider {
19+
20+
private static final int MAX_END_BLOCK = 999999999;
21+
private static final int MIN_START_BLOCK = 0;
1222

13-
private static final String startBlockParam = "&endblock=";
14-
private static final String endBlockParam = "&startblock=";
15-
private static final String offsetParam = "&offset=";
16-
private static final String pageParam = "&page=";
17-
private static final String sortAscParam = "&sort=asc";
18-
private static final String sortDescParam = "&sort=desc";
19-
private static final String blockTypeParam = "&blocktype=blocks";
20-
private static final String addressParam = "&address=";
23+
private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks";
24+
private static final String START_BLOCK_PARAM = "&endblock=";
25+
private static final String END_BLOCK_PARAM = "&startblock=";
26+
private static final String SORT_DESC_PARAM = "&sort=desc";
27+
private static final String SORT_ASC_PARAM = "&sort=asc";
28+
private static final String ADDRESS_PARAM = "&address=";
29+
private static final String OFFSET_PARAM = "&offset=";
30+
private static final String PAGE_PARAM = "&page=";
2131

2232
public AccountProvider(final String baseUrl,
2333
final Map<String, String> header) {
2434
super("account", baseUrl, header);
2535
}
36+
37+
@NotNull
38+
@Override
39+
public Balance balance(final String address) {
40+
return null;
41+
}
42+
43+
@NotNull
44+
@Override
45+
public List<Balance> balances(final List<String> addresses) {
46+
return null;
47+
}
48+
49+
@NotNull
50+
@Override
51+
public List<Transaction> txs(final String address) {
52+
return null;
53+
}
54+
55+
@NotNull
56+
@Override
57+
public List<Transaction> txs(final String address, final int startBlock) {
58+
return txs(address, startBlock, MAX_END_BLOCK);
59+
}
60+
61+
@NotNull
62+
@Override
63+
public List<Transaction> txs(final String address, final int startBlock, final int endBlock) {
64+
return null;
65+
}
66+
67+
@NotNull
68+
@Override
69+
public List<Transaction> txsInternal(final String address) {
70+
return null;
71+
}
72+
73+
@NotNull
74+
@Override
75+
public List<Transaction> txsInternal(final String address, final int startBlock) {
76+
return txsInternal(address, startBlock, MAX_END_BLOCK);
77+
}
78+
79+
@NotNull
80+
@Override
81+
public List<Transaction> txsInternal(final String address, final int startBlock, final int endBlock) {
82+
return null;
83+
}
84+
85+
@NotNull
86+
@Override
87+
public List<Transaction> txsToken(final String address) {
88+
return null;
89+
}
90+
91+
@NotNull
92+
@Override
93+
public List<Transaction> txsToken(final String address, final int startBlock) {
94+
return txsToken(address, startBlock, MAX_END_BLOCK);
95+
}
96+
97+
@NotNull
98+
@Override
99+
public List<Transaction> txsToken(final String address, final int startBlock, final int endBlock) {
100+
return null;
101+
}
102+
103+
@NotNull
104+
@Override
105+
public List<Block> minedBlocks(final String address) {
106+
return null;
107+
}
26108
}

src/main/java/io/api/core/impl/BasicProvider.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.api.core.impl;
22

3-
import io.api.core.executor.HttpExecutor;
3+
import com.jsoniter.JsonIterator;
4+
import io.api.error.ConnectionException;
5+
import io.api.error.ParseException;
6+
import io.api.executor.HttpExecutor;
47

58
import java.io.IOException;
69
import java.util.Map;
@@ -33,16 +36,20 @@ private String getModuleParam() {
3336
return moduleParam + module;
3437
}
3538

36-
<T> T deserialize(String json, Class<T> tClass) {
37-
return deserialize(json, tClass);
39+
<T> T convert(String json, Class<T> tClass) {
40+
try {
41+
return JsonIterator.deserialize(json, tClass);
42+
} catch (Exception e) {
43+
throw new ParseException(e.getMessage(), e.getCause());
44+
}
3845
}
3946

4047
String getRequest(final String urlParameters) {
4148
try {
4249
final String fullUrl = baseUrl + getModuleParam() + urlParameters;
4350
return executor.get(fullUrl, headers);
4451
} catch (IOException e) {
45-
throw new RuntimeException(e.getLocalizedMessage());
52+
throw new ConnectionException(e.getLocalizedMessage(), e.getCause());
4653
}
4754
}
4855
}

src/main/java/io/api/core/impl/ContractProvider.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.api.core.impl;
22

33
import io.api.core.IContractProvider;
4+
import io.api.model.temporary.StringResponseTO;
45
import io.api.util.BasicUtils;
56

67
import java.util.Map;
@@ -13,8 +14,8 @@
1314
*/
1415
public class ContractProvider extends BasicProvider implements IContractProvider {
1516

16-
private static final String abiParam = "&action=getabi";
17-
private static final String addressParam = "&address=";
17+
private static final String ABI_PARAM = "&action=getabi";
18+
private static final String ADDRESS_PARAM = "&address=";
1819

1920
public ContractProvider(final String baseUrl,
2021
final Map<String, String> headers) {
@@ -23,9 +24,10 @@ public ContractProvider(final String baseUrl,
2324

2425
@Override
2526
public String contractAbi(String address) {
26-
if(!BasicUtils.isAddress(address))
27-
throw new RuntimeException("Not address");
27+
BasicUtils.validateAddress(address);
2828

29-
return getRequest(addressParam + address + abiParam);
29+
final String response = getRequest(ABI_PARAM + ADDRESS_PARAM + address);
30+
final StringResponseTO convert = convert(response, StringResponseTO.class);
31+
return convert.getMessage();
3032
}
3133
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.api.error;
2+
3+
/**
4+
* ! NO DESCRIPTION !
5+
*
6+
* @author GoodforGod
7+
* @since 29.10.2018
8+
*/
9+
public class ConnectionException extends RuntimeException {
10+
11+
public ConnectionException(String message) {
12+
super(message);
13+
}
14+
15+
public ConnectionException(String message, Throwable cause) {
16+
super(message, cause);
17+
}
18+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.api.error;
2+
3+
/**
4+
* ! NO DESCRIPTION !
5+
*
6+
* @author GoodforGod
7+
* @since 29.10.2018
8+
*/
9+
public class InvalidAddressException extends RuntimeException {
10+
11+
public InvalidAddressException(String message) {
12+
super(message);
13+
}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.api.error;
2+
3+
/**
4+
* ! NO DESCRIPTION !
5+
*
6+
* @author GoodforGod
7+
* @since 29.10.2018
8+
*/
9+
public class ParseException extends RuntimeException {
10+
11+
public ParseException(String message) {
12+
super(message);
13+
}
14+
15+
public ParseException(String message, Throwable cause) {
16+
super(message, cause);
17+
}
18+
}

src/main/java/io/api/core/executor/HttpExecutor.java renamed to src/main/java/io/api/executor/HttpExecutor.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.api.core.executor;
1+
package io.api.executor;
22

33
import java.io.BufferedReader;
44
import java.io.IOException;
@@ -18,30 +18,41 @@
1818
*/
1919
public class HttpExecutor {
2020

21+
private final int timeout;
22+
23+
public HttpExecutor() {
24+
this(30000);
25+
}
26+
27+
public HttpExecutor(int timeout) {
28+
this.timeout = timeout;
29+
}
30+
2131
public String get(final String urlAsString,
2232
final Map<String, String> headers) throws IOException {
2333

2434
final URL url = new URL(urlAsString);
2535
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
2636
connection.setRequestMethod("GET");
37+
connection.setConnectTimeout(timeout);
2738
headers.forEach(connection::setRequestProperty);
28-
connection.setConnectTimeout(30000);
2939

3040
final int status = connection.getResponseCode();
3141
if (status == HTTP_MOVED_TEMP || status == HTTP_MOVED_PERM) {
3242
final String location = connection.getHeaderField("Location");
3343
return get(location, headers);
3444
}
3545

36-
final BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
37-
String inputLine;
3846
final StringBuilder content = new StringBuilder();
39-
while ((inputLine = in.readLine()) != null)
40-
content.append(inputLine);
47+
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
48+
String inputLine;
49+
while ((inputLine = in.readLine()) != null)
50+
content.append(inputLine);
4151

42-
in.close();
43-
connection.disconnect();
52+
in.close();
53+
}
4454

55+
connection.disconnect();
4556
return content.toString();
4657
}
4758
}

src/main/java/io/api/model/BasicTransaction.java renamed to src/main/java/io/api/model/BaseTransaction.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* @author GoodforGod
77
* @since 28.10.2018
88
*/
9-
abstract class BasicTransaction {
9+
abstract class BaseTransaction {
1010

1111
private String blockNumber;
1212
private String blockHash;
@@ -27,9 +27,9 @@ abstract class BasicTransaction {
2727
private String input;
2828
private String contractAddress;
2929

30-
BasicTransaction(String blockNumber, String blockHash, String timeStamp, String hash, String nonce, String confirmations,
31-
String transactionIndex, String from, String to, String value,
32-
String gas, String gasPrice, String gasUsed, String cumulativeGasUsed, String input, String contractAddress) {
30+
BaseTransaction(String blockNumber, String blockHash, String timeStamp, String hash, String nonce, String confirmations,
31+
String transactionIndex, String from, String to, String value,
32+
String gas, String gasPrice, String gasUsed, String cumulativeGasUsed, String input, String contractAddress) {
3333
this.blockNumber = blockNumber;
3434
this.blockHash = blockHash;
3535
this.timeStamp = timeStamp;

src/main/java/io/api/model/TokenTransaction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* @author GoodforGod
77
* @since 28.10.2018
88
*/
9-
public class TokenTransaction extends BasicTransaction {
9+
public class TokenTransaction extends BaseTransaction {
1010

1111
private String tokenName;
1212
private String tokenSymbol;

src/main/java/io/api/model/Transaction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* @author GoodforGod
77
* @since 28.10.2018
88
*/
9-
public class Transaction extends BasicTransaction {
9+
public class Transaction extends BaseTransaction {
1010

1111
private String txreceipt_status;
1212
private boolean isError;

0 commit comments

Comments
 (0)