Skip to content

Commit 13121aa

Browse files
author
Erik Lenoir
committed
Ajout diverses a propager sur le projet
1 parent a528cee commit 13121aa

File tree

8 files changed

+156
-45
lines changed

8 files changed

+156
-45
lines changed

pom.xml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
<xmlrpc-client.version>3.1.3</xmlrpc-client.version>
1313
<httpclient.version>4.3.6</httpclient.version>
1414
<gson.version>2.8.1</gson.version>
15+
<commons-codec.version>1.10</commons-codec.version>
16+
<commons-collections4.version>4.1</commons-collections4.version>
1517
</properties>
16-
18+
1719
<build>
1820
<sourceDirectory>src</sourceDirectory>
1921
<plugins>
@@ -43,5 +45,15 @@
4345
<artifactId>gson</artifactId>
4446
<version>${gson.version}</version>
4547
</dependency>
48+
<dependency>
49+
<groupId>commons-codec</groupId>
50+
<artifactId>commons-codec</artifactId>
51+
<version>${commons-codec.version}</version>
52+
</dependency>
53+
<dependency>
54+
<groupId>org.apache.commons</groupId>
55+
<artifactId>commons-collections4</artifactId>
56+
<version>${commons-collections4.version}</version>
57+
</dependency>
4658
</dependencies>
4759
</project>

src/multichain/command/KeyCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public KeyCommand(String ip, String port, String login, String password) {
2424
initialize(ip, port, login, password);
2525
}
2626

27-
public Object getPrivkey(String pubkey) throws MultichainException {
28-
return executeDumpPrivkey(pubkey);
27+
public Object getPrivkey(String privkey) throws MultichainException {
28+
return executeDumpPrivkey(privkey);
2929
}
3030

3131
public Object importPrivkey(String privkey) throws MultichainException {

src/multichain/command/WalletTransactionCommand.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ public String sendToAddress(String address, List<BalanceAssetBase> assets) throw
648648
* @return
649649
* @throws MultichainException
650650
*/
651-
public String SendToAddress(String address, double amount) throws MultichainException {
651+
public String sendToAddress(String address, double amount) throws MultichainException {
652652
String stringSendToAddress = "";
653653

654654
Object objectSendToAddress = executeSendToAddress(address, amount);
@@ -687,7 +687,7 @@ public String SendToAddress(String address, double amount) throws MultichainExce
687687
* @return
688688
* @throws MultichainException
689689
*/
690-
public String SendWithMetaData(String address, List<BalanceAssetBase> assets, String hexMetaData)
690+
public String sendWithMetaData(String address, List<BalanceAssetBase> assets, String hexMetaData)
691691
throws MultichainException {
692692
String stringSendWithMetaData = "";
693693

@@ -727,7 +727,7 @@ public String SendWithMetaData(String address, List<BalanceAssetBase> assets, St
727727
* @return
728728
* @throws MultichainException
729729
*/
730-
public String SendWithMetaData(String address, double amount, String hexMetaData) throws MultichainException {
730+
public String sendWithMetaData(String address, double amount, String hexMetaData) throws MultichainException {
731731
String stringSendWithMetaData = "";
732732

733733
Object objectSendWithMetaData = executeSendWithMetaData(address, amount, hexMetaData);
@@ -769,16 +769,16 @@ public String SendWithMetaData(String address, double amount, String hexMetaData
769769
* @return
770770
* @throws MultichainException
771771
*/
772-
public String SendWithMetaDataFrom(String fromAddress, String toAddress, List<BalanceAssetBase> assets,
772+
public String sendWithMetaDataFrom(String fromAddress, String toAddress, List<BalanceAssetBase> assets,
773773
String hexMetaData) throws MultichainException {
774-
String stringSendWithMetaDatarom = "";
774+
String stringSendWithMetaDataFrom = "";
775775

776776
Object objectSendWithMetaDataFrom = executeSendWithMetaDataFrom(fromAddress, toAddress, assets, hexMetaData);
777777
if (verifyInstance(objectSendWithMetaDataFrom, String.class)) {
778-
stringSendWithMetaDatarom = (String) objectSendWithMetaDataFrom;
778+
stringSendWithMetaDataFrom = (String) objectSendWithMetaDataFrom;
779779
}
780780

781-
return stringSendWithMetaDatarom;
781+
return stringSendWithMetaDataFrom;
782782
}
783783

784784
/**
@@ -812,16 +812,28 @@ public String SendWithMetaDataFrom(String fromAddress, String toAddress, List<Ba
812812
* @return
813813
* @throws MultichainException
814814
*/
815-
public String SendWithMetaDataFrom(String fromAddress, String toAddress, double amount, String hexMetaData)
815+
public String sendWithMetaDataFrom(String fromAddress, String toAddress, double amount, String hexMetaData)
816816
throws MultichainException {
817-
String stringSendWithMetaDatarom = "";
817+
String stringSendWithMetaDataFrom = "";
818818

819819
Object objectSendWithMetaDataFrom = executeSendWithMetaDataFrom(fromAddress, toAddress, amount, hexMetaData);
820820
if (verifyInstance(objectSendWithMetaDataFrom, String.class)) {
821-
stringSendWithMetaDatarom = (String) objectSendWithMetaDataFrom;
821+
stringSendWithMetaDataFrom = (String) objectSendWithMetaDataFrom;
822822
}
823823

824-
return stringSendWithMetaDatarom;
824+
return stringSendWithMetaDataFrom;
825+
}
826+
827+
public String sendWithDataFrom(String fromAddress, String toAddress, String assetName, Integer assetValue, String metadata)
828+
throws MultichainException {
829+
String stringSendWithDataFrom = "";
830+
831+
Object objectSendWithDataFrom = executeSendWithDataFrom(fromAddress, toAddress, assetName, assetValue, metadata);
832+
if (verifyInstance(objectSendWithDataFrom, String.class)) {
833+
stringSendWithDataFrom = (String) objectSendWithDataFrom;
834+
}
835+
836+
return stringSendWithDataFrom;
825837
}
826838

827839
}

src/multichain/command/builders/QueryBuilderCommon.java

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package multichain.command.builders;
99

1010
import java.io.IOException;
11+
import java.io.UnsupportedEncodingException;
1112
import java.util.ArrayList;
1213
import java.util.Arrays;
1314
import java.util.HashMap;
@@ -23,6 +24,7 @@
2324
import org.apache.http.HttpResponse;
2425
import org.apache.http.auth.AuthScope;
2526
import org.apache.http.auth.UsernamePasswordCredentials;
27+
import org.apache.http.client.ClientProtocolException;
2628
import org.apache.http.client.CredentialsProvider;
2729
import org.apache.http.client.methods.HttpPost;
2830
import org.apache.http.entity.StringEntity;
@@ -133,7 +135,9 @@ protected enum CommandEnum
133135
SUBSCRIBE,
134136
UNSUBSCRIBE,
135137
VALIDATEADDRESS,
136-
VERIFYMESSAGE
138+
VERIFYMESSAGE,
139+
SENDWITHDATA,
140+
SENDWITHDATAFROM
137141
}
138142

139143
protected void initialize(String ip, String port, String login, String password) {
@@ -165,33 +169,12 @@ protected Object execute(CommandEnum command, Object... parameters) throws Multi
165169
if (httpclient != null && httppost != null) {
166170
try {
167171
// Generate Mapping of calling arguments
168-
Map<String, Object> entityValues = new HashMap<String, Object>();
169-
entityValues.put("id", UUID.randomUUID().toString());
170-
entityValues.put("method", command.toString().toLowerCase());
171-
List<Object> paramList = new ArrayList<Object>(Arrays.asList(parameters));
172-
entityValues.put("params", paramList);
173-
172+
Map<String, Object> entityValues = prepareMap(command, parameters);
174173
// Generate the entity and initialize request
175-
StringEntity rpcEntity = new StringEntity(formatJson(entityValues));
174+
StringEntity rpcEntity = prepareRpcEntity(entityValues);
176175
httppost.setEntity(rpcEntity);
177-
178176
// Execute the request and get the answer
179-
HttpResponse response = httpclient.execute(httppost);
180-
HttpEntity entity = response.getEntity();
181-
182-
String rpcAnswer = EntityUtils.toString(entity);
183-
184-
final Gson gson = new GsonBuilder().create();
185-
final MultiChainRPCAnswer multiChainRPCAnswer = gson.fromJson(rpcAnswer, MultiChainRPCAnswer.class);
186-
187-
if (multiChainRPCAnswer != null && multiChainRPCAnswer.getError() == null) {
188-
return multiChainRPCAnswer.getResult();
189-
} else if (multiChainRPCAnswer != null && multiChainRPCAnswer.getError() != null) {
190-
throw new MultichainException("code :" + multiChainRPCAnswer.getError().get("code").toString(),
191-
"message : " + multiChainRPCAnswer.getError().get("message").toString());
192-
} else {
193-
throw new MultichainException(null, "General RPC Exceution Technical Error");
194-
}
177+
return executeRequest();
195178

196179
} catch (IOException e) {
197180
e.printStackTrace();
@@ -202,7 +185,38 @@ protected Object execute(CommandEnum command, Object... parameters) throws Multi
202185
"MultiChainCommand not initialized, please specify ip, port, user and pwd !");
203186

204187
}
188+
}
189+
190+
private StringEntity prepareRpcEntity(Map<String, Object> entityValues) throws UnsupportedEncodingException {
191+
return new StringEntity(formatJson(entityValues));
192+
}
193+
194+
private Object executeRequest() throws IOException, ClientProtocolException, MultichainException {
195+
HttpResponse response = httpclient.execute(httppost);
196+
HttpEntity entity = response.getEntity();
197+
198+
String rpcAnswer = EntityUtils.toString(entity);
199+
200+
final Gson gson = new GsonBuilder().create();
201+
final MultiChainRPCAnswer multiChainRPCAnswer = gson.fromJson(rpcAnswer, MultiChainRPCAnswer.class);
202+
203+
if (multiChainRPCAnswer != null && multiChainRPCAnswer.getError() == null) {
204+
return multiChainRPCAnswer.getResult();
205+
} else if (multiChainRPCAnswer != null && multiChainRPCAnswer.getError() != null) {
206+
throw new MultichainException("code :" + multiChainRPCAnswer.getError().get("code").toString(),
207+
"message : " + multiChainRPCAnswer.getError().get("message").toString());
208+
} else {
209+
throw new MultichainException(null, "General RPC Exceution Technical Error");
210+
}
211+
}
205212

213+
private Map<String, Object> prepareMap(CommandEnum command, Object... parameters) {
214+
Map<String, Object> entityValues = new HashMap<String, Object>();
215+
entityValues.put("id", UUID.randomUUID().toString());
216+
entityValues.put("method", command.toString().toLowerCase());
217+
List<Object> paramList = new ArrayList<Object>(Arrays.asList(parameters));
218+
entityValues.put("params", paramList);
219+
return entityValues;
206220
}
207221

208222
@SuppressWarnings("rawtypes")

src/multichain/command/builders/QueryBuilderKey.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
*/
1717
public class QueryBuilderKey extends QueryBuilderCommon {
1818

19-
protected Object executeDumpPrivkey(String pubkey) throws MultichainException {
20-
return execute(CommandEnum.DUMPPRIVKEY, pubkey);
19+
protected Object executeDumpPrivkey(String privkey) throws MultichainException {
20+
return execute(CommandEnum.DUMPPRIVKEY, privkey);
2121
}
2222

2323
protected Object executeImportPrivkey(String privkey) throws MultichainException {

src/multichain/command/builders/QueryBuilderWalletTransaction.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
*/
88
package multichain.command.builders;
99

10+
import java.util.AbstractMap.SimpleEntry;
1011
import java.util.List;
1112

1213
import multichain.command.MultichainException;
1314
import multichain.command.tools.MultichainTestParameter;
1415
import multichain.object.BalanceAssetBase;
16+
import multichain.object.formatters.GsonFormatters;
17+
import multichain.object.formatters.HexFormatter;
1518

1619
/**
1720
* @author Ub - H. MARTEAU
@@ -284,9 +287,8 @@ protected Object executeListAddressTransactions(String address, long count, long
284287
throws MultichainException {
285288
MultichainTestParameter.isNotNullOrEmpty("address", address);
286289
MultichainTestParameter.valueIsPositive("count", count);
287-
MultichainTestParameter.valueIsPositive("skip", skip);
288-
return execute(CommandEnum.LISTADDRESSTRANSACTIONS, address, String.valueOf(count), String.valueOf(skip),
289-
verbose);
290+
MultichainTestParameter.valueIsNotNegative("skip", skip);
291+
return execute(CommandEnum.LISTADDRESSTRANSACTIONS, address, count, skip, verbose);
290292
}
291293

292294
/**
@@ -344,7 +346,7 @@ protected Object executeListAddressTransactions(String address, long count, long
344346
protected Object executeListWalletTransaction(long count, long skip, boolean includeWatchonly, boolean verbose)
345347
throws MultichainException {
346348
MultichainTestParameter.valueIsPositive("count", count);
347-
MultichainTestParameter.valueIsPositive("skip", skip);
349+
MultichainTestParameter.valueIsNotNegative("skip", skip);
348350
return execute(CommandEnum.LISTWALLETTRANSACTIONS, String.valueOf(count), String.valueOf(skip),
349351
includeWatchonly, verbose);
350352
}
@@ -687,5 +689,18 @@ protected Object executeSendWithMetaDataFrom(String fromAddress, String toAddres
687689

688690
return execute(CommandEnum.SENDWITHMETADATAFROM, fromAddress, toAddress, String.valueOf(amount), hexMetaData);
689691
}
692+
693+
protected Object executeSendWithDataFrom(String fromAddress, String toAddress, String assetName, Integer assetValue, String metadata)
694+
throws MultichainException {
695+
MultichainTestParameter.isNotNullOrEmpty("fromAddress", fromAddress);
696+
MultichainTestParameter.isNotNullOrEmpty("toAddress", toAddress);
697+
MultichainTestParameter.isNotNullOrEmpty("metadata", metadata);
698+
MultichainTestParameter.isNotNull("asset", assetName);
699+
MultichainTestParameter.valueIsPositive("assetValue", assetValue);
700+
701+
SimpleEntry<String, Integer> simpleEntry = new SimpleEntry<String, Integer>(assetName, assetValue);
702+
return execute(CommandEnum.SENDWITHDATAFROM, fromAddress, toAddress, simpleEntry, HexFormatter.toHex(metadata));
703+
}
704+
690705

691706
}

src/multichain/object/formatters/GsonFormatters.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@
77
*/
88
package multichain.object.formatters;
99

10+
import java.lang.reflect.Type;
11+
import java.util.AbstractMap.SimpleEntry;
1012
import java.util.List;
1113

1214
import com.google.gson.Gson;
1315
import com.google.gson.GsonBuilder;
16+
import com.google.gson.JsonElement;
17+
import com.google.gson.JsonObject;
18+
import com.google.gson.JsonSerializationContext;
19+
import com.google.gson.JsonSerializer;
1420

1521
/**
1622
* @author Ub - H. MARTEAU
@@ -33,8 +39,22 @@ protected static String formatJson(List<Object> values) {
3339

3440
protected static String formatJson(Object value) {
3541
final GsonBuilder builder = new GsonBuilder();
42+
builder.registerTypeAdapter(SimpleEntry.class, new SimpleEntryAdapter());
3643
final Gson gson = builder.create();
3744

3845
return gson.toJson(value);
3946
}
47+
48+
public static class SimpleEntryAdapter implements JsonSerializer<SimpleEntry> {
49+
50+
@Override
51+
public JsonElement serialize(SimpleEntry src, Type typeOfSrc,
52+
JsonSerializationContext context) {
53+
54+
JsonObject obj = new JsonObject();
55+
obj.addProperty(src.getKey().toString(), (Integer) src.getValue());
56+
57+
return obj;
58+
}
59+
}
4060
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package multichain.object.formatters;
2+
3+
import java.io.UnsupportedEncodingException;
4+
5+
import org.apache.commons.codec.DecoderException;
6+
import org.apache.commons.codec.binary.Hex;
7+
8+
public class HexFormatter {
9+
10+
private static final String CHARSET = "UTF-8";
11+
12+
@Deprecated
13+
public static String toHexOld(String asciiValue) {
14+
StringBuffer hex = new StringBuffer();
15+
for (int i = 0; i < asciiValue.length(); i++) {
16+
hex.append(Integer.toHexString((int) asciiValue.charAt(i)));
17+
}
18+
return hex.toString();
19+
}
20+
21+
public static String toHex(String asciiValue) {
22+
try {
23+
return Hex.encodeHexString(asciiValue.getBytes(CHARSET));
24+
} catch (UnsupportedEncodingException e) {
25+
return null;
26+
}
27+
}
28+
29+
public static String fromHex(String hexValue) {
30+
try {
31+
final byte[] bytes = Hex.decodeHex(hexValue.toCharArray());
32+
return new String(bytes, CHARSET);
33+
} catch (DecoderException | UnsupportedEncodingException e) {
34+
return null;
35+
}
36+
}
37+
38+
}

0 commit comments

Comments
 (0)