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;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy