diff --git a/duniter4j-client/pom.xml b/duniter4j-client/pom.xml index e470589df59c3e3ebcfd79df6e60b245e906e741..95a85237d0794d79ce9e0c3b2a59162ff9b2b1b1 100644 --- a/duniter4j-client/pom.xml +++ b/duniter4j-client/pom.xml @@ -4,7 +4,7 @@ <parent> <artifactId>duniter4j</artifactId> <groupId>org.duniter</groupId> - <version>1.4.1-SNAPSHOT</version> + <version>1.5.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> diff --git a/duniter4j-core-client/pom.xml b/duniter4j-core-client/pom.xml index 1f7a0c205dd1555998976e73d7dd5d4701b268ae..ab88a741ca9707282a92adeb1c80a733708095f0 100644 --- a/duniter4j-core-client/pom.xml +++ b/duniter4j-core-client/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.duniter</groupId> <artifactId>duniter4j</artifactId> - <version>1.4.1-SNAPSHOT</version> + <version>1.5.7-SNAPSHOT</version> </parent> <artifactId>duniter4j-core-client</artifactId> @@ -24,12 +24,6 @@ </properties> <dependencies> - <!-- Compile --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <dependency> <groupId>org.duniter</groupId> <artifactId>duniter4j-core-shared</artifactId> @@ -52,7 +46,6 @@ <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> </dependency> - <dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly-client</artifactId> @@ -91,6 +84,12 @@ <artifactId>jackson-databind</artifactId> </dependency> + <!-- Compile --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + </dependency> + <!-- Spring (need for spring compatibility) --> <dependency> <groupId>org.springframework</groupId> diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java index fde296ab11b891e8c8f982ad188836e3d2778030..0414cbab0eecf482b2b47b197d5b33d4383ad5c7 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java @@ -82,6 +82,7 @@ public class Configuration { super(); this.applicationConfig = applicationConfig; this.optionKeyToNotSave = null; + // Override application version initVersion(applicationConfig); } @@ -316,25 +317,25 @@ public class Configuration { return applicationConfig.getOptionAsInt(ConfigurationOption.NETWORK_PEER_UP_MAX_AGE.getKey()); } - public String getNodeElasticSearchHost() { - return applicationConfig.getOption(ConfigurationOption.NODE_ELASTICSEARCH_HOST.getKey()); + public String getCesiumPlusPodHost() { + return applicationConfig.getOption(ConfigurationOption.CESIUM_PLUS_POD_HOST.getKey()); } - public int getNodeElasticSearchPort() { - return applicationConfig.getOptionAsInt(ConfigurationOption.NODE_ELASTICSEARCH_PORT.getKey()); + public int getCesiumPlusPodPort() { + return applicationConfig.getOptionAsInt(ConfigurationOption.CESIUM_PLUS_POD_PORT.getKey()); } - public URL getNodeElasticSearchUrl() { + public URL getCesiumPlusPodUrl() { // Force SSL for 443 port - if (getNodeElasticSearchPort() == 443) { + if (getCesiumPlusPodPort() == 443) { try { - return new URL(applicationConfig.getOption(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey()) + return new URL(applicationConfig.getOption(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey()) .replaceAll("http://", "https://")); } catch(MalformedURLException e) { - return applicationConfig.getOptionAsURL(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey()); + return applicationConfig.getOptionAsURL(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey()); } } else { - return applicationConfig.getOptionAsURL(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey()); + return applicationConfig.getOptionAsURL(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey()); } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java index 35b44db712cad0ccffb10eb2e14582a98ec8a944..67f64e227193c61b96eb12be3ca223e34d714d1d 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java @@ -201,28 +201,28 @@ public enum ConfigurationOption implements ConfigOptionDef { Integer.class, false), - NODE_ELASTICSEARCH_PROTOCOL( + CESIUM_PLUS_POD_PROTOCOL( "duniter4j.node.elasticsearch.protocol", n("duniter4j.config.option.node.elasticsearch.protocol.description"), "http", String.class, false), - NODE_ELASTICSEARCH_HOST( + CESIUM_PLUS_POD_HOST( "duniter4j.node.elasticsearch.host", n("duniter4j.config.option.node.elasticsearch.host.description"), "localhost", String.class, false), - NODE_ELASTICSEARCH_PORT( + CESIUM_PLUS_POD_PORT( "duniter4j.node.elasticsearch.port", n("duniter4j.config.option.node.elasticsearch.port.description"), "9200", Integer.class, false), - NODE_ELASTICSEARCH_URL( + CESIUM_PLUS_POD_URL( "duniter4j.node.elasticsearch.url", n("duniter4j.config.option.node.elasticsearch.url.description"), "${duniter4j.node.elasticsearch.protocol}://${duniter4j.node.elasticsearch.host}:${duniter4j.node.elasticsearch.port}", diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java index f3f4331617a63a285047304733af21a66db5b6d9..220c23664e7d1b872794b255869ab56a6b96613f 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java @@ -47,7 +47,10 @@ public class Example1 { .build(); // Do something fun ! - BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService().getCurrentBlock(aPeer); + BlockchainBlock currentBlock = ServiceLocator.instance() + .getBlockchainRemoteService() + .getCurrentBlock(aPeer); + System.out.println(String.format("Hello %s world !", currentBlock.getCurrency())); } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java index 002b21117bbfe030b5d195f0755e73ce9f21485b..2607e3d053f4ca06d4fe67d054fdafc59629cd4e 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java @@ -23,11 +23,15 @@ package org.duniter.core.client.model; */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.duniter.core.model.IEntity; /** * Created by eis on 07/02/15. */ +@Data +@FieldNameConstants public class Account implements IEntity<Long> { private Long id; @@ -36,46 +40,4 @@ public class Account implements IEntity<Long> { private String salt; private String cryptPin; - @Override - public Long getId() { - return id; - } - - @Override - public void setId(Long id) { - this.id = id; - } - - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getSalt() { - return salt; - } - - public void setSalt(String salt) { - this.salt = salt; - } - - public String getCryptPin() { - return cryptPin; - } - - public void setCryptPin(String cryptPin) { - this.cryptPin = cryptPin; - } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java index a6f06b86f059e9c2ee8d2fe97b17e3213188c577..7d3904097b25530f26fb187d94bc5f5557258218 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java @@ -24,6 +24,10 @@ package org.duniter.core.client.model; import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AccessLevel; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; @@ -34,13 +38,14 @@ import java.io.Serializable; * @since 1.0 * */ +@Data +@FieldNameConstants public abstract class BaseIdentity implements Serializable { private static final long serialVersionUID = 8080689271400316984L; - public static final String PROPERTY_UID = "uid"; - public static final String PROPERTY_PUBKEY = "pubkey"; - public static final String PROPERTY_SIGNATURE = "signature"; + @NoArgsConstructor(access = AccessLevel.PROTECTED) + public static class Fields {} private String pubkey; @@ -48,22 +53,6 @@ public abstract class BaseIdentity implements Serializable { private String uid; - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - @JsonIgnore @Deprecated public String getSelf() { @@ -76,14 +65,6 @@ public abstract class BaseIdentity implements Serializable { this.signature = signature; } - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - @Override public String toString() { StringBuilder sb = new StringBuilder() diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java index f363fbd62c4b304d2f0b71c936b151b44206ac2b..38c4ecf075c48a2d2c42ddaf506f4871e44bb1f7 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java @@ -23,8 +23,13 @@ package org.duniter.core.client.model; */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; + import java.io.Serializable; +@Data +@FieldNameConstants public class TxOutput implements Serializable { private static final long serialVersionUID = 8084087351543574142L; @@ -35,27 +40,4 @@ public class TxOutput implements Serializable { private int base; - public String getPubKey() { - return pubKey; - } - - public void setPubKey(String pubKey) { - this.pubKey = pubKey; - } - - public long getAmount() { - return amount; - } - - public void setAmount(long amount) { - this.amount = amount; - } - - public int getBase() { - return base; - } - - public void setBase(int base) { - this.base = base; - } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java index e4871cd0be986234f9a0cf88268bffccd7ea7de9..d27f54a559be20dfd56fe42338d12e35418722d0 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java @@ -72,7 +72,7 @@ public class BlockchainBlock implements Serializable { private String previousHash; private String previousIssuer; private String innerHash; - private Long dividend; + private BigInteger dividend; private Identity[] identities; private Joiner[] joiners; private Joiner[] leavers; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java index 66ee5a2397f3dc5096f24032eb1c5b234c69c130..9b90a67aeb8098c9c14f196f4eb064d1f62cb43a 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java @@ -23,6 +23,8 @@ package org.duniter.core.client.model.bma; */ import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.apache.commons.lang3.ArrayUtils; import java.io.Serializable; @@ -30,46 +32,21 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +@Data +@FieldNameConstants public class BlockchainDifficulties implements Serializable { private static final long serialVersionUID = -5631089862715942431L; private Long block; private DifficultyLevel[] levels; - public Long getBlock() { - return block; - } - public void setBlock(Long block) { - this.block = block; - } - public DifficultyLevel[] getLevels() { - return levels; - } - public void setLevels(DifficultyLevel[] levels) { - this.levels = levels; - } - + @Data + @FieldNameConstants public static class DifficultyLevel implements Serializable { private static final long serialVersionUID = 1L; private String uid; private int level; - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - this.level = level; - } } @JsonIgnore diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java index e200d19c908bd3187971508e94ce5058bfb91b92..18bf931e082d13d88f2b632bdb18674116be3b3d 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java @@ -22,29 +22,22 @@ package org.duniter.core.client.model.bma; * #L% */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.duniter.core.client.model.BaseIdentity; import java.io.Serializable; +@Data +@FieldNameConstants public class BlockchainMemberships extends BaseIdentity { private static final long serialVersionUID = -5631089862725952431L; private long sigDate; private Membership[] memberships; - public long getSigDate() { - return sigDate; - } - public void setSigDate(long sigDate) { - this.sigDate = sigDate; - } - public Membership[] getMemberships() { - return memberships; - } - public void setMemberships(Membership[] memberships) { - this.memberships = memberships; - } - + @Data + @FieldNameConstants public static class Membership implements Serializable { private static final long serialVersionUID = 1L; @@ -54,35 +47,5 @@ public class BlockchainMemberships extends BaseIdentity { private long blockNumber; private String blockHash; - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } - public String getCurrency() { - return currency; - } - public void setCurrency(String currency) { - this.currency = currency; - } - public String getMembership() { - return membership; - } - public void setMembership(String membership) { - this.membership = membership; - } - public long getBlockNumber() { - return blockNumber; - } - public void setBlockNumber(long blockNumber) { - this.blockNumber = blockNumber; - } - public String getBlockHash() { - return blockHash; - } - public void setBlockHash(String blockHash) { - this.blockHash = blockHash; - } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java index b7386add121d123fad5bc0713be1c519fd728e70..8b643bcb1b7b8786619f0a8214aadd061f2dd691 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java @@ -24,15 +24,19 @@ package org.duniter.core.client.model.bma; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; /** - * Blockwhain parameters. + * Blockchain parameters. * * @author Benoit Lavenier <benoit.lavenier@e-is.pro> * @since 1.0 */ +@Data +@FieldNameConstants // FIXME: next ignore is due to issue on Duniter v1.4 - should be removed later @JsonIgnoreProperties(ignoreUnknown=true) public class BlockchainParameters implements Serializable{ @@ -147,119 +151,6 @@ public class BlockchainParameters implements Serializable{ */ private Double percentRot; - public String getCurrency() { - return currency; - } - - public void setCurrency(String currency) { - this.currency = currency; - } - - public Double getC() { - return c; - } - - public void setC(Double c) { - this.c = c; - } - - public Integer getDt() { - return dt; - } - - public void setDt(Integer dt) { - this.dt = dt; - } - - public Long getUdTime0() { - return udTime0; - } - - public void setUdTime0(Long udTime0) { - this.udTime0 = udTime0; - } - - public Long getUd0() { - return ud0; - } - - public void setUd0(Long ud0) { - this.ud0 = ud0; - } - - public Long getUdReevalTime0() { - return udReevalTime0; - } - - public void setUdReevalTime0(Long udReevalTime0) { - this.udReevalTime0 = udReevalTime0; - } - - public Long getDtReeval() { - return dtReeval; - } - - public void setDtReeval(Long dtReeval) { - this.dtReeval = dtReeval; - } - - public Integer getSigValidity() { - return sigValidity; - } - - public void setSigValidity(Integer sigValidity) { - this.sigValidity = sigValidity; - } - - public Integer getSigQty() { - return sigQty; - } - - public void setSigQty(Integer sigQty) { - this.sigQty = sigQty; - } - - - public Integer getMsValidity() { - return msValidity; - } - - public void setMsValidity(Integer msValidity) { - this.msValidity = msValidity; - } - - public Integer getStepMax() { - return stepMax; - } - - public void setStepMax(Integer stepMax) { - this.stepMax = stepMax; - } - - public Integer getMedianTimeBlocks() { - return medianTimeBlocks; - } - - public void setMedianTimeBlocks(Integer medianTimeBlocks) { - this.medianTimeBlocks = medianTimeBlocks; - } - - public Integer getAvgGenTime() { - return avgGenTime; - } - - public void setAvgGenTime(Integer avgGenTime) { - this.avgGenTime = avgGenTime; - } - - public Integer getDtDiffEval() { - return dtDiffEval; - } - - public void setDtDiffEval(Integer dtDiffEval) { - this.dtDiffEval = dtDiffEval; - } - @Deprecated public Integer getBlocksRot() { return blocksRot; @@ -270,54 +161,6 @@ public class BlockchainParameters implements Serializable{ this.blocksRot = blocksRot; } - public Double getPercentRot() { - return percentRot; - } - - public void setPercentRot(Double percentRot) { - this.percentRot = percentRot; - } - - public Integer getSigPeriod() { - return sigPeriod; - } - - public void setSigPeriod(Integer sigPeriod) { - this.sigPeriod = sigPeriod; - } - - public Integer getSigStock() { - return sigStock; - } - - public void setSigStock(Integer sigStock) { - this.sigStock = sigStock; - } - - public Integer getSigWindow() { - return sigWindow; - } - - public void setSigWindow(Integer sigWindow) { - this.sigWindow = sigWindow; - } - - public Integer getIdtyWindow() { - return idtyWindow; - } - - public void setIdtyWindow(Integer idtyWindow) { - this.idtyWindow = idtyWindow; - } - - public Integer getMsWindow() { - return msWindow; - } - - public void setMsWindow(Integer msWindow) { - this.msWindow = msWindow; - } - @Override public String toString() { return new StringBuilder() diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java index 21c56c53bb7763ff7fa5a7213ea057f80cf5b179..9749bf5d7ed0d961456e73cf79cae90596734dcd 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java @@ -41,7 +41,7 @@ public class Endpoints { private static final Logger log = LoggerFactory.getLogger(Endpoints.class); // Path regexp (can have no starting slash - see issue https://git.duniter.org/clients/cesium-grp/cesium-plus-pod/-/issues/41) - public static final String PATH_REGEXP = "\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*"; + public static final String PATH_REGEXP = "(?:\\/|\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*)"; public static final String EP_END_REGEXP = "(?: ([a-z0-9_ğĞ][a-z0-9-_.ğĞ]*))?(?: ([0-9.]+))?(?: ([0-9a-f:]+)(?:%[a-z0-9]+)?)?(?: ([0-9]+))(?: ("+PATH_REGEXP + "))?$"; public static final String BMA_API_REGEXP = "^BASIC_MERKLED_API" + EP_END_REGEXP; public static final String BMAS_API_REGEXP = "^BMAS" + EP_END_REGEXP; @@ -137,7 +137,7 @@ public class Endpoints { } } - log.warn("Unable to parse Endpoint: " + raw); + log.debug("Unable to parse Endpoint: " + raw); return Optional.empty(); } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java index b4be598abc5f7a29e1d799ba887c54d8d1752422..6e87fa1eaa5ca6af4f6987ac8754661501b4972b 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java @@ -23,6 +23,8 @@ package org.duniter.core.client.model.bma; */ import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.duniter.core.util.CollectionUtils; import org.duniter.core.util.Preconditions; import org.duniter.core.util.StringUtils; @@ -35,6 +37,8 @@ import java.util.stream.Stream; /** * Created by eis on 05/02/15. */ +@Data +@FieldNameConstants public class NetworkPeering implements Serializable { private Integer version; private String currency; @@ -47,74 +51,6 @@ public class NetworkPeering implements Serializable { public Endpoint[] endpoints; - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public String getCurrency() { - return currency; - } - - public void setCurrency(String currency) { - this.currency = currency; - } - - public String getBlock() { - return block; - } - - public void setBlock(String block) { - this.block = block; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - /** - * Unsigned peering document - * @return - */ - public String getRaw() { - return raw; - } - - public void setRaw(String raw) { - this.raw = raw; - } - - public Endpoint[] getEndpoints() { - return endpoints; - } - - public void setEndpoints(Endpoint[] endpoints) { - this.endpoints = endpoints; - } - public String toString() { // Use raw, if exists String raw = this.raw != null ? this.raw : toUnsignedRaw(); @@ -161,6 +97,8 @@ public class NetworkPeering implements Serializable { .toString(); } + @Data + @FieldNameConstants public static class Endpoint implements Serializable { public String api; public String dns; @@ -172,80 +110,6 @@ public class NetworkPeering implements Serializable { public Boolean useSsl; public String raw; - public String getApi() { - return api; - } - - public void setApi(String api) { - this.api = api; - } - - public String getDns() { - return dns; - } - - public void setDns(String dns) { - this.dns = dns; - } - - public String getIpv4() { - return ipv4; - } - - public void setIpv4(String ipv4) { - this.ipv4 = ipv4; - } - - public String getIpv6() { - return ipv6; - } - - public void setIpv6(String ipv6) { - this.ipv6 = ipv6; - } - - public Integer getPort() { - return port; - } - - public void setPort(Integer port) { - this.port = port; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public Boolean useSsl() { - return useSsl; - } - - public void setUseSsl(Boolean useSsl) { - this.useSsl = useSsl; - } - - @JsonIgnore - public String getRaw() { - return raw; - } - - @JsonIgnore - public void setRaw(String raw) { - this.raw = raw; - } - @Override public String toString() { if (raw != null) return raw; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java index 94b6d1c6b9ea7c18d1cb6d4e41cb6c8b0919d425..0ea639975c5145f63a0a1e79c5b3a8485af01088 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java @@ -26,12 +26,16 @@ import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSetter; import com.google.common.base.Joiner; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; /** * Created by eis on 05/02/15. */ +@Data +@FieldNameConstants public class NetworkPeers implements Serializable { public Peer[] peers; @@ -40,42 +44,38 @@ public class NetworkPeers implements Serializable { return Joiner.on(",").join(peers); } + @Data + @FieldNameConstants public static class Peer extends NetworkPeering implements Serializable { + + public interface JsonFields { + String FIRST_DOWN = "first_down"; + String LAST_TRY = "last_try"; + } public Long firstDown; public Long lastTry; - public Long lastContact; public String hash; - @JsonGetter("first_down") + @JsonGetter(JsonFields.FIRST_DOWN) public Long getFirstDown() { return firstDown; } - @JsonSetter("first_down") + @JsonSetter(JsonFields.FIRST_DOWN) public void setFirstDown(Long firstDown) { this.firstDown = firstDown; } - @JsonGetter("last_try") + @JsonGetter(JsonFields.LAST_TRY) public Long getLastTry() { return lastTry; } - @JsonSetter("last_try") + @JsonSetter(JsonFields.LAST_TRY) public void setLastTry(Long lastTry) { this.lastTry = lastTry; } - @JsonGetter("lastContact") - public Long getLastContact() { - return lastContact; - } - - @JsonSetter("lastContact") - public void setLastContact(Long lastContact) { - this.lastContact = lastContact; - } - @JsonIgnore public String getHash() { return hash; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java index abbcab556f03b1721345c5306eff8732146ef4a9..a0fdbea9260bb682582044596b9bf7fee09068da 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java @@ -22,6 +22,14 @@ package org.duniter.core.client.model.bma; * #L% */ +import com.fasterxml.jackson.annotation.JsonGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSetter; +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +@Data +@FieldNameConstants public class TxHistory { private String currency; @@ -30,31 +38,9 @@ public class TxHistory { private History history; - public String getCurrency() { - return currency; - } - - public void setCurrency(String currency) { - this.currency = currency; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public History getHistory() { - return history; - } - - public void setHistory(History history) { - this.history = history; - } - - public class History { + @Data + @FieldNameConstants + public static class History { private Movement[] sent; @@ -63,42 +49,16 @@ public class TxHistory { private Movement[] sending; private Movement[] receiving; - - public Movement[] getSent() { - return sent; - } - - public void setSent(Movement[] sent) { - this.sent = sent; - } - - public Movement[] getReceived() { - return received; - } - - public void setReceived(Movement[] received) { - this.received = received; - } - - public Movement[] getSending() { - return sending; - } - - public void setSending(Movement[] sending) { - this.sending = sending; - } - - public Movement[] getReceiving() { - return receiving; - } - - public void setReceiving(Movement[] receiving) { - this.receiving = receiving; - } } + @Data + @FieldNameConstants public static class Movement { + public interface JsonFields { + String BLOCK_NUMBER = "block_number"; + } + private String version; private String[] issuers; @@ -113,102 +73,19 @@ public class TxHistory { private String hash; - private int block_number; + private int blockNumber; private long time; - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String[] getIssuers() { - return issuers; - } - - public void setIssuers(String[] issuers) { - this.issuers = issuers; - } - - public String[] getInputs() { - return inputs; - } - - public void setInputs(String[] inputs) { - this.inputs = inputs; - } - - public String[] getOutputs() { - return outputs; - } - - public void setOutputs(String[] outputs) { - this.outputs = outputs; - } - - public String getComment() { - return comment; - } - - public void setComment(String comment) { - this.comment = comment; - } - - public String[] getSignatures() { - return signatures; - } - - public void setSignatures(String[] signatures) { - this.signatures = signatures; - } - - public String getHash() { - return hash; - } - - public String getFingerprint() { - return hash; - } - - public void setHash(String hash) { - this.hash = hash; - } - - /** - * @deprecated use getBlockNumber() instead - * @return - */ - @Deprecated - public int getBlock_number() { - return block_number; - } - - /** - * @deprecated use setBlockNumber() instead - * @return - */ - @Deprecated - public void setBlock_number(int block_number) { - this.block_number = block_number; - } - + @JsonGetter(JsonFields.BLOCK_NUMBER) public int getBlockNumber() { - return block_number; - } - - public void setNumber(int block_number) { - this.block_number = block_number; + return blockNumber; } - public long getTime() { - return time; + @JsonSetter(JsonFields.BLOCK_NUMBER) + public void setBlockNumber(int blockNumber) { + this.blockNumber = blockNumber; } - public void setTime(long time) { - this.time = time; - } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java index 010f225924c1d3f4ed1009595ea9533dc17bd3ff..2192174446b283c6befb241b6fc7558858477069 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java @@ -23,8 +23,13 @@ package org.duniter.core.client.model.bma; */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; + import java.io.Serializable; +@Data +@FieldNameConstants public class TxSource { private String currency; @@ -33,37 +38,20 @@ public class TxSource { private Source[] sources; - public TxSource() { - } - - public String getCurrency() { - return currency; - } - - public void setCurrency(String currency) { - this.currency = currency; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public Source[] getSources() { - return sources; - } - - public void setSources(Source[] sources) { - this.sources = sources; - } - + @Data + @FieldNameConstants public static class Source implements Serializable, Cloneable { private static final long serialVersionUID = 8084087351543574142L; + + /** + * Source type : <ul> + * <li><code>D</code> : Universal Dividend</li> + * <li><code>T</code> : Transaction</li> + * </ul> + * @return + */ private String type; private String identifier; private String noffset; @@ -71,9 +59,6 @@ public class TxSource { private String conditions; private int base; - public Source() { - } - @Override public Object clone() throws CloneNotSupportedException { @@ -86,64 +71,5 @@ public class TxSource { clone.base = base; return clone; } - - /** - * Source type : <ul> - * <li><code>D</code> : Universal Dividend</li> - * <li><code>T</code> : Transaction</li> - * </ul> - * @return - */ - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getIdentifier() { - return identifier; - } - - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public String getNoffset() { - return noffset; - } - - public void setNoffset(String noffset) { - this.noffset = noffset; - } - - public long getAmount() { - return amount; - } - - public void setAmount(long amount) { - this.amount = amount; - } - - - public String getConditions() { - return conditions; - } - - public void setConditions(String conditions) { - this.conditions = conditions; - } - - public int getBase() { - return base; - } - - public void setBase(int base) { - this.base = base; - } - } - - } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java index 2ec3cc3fb673ceb0cc32eae941a445f32d92b9d3..c325d4931c0fe16000b2302c352e3a665a88f51b 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java @@ -25,6 +25,8 @@ package org.duniter.core.client.model.bma; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonSetter; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.duniter.core.client.model.local.Identity; import java.io.Serializable; @@ -35,65 +37,28 @@ import java.io.Serializable; * @since 1.0 * */ +@Data +@FieldNameConstants public class WotCertification implements Serializable{ private static final long serialVersionUID = 8568496827055074607L; private String pubkey; - private String uid; - private String sigDate; - private boolean isMember; - private Certification[] certifications; - public Certification[] getCertifications() { - return certifications; - } - - public void setCertifications(Certification[] certifications) { - this.certifications = certifications; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - @JsonGetter("is_member") - public boolean isMember() { - return isMember; - } - - public void setIsMember(boolean isMember) { - this.isMember = isMember; - } - - public String getSigDate() { - return sigDate; - } - - public void setSigDate(String sigDate) { - this.sigDate = sigDate; - } + @Data + @FieldNameConstants public static class Certification extends Identity { private static final long serialVersionUID = 2204517069552693026L; + public interface JsonFields { + String CERT_TIME = "cert_time"; + } private CertTime certTime; private String sigDate; @@ -105,91 +70,35 @@ public class WotCertification implements Serializable{ private boolean wasMember; - @JsonGetter("cert_time") + @JsonGetter(JsonFields.CERT_TIME) public CertTime getCertTime() { return certTime; } - @JsonSetter("cert_time") + @JsonSetter(JsonFields.CERT_TIME) public void setCertTime(CertTime certTime) { this.certTime = certTime; } - /** - * Indicate whether the certification is written in the blockchain or not. - */ - public Written getWritten() { - return written; - } - - public void setWritten(Written written) { - this.written = written; - } - - public String getSigDate() { - return sigDate; - } - - public void setSigDate(String sigDate) { - this.sigDate = sigDate; - } - - @JsonGetter("wasMember") - public boolean wasMember() { - return wasMember; - } - - public void setWasMember(boolean wasMember) { - this.wasMember = wasMember; - } } + @Data + @FieldNameConstants public static class CertTime implements Serializable { private static final long serialVersionUID = -358639516878884523L; private int block = -1; - private long medianTime = -1; - public int getBlock() { - return block; - } - - public void setBlock(int block) { - this.block = block; - } - - public long getMedianTime() { - return medianTime; - } - - public void setMedianTime(long medianTime) { - this.medianTime = medianTime; - } - } + @Data + @FieldNameConstants public static class Written implements Serializable{ private long number = -1; - private String hash = ""; - public long getNumber() { - return number; - } - - public void setNumber(long number) { - this.number = number; - } - - public String getHash() { - return hash; - } - - public void setHash(String hash) { - this.hash = hash; - } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java index 9118eceef928c50d30167b17635e5e30893f26f0..ae6df0db2e8f5afefc1c39892c5ea4b604d89135 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java @@ -25,30 +25,17 @@ package org.duniter.core.client.model.bma; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonSetter; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; - +@Data +@FieldNameConstants public class WotLookup { private boolean partial; private Result[] results; - public boolean isPartial() { - return partial; - } - - public void setPartial(boolean partial) { - this.partial = partial; - } - - public Result[] getResults() { - return results; - } - - public void setResults(Result[] results) { - this.results = results; - } - public String toString() { String s = ""; for (Result result : results) { @@ -62,6 +49,8 @@ public class WotLookup { return s; } + @Data + @FieldNameConstants public static class Result implements Serializable { private static final long serialVersionUID = -39452685440482106L; @@ -70,33 +59,16 @@ public class WotLookup { private Uid[] uids; private SignedSignature[] signed; - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public Uid[] getUids() { - return uids; - } - - public void setUids(Uid[] uids) { - this.uids = uids; - } - - public SignedSignature[] getSigned() { - return signed; - } - - public void setSigned(SignedSignature[] signed) { - this.signed = signed; - } } + @Data + @FieldNameConstants public static class Uid { + public interface JsonFields { + String REVOCATION_SIG="revocation_sig"; + String REVOKED_ON="revoked_on"; + } private String uid; private Meta meta; private String self; @@ -105,106 +77,65 @@ public class WotLookup { private String revocationSig; private OtherSignature[] others; - public Uid(){ - - } - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - public Meta getMeta() { - return meta; - } - - public void setMeta(Meta meta) { - this.meta = meta; - } - - public String getSelf() { - return self; - } - - public void setSelf(String self) { - this.self = self; - } - - public OtherSignature[] getOthers() { - return others; - } - - public void setOthers(OtherSignature[] others) { - this.others = others; - } - - public Boolean getRevoked() { - return revoked; - } - - public void setRevoked(Boolean revoked) { - this.revoked = revoked; - } - - @JsonGetter("revocation_sig") + @JsonGetter(JsonFields.REVOCATION_SIG) public String getRevocationSig() { return revocationSig; } - @JsonSetter("revocation_sig") + @JsonSetter(JsonFields.REVOCATION_SIG) public void setRevocationSig(String revocationSig) { this.revocationSig = revocationSig; } - @JsonGetter("revoked_on") + @JsonGetter(JsonFields.REVOKED_ON) public Long getRevokedOn() { return revokedOn; } - @JsonSetter("revoked_on") + @JsonSetter(JsonFields.REVOKED_ON) public void setRevokedOn(Long revokedOn) { this.revokedOn = revokedOn; } } - + @Data + @FieldNameConstants public static class Meta implements Serializable { + + public interface JsonFields { + String BLOCK_HASH="block_hash"; + String BLOCK_NUMBER="block_number"; + } + private String timestamp; private String blockHash; private Long blockNumber; - public String getTimestamp() { - return timestamp; - } - - public void setTimestamp(String timestamp) { - this.timestamp = timestamp; - } - @JsonGetter("block_hash") + @JsonGetter(JsonFields.BLOCK_HASH) public String getBlockHash() { return blockHash; } - @JsonSetter("block_hash") + @JsonSetter(JsonFields.BLOCK_HASH) public void setBlockHash(String blockHash) { this.blockHash = blockHash; } - @JsonGetter("block_number") + @JsonGetter(JsonFields.BLOCK_NUMBER) public Long getBlockNumber() { return blockNumber; } - @JsonSetter("block_number") + @JsonSetter(JsonFields.BLOCK_NUMBER) public void setBlockNumberH(Long blockNumber) { this.blockNumber = blockNumber; } } + @Data + @FieldNameConstants public static class OtherSignature { private String pubkey; @@ -213,60 +144,14 @@ public class WotLookup { private String[] uids; private boolean isMember; private boolean wasMember; - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public Meta getMeta() { - return meta; - } - - public void setMeta(Meta meta) { - this.meta = meta; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - - public String[] getUids() { - return uids; - } - - public void setUids(String[] uids) { - this.uids = uids; - } - - @JsonGetter("isMember") - public boolean isMember() { - return isMember; - } - - @JsonSetter("isMember") - public void setMember(boolean member) { - isMember = member; - } - - @JsonGetter("wasMember") - public boolean wasMember() { - return wasMember; - } - - public void setWasMember(boolean wasMember) { - this.wasMember = wasMember; - } } + @Data + @FieldNameConstants public static class SignedSignature { + public interface JsonFields { + String CERT_TIME="cert_time"; + } private String uid; private String pubkey; @@ -276,85 +161,33 @@ public class WotLookup { private boolean isMember; private boolean wasMember; - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public Meta getMeta() { - return meta; - } - - public void setMeta(Meta meta) { - this.meta = meta; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - - @JsonGetter("isMember") - public boolean isMember() { - return isMember; - } - - public void setIsMember(boolean isMember) { - this.isMember = isMember; - } - - @JsonGetter("wasMember") - public boolean wasMember() { - return wasMember; - } - - public void setWasMember(boolean wasMember) { - this.wasMember = wasMember; - } - - @JsonGetter("cert_time") + @JsonGetter(JsonFields.CERT_TIME) public CertTime getCerTime() { return cerTime; } - @JsonSetter("cert_time") + @JsonSetter(JsonFields.CERT_TIME) public void setCerTime(CertTime cerTime) { this.cerTime = cerTime; } } + @Data + @FieldNameConstants public static class CertTime implements Serializable { - private Long block; - private String blockHash; - - public Long getBlock() { - return block; + public interface JsonFields { + String BLOCK_HASH="block_hash"; } - public void setBlock(Long block) { - this.block = block; - } + private Long block; + private String blockHash; - @JsonGetter("block_hash") + @JsonGetter(JsonFields.BLOCK_HASH) public String getBlockHash() { return blockHash; } - @JsonSetter("block_hash") + @JsonSetter(JsonFields.BLOCK_HASH) public void setBlockHash(String blockHash) { this.blockHash = blockHash; } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java index 814fa61ffbd0d83d4801e788e1956fef563ed255..918e3a3da0855360dd02ff99b6b8bf65401f0983 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java @@ -22,20 +22,16 @@ package org.duniter.core.client.model.bma; * #L% */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; + import java.io.Serializable; +@Data +@FieldNameConstants public class WotPendingMembership implements Serializable { - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_PUBKEY = "pubkey"; - public static final String PROPERTY_UID = "uid"; - public static final String PROPERTY_VERSION = "version"; - public static final String PROPERTY_CURRENCY = "currency"; - public static final String PROPERTY_MEMBERSHIP = "membership"; - public static final String PROPERTY_BLOCK_NUMBER = "blockNumber"; - public static final String PROPERTY_BLOCK_HASH = "blockHash"; - public static final String PROPERTY_WRITTEN = "written"; + private static final long serialVersionUID = 1L; private String pubkey; private String uid; @@ -46,54 +42,5 @@ public class WotPendingMembership implements Serializable { private String blockHash; private Boolean written; - public String getPubkey() { - return pubkey; - } - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - public String getUid() { - return uid; - } - public void setUid(String uid) { - this.uid = uid; - } - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } - public String getCurrency() { - return currency; - } - public void setCurrency(String currency) { - this.currency = currency; - } - public String getMembership() { - return membership; - } - public void setMembership(String membership) { - this.membership = membership; - } - public long getBlockNumber() { - return blockNumber; - } - public void setBlockNumber(Integer blockNumber) { - this.blockNumber = blockNumber; - } - public String getBlockHash() { - return blockHash; - } - public void setBlockHash(String blockHash) { - this.blockHash = blockHash; - } - - public Boolean getWritten() { - return written; - } - public void setWritten(Boolean written) { - this.written = written; - } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java index 55c677e93357fadef53cf12d866acac7baf1361e..79a0eb1542139eb28f89721eb19e32de0f0055da 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java @@ -22,15 +22,16 @@ package org.duniter.core.client.model.bma; * #L% */ -import org.duniter.core.client.model.BaseIdentity; +import lombok.Data; +import lombok.experimental.FieldNameConstants; -public class WotPendingMemberships extends BaseIdentity { +import java.io.Serializable; + +@Data +@FieldNameConstants +public class WotPendingMemberships implements Serializable { private static final long serialVersionUID = -5631089862725952431L; private WotPendingMembership[] memberships; - public WotPendingMembership[] getMemberships() { - return memberships; - } - } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java index 5aaedf5b9b01e01079d030eebc3bafb7791276cf..45f2bb90ec5b7ffe7c5fa245313c99e60fbf85a8 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java @@ -24,9 +24,13 @@ package org.duniter.core.client.model.bma; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonSetter; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; +@Data +@FieldNameConstants public class WotRequirements implements Serializable { private static final long serialVersionUID = 1L; @@ -42,163 +46,21 @@ public class WotRequirements implements Serializable { private Boolean isSentry; private Boolean wasMember; - private Certification[] certifications; - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - public String getSig() { - return sig; - } - - public void setSig(String sig) { - this.sig = sig; - } - - public Meta getMeta() { - return meta; - } - - public void setMeta(Meta meta) { - this.meta = meta; - } - - public String getRevocation_sig() { - return revocation_sig; - } - - public void setRevocation_sig(String revocation_sig) { - this.revocation_sig = revocation_sig; - } - - public Boolean getRevoked() { - return revoked; - } - - public void setRevoked(Boolean revoked) { - this.revoked = revoked; - } - - public Long getRevoked_on() { - return revoked_on; - } - - public void setRevoked_on(Long revoked_on) { - this.revoked_on = revoked_on; - } - - public Boolean getExpired() { - return expired; - } - - public void setExpired(Boolean expired) { - this.expired = expired; - } - - public Boolean getOutdistanced() { - return outdistanced; - } - - public void setOutdistanced(Boolean outdistanced) { - this.outdistanced = outdistanced; - } - - public Boolean getIsSentry() { - return isSentry; - } - - public void setIsSentry(Boolean sentry) { - isSentry = sentry; - } - - public Boolean getWasMember() { - return wasMember; - } - - public void setWasMember(Boolean wasMember) { - this.wasMember = wasMember; - } - - - public Certification[] getCertifications() { - return certifications; - } - - public void setCertifications(Certification[] certifications) { - this.certifications = certifications; - } - + @Data + @FieldNameConstants public static class Meta implements Serializable { private String timestamp; - - public String getTimestamp() { - return timestamp; - } - - public void setTimestamp(String timestamp) { - this.timestamp = timestamp; - } } + @Data + @FieldNameConstants public static class Certification implements Serializable { private long timestamp; private String from; private String to; private String sig; private long expiresIn; - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getFrom() { - return from; - } - - public void setFrom(String from) { - this.from = from; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public String getSig() { - return sig; - } - - public void setSig(String sig) { - this.sig = sig; - } - - public long getExpiresIn() { - return expiresIn; - } - - public void setExpiresIn(long expiresIn) { - this.expiresIn = expiresIn; - } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java index cb6bb7344a21ee3a9d9ca53460c108fb55c1a8ab..3fbcc01aa8158b4d27ea77a2ff5b9c087cb6c398 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java @@ -22,15 +22,14 @@ package org.duniter.core.client.model.bma; * #L% */ +import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.duniter.core.client.model.BaseIdentity; +@Data +@FieldNameConstants public class WotRequirementsResponse extends BaseIdentity { private static final long serialVersionUID = -5631089862725952141L; private WotRequirements[] identities; - - public WotRequirements[] getIdentities() { - return identities; - } - } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java index 0813f9327129efe1a71c1e6c221dc6aff7bc7225..f481a325708c847f6a38079aab05a78901867093 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java @@ -24,36 +24,18 @@ package org.duniter.core.client.model.bma; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.base.Joiner; +import lombok.Data; +import lombok.experimental.FieldNameConstants; import java.io.Serializable; /** * Created by blavenie on 22/01/19. */ +@Data +@FieldNameConstants public class Ws2pHead implements Serializable { - - public class AccessConfig { - public boolean useTor; - private String mode; - - public boolean isUseTor() { - return useTor; - } - - public void setUseTor(boolean useTor) { - this.useTor = useTor; - } - - public String getMode() { - return mode; - } - - public void setMode(String mode) { - this.mode = mode; - } - } - public Integer version; public String pubkey; public String block; @@ -67,84 +49,12 @@ public class Ws2pHead implements Serializable { public AccessConfig privateConfig = new AccessConfig(); public AccessConfig publicConfig = new AccessConfig(); - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public String getPubkey() { - return pubkey; - } - - public void setPubkey(String pubkey) { - this.pubkey = pubkey; - } - - public String getBlock() { - return block; - } - - public void setBlock(String block) { - this.block = block; - } - - public String getWs2pid() { - return ws2pid; - } - - public void setWs2pid(String ws2pid) { - this.ws2pid = ws2pid; - } - - public String getSoftware() { - return software; - } - - public void setSoftware(String software) { - this.software = software; - } - - public String getSoftwareVersion() { - return softwareVersion; - } - - public void setSoftwareVersion(String softwareVersion) { - this.softwareVersion = softwareVersion; - } - - public String getPowPrefix() { - return powPrefix; - } - - public void setPowPrefix(String powPrefix) { - this.powPrefix = powPrefix; - } - - public AccessConfig getPrivateConfig() { - return privateConfig; - } - - public void setPrivateConfig(AccessConfig privateConfig) { - this.privateConfig = privateConfig; - } - - public AccessConfig getPublicConfig() { - return publicConfig; - } - public void setPublicConfig(AccessConfig publicConfig) { - this.publicConfig = publicConfig; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; + @Data + @FieldNameConstants + public static class AccessConfig { + public boolean useTor; + private String mode; } @Override diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java index a6aa5d6d31e55f145fabdec981f452a5ec2c0783..8019418b45b473dd3ba90af9aa2a94df2c2d5bd5 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java @@ -25,10 +25,8 @@ package org.duniter.core.client.model.local; import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; +import lombok.experimental.FieldNameConstants; import org.duniter.core.client.model.bma.BlockchainParameters; /** @@ -36,9 +34,13 @@ import org.duniter.core.client.model.bma.BlockchainParameters; */ @Data @Builder +@FieldNameConstants @NoArgsConstructor @AllArgsConstructor public class Currency implements ICurrency { + @NoArgsConstructor(access = AccessLevel.PROTECTED) + public static class Fields {} + private String id; private BlockchainParameters parameters; private String firstBlockSignature; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java index 5588633cabb4b09d2e471efea4893e100eeeb41e..fed22a920ce2deeff4b545aad1a0d2909b89f68d 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java @@ -24,12 +24,19 @@ package org.duniter.core.client.model.local; import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AccessLevel; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; import org.duniter.core.client.model.BaseIdentity; @Data +@FieldNameConstants public class Identity extends BaseIdentity { + @NoArgsConstructor(access = AccessLevel.PROTECTED) + public static class Fields extends BaseIdentity.Fields {} + private String currency; // The timestamp value of the signature date (a BLOCK_UID) diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java index f462d71b74d1e9588e7c8f45764e544c28d6d1c9..fc416e154f0d3f5e6dcb8150a9dd74737c8071de 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java @@ -24,10 +24,17 @@ package org.duniter.core.client.model.local; import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.duniter.core.client.model.BaseIdentity; import org.duniter.core.model.IEntity; +@Data +@FieldNameConstants public class Member extends Identity implements IEntity<String> { + public static class Fields extends Identity.Fields {} + private static final long serialVersionUID = 8448049949323699700L; @JsonIgnore diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java index a6fdf0595826d1f1555a7735fbdac1049a95d744..bb1e7d7bcfb37741415824438c47e1f1b8d8f9c6 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java @@ -26,6 +26,7 @@ package org.duniter.core.client.model.local; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.base.Preconditions; import lombok.Data; +import lombok.experimental.FieldNameConstants; import org.apache.commons.lang3.StringUtils; import org.duniter.core.client.model.bma.EndpointApi; import org.duniter.core.client.model.bma.NetworkPeering; @@ -35,6 +36,7 @@ import org.duniter.core.util.http.InetAddressUtils; import java.util.StringJoiner; @Data +@FieldNameConstants public class Peer implements IEntity<String> { public static Builder builder() { @@ -309,7 +311,7 @@ public class Peer implements IEntity<String> { // else (if define) use dns // else (if define) use ipv6 host = ((port == 443 || useSsl) && dns != null) ? dns : - (ipv4 != null && InetAddressUtils.isNotLocalIPv4Address(ipv4) ? ipv4 : + (ipv4 != null && InetAddressUtils.isInternetIPv4Address(ipv4) ? ipv4 : (dns != null ? dns : (ipv6 != null ? "[" + ipv6 + "]" : ""))); // Use local IPv4 if no other host found @@ -483,12 +485,9 @@ public class Peer implements IEntity<String> { ERROR } + @Data + @FieldNameConstants public static class Peering { - public static final String PROPERTY_VERSION = "version"; - public static final String PROPERTY_SIGNATURE = "signature"; - public static final String PROPERTY_BLOCK_NUMBER = "blockNumber"; - public static final String PROPERTY_BLOCK_HASH = "blockHash"; - public static final String PROPERTY_RAW = "raw"; private Integer version; private String signature; @@ -496,58 +495,11 @@ public class Peer implements IEntity<String> { private String blockHash; private String raw; - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public String getSignature() { - return signature; - } - - public void setSignature(String signature) { - this.signature = signature; - } - - public Integer getBlockNumber() { - return blockNumber; - } - - public void setBlockNumber(Integer blockNumber) { - this.blockNumber = blockNumber; - } - - public String getBlockHash() { - return blockHash; - } - - public void setBlockHash(String blockHash) { - this.blockHash = blockHash; - } - - /** - * The raw peering document (unsigned) - * @return - */ - public String getRaw() { - return raw; - } - - public void setRaw(String raw) { - this.raw = raw; - } } + @Data + @FieldNameConstants public static class Stats { - public static final String PROPERTY_SOFTWARE = "software"; - public static final String PROPERTY_VERSION = "version"; - public static final String PROPERTY_STATUS = "status"; - public static final String PROPERTY_UID = "uid"; - public static final String PROPERTY_LAST_UP_TIME = "lastUpTime"; - public static final String PROPERTY_FIRST_DOWN_TIME = "firstDownTime"; private String software; private String version; @@ -564,133 +516,12 @@ public class Peer implements IEntity<String> { private Long lastUpTime; private Long firstDownTime; - public Stats() { - - } - - public PeerStatus getStatus() { - return status; - } @JsonIgnore public boolean isReacheable() { return status != null && status == PeerStatus.UP; } - public void setStatus(PeerStatus status) { - this.status = status; - } - - public String getError() { - return error; - } - - public void setError(String error) { - this.error = error; - } - - public String getSoftware() { - return software; - } - - public void setSoftware(String software) { - this.software = software; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public Integer getBlockNumber() { - return blockNumber; - } - public void setBlockNumber(Integer blockNumber) { - this.blockNumber = blockNumber; - } - - public String getBlockHash() { - return blockHash; - } - - public void setBlockHash(String blockHash) { - this.blockHash = blockHash; - } - - public Long getMedianTime() { - return medianTime; - } - - public void setMedianTime(Long medianTime) { - this.medianTime = medianTime; - } - - public boolean isMainConsensus() { - return isMainConsensus; - } - - public void setMainConsensus(boolean mainConsensus) { - this.isMainConsensus = mainConsensus; - } - - public boolean isForkConsensus() { - return isForkConsensus; - } - - public void setForkConsensus(boolean forkConsensus) { - this.isForkConsensus = forkConsensus; - } - - public Double getConsensusPct() { - return consensusPct; - } - - public void setConsensusPct(Double consensusPct) { - this.consensusPct = consensusPct; - } - - public Integer getHardshipLevel() { - return hardshipLevel; - } - - public void setHardshipLevel(Integer hardshipLevel) { - this.hardshipLevel = hardshipLevel; - } - - public String getUid() { - return uid; - } - - public void setUid(String uid) { - this.uid = uid; - } - - /** - * Last time the peer was UP (in second) - * @return - */ - public Long getLastUpTime() { - return lastUpTime; - } - - public void setLastUpTime(Long lastUpTime) { - this.lastUpTime = lastUpTime; - } - - /** - * First time the peer was DOWN (in second) - * @return - */ - public Long getFirstDownTime() { - return firstDownTime; - } - - public void setFirstDownTime(Long firstDownTime) { - this.firstDownTime = firstDownTime; - } } } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java index c4d2c22db26f9785570218c8b68803a669d7d840..79258e8e985e401e4ce7edccf89f32395f1b85de 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java @@ -23,6 +23,7 @@ package org.duniter.core.client.service; */ +import lombok.extern.slf4j.Slf4j; import org.duniter.core.beans.Bean; import org.duniter.core.beans.BeanFactory; import org.duniter.core.client.repositories.PeerRepository; @@ -43,12 +44,10 @@ import org.slf4j.LoggerFactory; import java.io.Closeable; import java.io.IOException; +@Slf4j public class ServiceLocator implements Closeable { - /* Logger */ - private static final Logger log = LoggerFactory.getLogger(ServiceLocator.class); - /** * The shared instance of this ServiceLocator. */ diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java index e6d48bb839ac93950ec375578900d35292ef52dc..41fa40d60e273d92b53a2f2985e8944c3d3120d5 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java @@ -30,6 +30,8 @@ import org.duniter.core.client.model.local.Peer; import org.duniter.core.client.model.local.Wallet; import org.duniter.core.client.service.exception.InsufficientCreditException; +import java.util.Map; + public interface TransactionRemoteService extends Service { @@ -46,6 +48,18 @@ public interface TransactionRemoteService extends Service { String transfer(Peer peer, Wallet wallet, String destPubKey, long amount, String comment) throws InsufficientCreditException; + /** + * Transfer TX to the given peer, or if null to currency's default peer + * @param peer + * @param wallet + * @param mapPubkeyAmount + * @param comment + * @return + * @throws InsufficientCreditException + */ + String transfer(Peer peer, Wallet wallet, Map<String,Long> mapPubkeyAmount, + String comment) throws InsufficientCreditException; + /** * Same, using the default currency's peer * @param wallet @@ -58,6 +72,8 @@ public interface TransactionRemoteService extends Service { String transfer(Wallet wallet, String destPubKey, long amount, String comment) throws InsufficientCreditException; + String transfer(Wallet wallet, Map<String,Long> mapPubkeyAmount, String comment) throws InsufficientCreditException; + TxSource getSources(Peer peer, String pubKey); TxSource getSources(String currencyId, String pubKey); diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java index d97b4d455116a2f7bf5e1872057db4e9bd295620..f59f74a443b129812caa580ac3fa55d7930244d4 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java @@ -48,7 +48,9 @@ import org.slf4j.LoggerFactory; import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implements TransactionRemoteService { @@ -65,6 +67,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen private CryptoService cryptoService; + private BlockchainRemoteService blockchainService; public TransactionRemoteServiceImpl() { super(); @@ -74,6 +77,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen public void afterPropertiesSet() { super.afterPropertiesSet(); cryptoService = ServiceLocator.instance().getCryptoService(); + blockchainService = ServiceLocator.instance().getBlockchainRemoteService(); } @@ -85,20 +89,34 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen return transfer(null, wallet, destPubKey, amount, comment); } + @Override + public String transfer(Wallet wallet, Map<String, Long> mapPubkeyAmount, String comment) throws InsufficientCreditException { + return transfer(null, wallet, mapPubkeyAmount, comment); + } + public String transfer(Peer peer, Wallet wallet, String destPubKey, long amount, String comment) throws InsufficientCreditException { + Map<String,Long> mapPubkeyAmount = new HashMap<String,Long>(); + mapPubkeyAmount.put(destPubKey,amount); + return transfer(peer,wallet,mapPubkeyAmount,comment); + } + + public String transfer(Peer peer, Wallet wallet, Map<String,Long> mapPubkeyAmount, + String comment) throws InsufficientCreditException{ + Preconditions.checkNotNull(wallet); Preconditions.checkArgument(peer != null || wallet.getCurrency() != null); peer = peer != null ? peer : peerService.getActivePeerByCurrency(wallet.getCurrency()); + // Get current block - BlockchainBlock currentBlock = httpService.executeRequest(peer, BlockchainRemoteServiceImpl.URL_BLOCK_CURRENT, BlockchainBlock.class); + BlockchainBlock currentBlock = blockchainService.getCurrentBlock(peer, true); // http post /tx/process HttpPost httpPost = new HttpPost(httpService.getPath(peer, URL_TX_PROCESS)); // compute transaction - String transaction = getSignedTransaction(peer, wallet, currentBlock, destPubKey, 0, amount, + String transaction = getSignedTransaction(peer, wallet, currentBlock, mapPubkeyAmount , 0, comment); if (log.isDebugEnabled()) { @@ -220,9 +238,8 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen protected String getSignedTransaction(Peer peer, Wallet wallet, BlockchainBlock block, - String destPubKey, + Map<String,Long> mapPubkeyAmount, int locktime, - long amount, String comment) throws InsufficientCreditException { Preconditions.checkNotNull(wallet); Preconditions.checkArgument(StringUtils.isNotBlank(wallet.getCurrency())); @@ -245,8 +262,8 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen List<TxSource.Source> txInputs = new ArrayList<>(); List<TxOutput> txOutputs = new ArrayList<>(); computeTransactionInputsAndOuputs(block.getUnitbase(), - wallet.getPubKeyHash(), destPubKey, - sources, amount, txInputs, txOutputs); + wallet.getPubKeyHash(),mapPubkeyAmount, + sources, txInputs, txOutputs); String transaction = getTransaction(wallet.getCurrency(), block.getNumber(), block.getHash(), @@ -363,9 +380,14 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen public void computeTransactionInputsAndOuputs(int currentUnitBase, String srcPubKey, - String destPubKey, TxSource.Source[] sources, long amount, + Map<String,Long> mapPubkeyAmount, + TxSource.Source[] sources, List<TxSource.Source> resultInputs, List<TxOutput> resultOutputs) throws InsufficientCreditException{ + long amount =0; + for(String pubKey : mapPubkeyAmount.keySet()){ + amount += mapPubkeyAmount.get(pubKey); + } TxInputs inputs = new TxInputs(); inputs.amount = 0; inputs.minBase = currentUnitBase; @@ -402,18 +424,23 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen long rest = amount; int outputBase = inputs.maxBase; long outputAmount; - while(rest > 0) { - outputAmount = truncBase(rest, outputBase); - rest -= outputAmount; - if (outputAmount > 0) { - outputAmount = inversePowBase(outputAmount, outputBase); - TxOutput output = new TxOutput(); - output.setAmount(outputAmount); - output.setBase(outputBase); - output.setPubKey(destPubKey); - resultOutputs.add(output); + for(String destPubKey : mapPubkeyAmount.keySet()) { + rest = mapPubkeyAmount.get(destPubKey); + outputBase = inputs.maxBase; + + while (rest > 0) { + outputAmount = truncBase(rest, outputBase); + rest -= outputAmount; + if (outputAmount > 0) { + outputAmount = inversePowBase(outputAmount, outputBase); + TxOutput output = new TxOutput(); + output.setAmount(outputAmount); + output.setBase(outputBase); + output.setPubKey(destPubKey); + resultOutputs.add(output); + } + outputBase--; } - outputBase--; } rest = inputs.amount - amount; outputBase = inputs.maxBase; diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java index 8c03aecf9abdd592698e270202e029fee66bc761..1a5c320e84bee223b134bcc6d301e9ce36b6afb7 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java @@ -58,7 +58,7 @@ public class CurrencyPodRemoteServiceImpl extends BaseRemoteServiceImpl implemen public void afterPropertiesSet() { super.afterPropertiesSet(); config = Configuration.instance(); - peer = Peer.builder().host(config.getNodeElasticSearchHost()).port(config.getNodeElasticSearchPort()).build(); + peer = Peer.builder().host(config.getCesiumPlusPodHost()).port(config.getCesiumPlusPodPort()).build(); } @Override diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java index b07d3765d3838653458f74de5a059c7b6516be3b..8ebc362e615ffc2cb2c17575feda1740923429cd 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java @@ -23,11 +23,9 @@ package org.duniter.core.client.service.local; */ import org.duniter.core.beans.Service; -import org.duniter.core.client.model.local.Currency; import java.util.Map; import java.util.Optional; -import java.util.Set; /** * Created by eis on 07/02/15. @@ -51,7 +49,7 @@ public interface DividendService extends Service { * Return a map of UD (key=blockNumber, value=amount) * @return */ - Map<Integer, Long> findAllUdByCurrency(String currency); + Map<Integer, Long> findAllDividendsByCurrency(String currency); /** * Update the last currency dividend diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java index 55f24b1d59c8ab84bf068e134a563f821795f105..9766d987487b2a22290e15effcad2d226dd2a64d 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java @@ -140,14 +140,14 @@ public class DividendServiceImpl implements DividendService, InitializingBean { } // Return the full list - return findAllUdByCurrency(currency); + return findAllDividendsByCurrency(currency); } /** * Return a map of UD (key=blockNumber, value=amount) * @return */ - public Map<Integer, Long> findAllUdByCurrency(String currency) { + public Map<Integer, Long> findAllDividendsByCurrency(String currency) { return Beans.getStream(dividendRepository.findAllByCurrency(currency)) .collect(Collectors.toMap(Dividend::getNumber, Dividend::getDividend)); } diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java index 2e35e8b5e5252e944aa4851b255223ef27e60b51..6d28b170c0f9f43c1c17109163a22f2153b54325 100644 --- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java +++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java @@ -91,7 +91,6 @@ public class PeerServiceImpl implements PeerService, InitializingBean { Preconditions.checkArgument(StringUtils.isNotBlank(peer.getHost())); Preconditions.checkArgument(peer.getPort() >= 0); - peer.setHash(Peers.computeHash(peer, cryptoService)); Peer result = peerRepository.save(peer); diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java index a237cb1f7d2931f8002d64edb3ecfe3818394f9a..f3d266dd8cc7242ce4b6afd40b8ddac6376e6a32 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java @@ -24,6 +24,7 @@ package org.duniter.core.client; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.duniter.core.client.config.Configuration; import org.duniter.core.client.config.ConfigurationOption; import org.duniter.core.client.model.local.Peer; @@ -41,9 +42,9 @@ import java.io.IOException; import java.util.List; import java.util.Locale; +@Slf4j public class TestResource extends org.duniter.core.test.TestResource { - private static final Logger log = LoggerFactory.getLogger(TestResource.class); public static TestResource create() { return new TestResource(null); @@ -102,7 +103,7 @@ public class TestResource extends org.duniter.core.test.TestResource { /* -- -- */ /** - * Convenience methods that could be override to initialize other configuration + * Convenience methods that could be overridden to initialize other configuration * * @param configFilename */ diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java index bd51f576aa56b52e6516dab182cad373502d5bfe..e0fe70181825b12c18417638751b7d4f60884162 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java @@ -114,6 +114,13 @@ public class EndpointsTest { Assert.assertNull(ep.id); Assert.assertNull(ep.path); + ep = Endpoints.parse("WS2P bb5e697f node.g1cotis.fr 20901 /").orElse(null); + Assert.assertNotNull(ep); + Assert.assertEquals(ep.api, "WS2P"); + Assert.assertEquals("bb5e697f", ep.id); + Assert.assertEquals("/", ep.path); + Assert.assertEquals(new Integer(20901), ep.port); + // Parse Invalid endpoints // This must failed (missing port) @@ -124,6 +131,22 @@ public class EndpointsTest { ep = Endpoints.parse("WS2P R8t2sg7w g1.ambau.ovh 443").orElse(null); Assert.assertNull(ep); + // Parse invalid + String[] errorEndpoints = new String[]{ + "WS2P 93.8.54.71 20910", // no id + "GVA 77.131.240.28 [2a02:8428:471:6701:cc3e:ef7a:ef19:81f] 30901 gva", // Bad ipV6 (character '[' not need) + "BMAS duniter.adn.life/bma/ 443", // Bad path position + "BMAS duniter.adn.life/bma 443", + "WS2P duniter.vincentux.fr 443 /ws2p", + "WS2P 93.8.54.71 20910", + "BMAS cloudanua.ddns.net/bma 192.168.0.46 443", + "WS2P 9938ae63 cloudanua.ddns.net/bma 443 /ws2p" + }; + for (String epStr: errorEndpoints) { + ep = Endpoints.parse(epStr).orElse(null); + Assert.assertNull(ep); + } + } } diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java index d3e00fa5ce572aac30e9372be238c66ab164a921..f526632f73246601c3f845dfdd23471c555fabed 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java @@ -23,8 +23,12 @@ package org.duniter.core.client.service.bma; */ +import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; import org.duniter.core.client.TestResource; import org.duniter.core.client.config.Configuration; +import org.duniter.core.client.model.bma.BlockchainBlock; +import org.duniter.core.client.model.bma.BlockchainBlocks; import org.duniter.core.client.model.bma.TxSource; import org.duniter.core.client.model.local.Peer; import org.duniter.core.client.model.local.Wallet; @@ -32,20 +36,20 @@ import org.duniter.core.client.service.ServiceLocator; import org.duniter.core.client.service.exception.InsufficientCreditException; import org.duniter.core.util.crypto.CryptoUtils; import org.junit.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.Map; import java.util.Objects; +@Slf4j public class TransactionRemoteServiceTest { - private static final Logger log = LoggerFactory.getLogger(TransactionRemoteServiceTest.class); - @ClassRule public static final TestResource resource = TestResource.create(); private TransactionRemoteService service; - + + private int unitBase = 0; + @Before public void setUp() { service = ServiceLocator.instance().getTransactionRemoteService(); @@ -54,6 +58,12 @@ public class TransactionRemoteServiceTest { Assume.assumeTrue( "Invalid currencies in test fixtures", Objects.equals(resource.getFixtures().getDefaultCurrency(), resource.getFixtures().getCurrency())); + + // Get the current unit base + BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService() + .getCurrentBlock(resource.getFixtures().getDefaultCurrency()); + Assume.assumeNotNull(currentBlock); + this.unitBase = currentBlock.getUnitbase(); } @Test @@ -61,12 +71,30 @@ public class TransactionRemoteServiceTest { try { service.transfer( - createTestWallet(), - resource.getFixtures().getOtherUserPublicKey(), - 1, - "my comments" + System.currentTimeMillis()); + createTestWallet(), + resource.getFixtures().getOtherUserPublicKey(0), + BlockchainBlocks.powBase(1, unitBase), + "Unit test Duniter4j at " + System.currentTimeMillis()); + } catch (InsufficientCreditException e) { + Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e); + } + } + + @Test + public void transferMulti() throws Exception { + + Map<String, Long> destPubkeyAmount = ImmutableMap.<String, Long>builder() + .put(resource.getFixtures().getOtherUserPublicKey(0), BlockchainBlocks.powBase(1, unitBase)) + .put(resource.getFixtures().getOtherUserPublicKey(1), BlockchainBlocks.powBase(2, unitBase)) + .build(); + + try { + service.transfer( + createTestWallet(), + destPubkeyAmount, + "Unit test Duniter4j at " + System.currentTimeMillis()); } catch (InsufficientCreditException e) { - // OK continue + Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e); } } diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java index e80465989f4286160235ee1111840b959bef0e61..486e9669754af4f7dabb35c66bcfa1a3b421f995 100644 --- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java +++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java @@ -49,8 +49,8 @@ public class CurrencyPodRemoteServiceTest { // Make sure ES node is alive if (!service.isNodeAlive()) { log.warn(String.format("Unable to connect to elasticsearch node [%s:%s]. Skipping test.", - config.getNodeElasticSearchHost(), - config.getNodeElasticSearchPort())); + config.getCesiumPlusPodHost(), + config.getCesiumPlusPodPort())); Assume.assumeTrue(false); } } diff --git a/duniter4j-core-shared/pom.xml b/duniter4j-core-shared/pom.xml index 99e919fdc48763088d4453cde7ad69ad7b3ab3fb..2981c90a49665467abc327e7cd1a94885a80a95b 100644 --- a/duniter4j-core-shared/pom.xml +++ b/duniter4j-core-shared/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.duniter</groupId> <artifactId>duniter4j</artifactId> - <version>1.4.1-SNAPSHOT</version> + <version>1.5.7-SNAPSHOT</version> </parent> <artifactId>duniter4j-core-shared</artifactId> @@ -83,8 +83,8 @@ </dependency> <dependency> - <groupId>javax.mail</groupId> - <artifactId>mail</artifactId> + <groupId>com.sun.mail</groupId> + <artifactId>jakarta.mail</artifactId> </dependency> <!-- Unit test --> diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java index 37af62d89d21a1bc3e4afd3b72c640bbe609dd93..2a37194a4a64a9faf5066d73616ed5904f96eb85 100644 --- a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java @@ -85,9 +85,15 @@ public class TestFixtures { * Get a public key of another user, encode in base 58. * @return */ - public String getOtherUserPublicKey() { - // = kimamila - return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of"; + public String getOtherUserPublicKey(int index) { + switch (index) { + case 0: + // = kimamila + return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of"; + default: + // TODO + return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of"; + } } } diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java index 184eb8d52f0e00702dcd401ebfdcd13065c64027..1a31e0cc75fd1c76d3ddd57338e59b64da384d48 100644 --- a/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java +++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java @@ -29,19 +29,11 @@ import java.util.regex.Pattern; */ public class InetAddressUtils { - public static final Pattern LOCAL_IP_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]"); + public static final Pattern LOCAL_IP_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0."); - private InetAddressUtils() { - } - - public static boolean isNotLocalIPv4Address(String input) { - return org.apache.http.conn.util.InetAddressUtils.isIPv4Address(input) && - !LOCAL_IP_ADDRESS_PATTERN.matcher(input).find(); - } + public static final Pattern INTRANET_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]"); - public static boolean isLocalIPv4Address(String input) { - return org.apache.http.conn.util.InetAddressUtils.isIPv4Address(input) && - LOCAL_IP_ADDRESS_PATTERN.matcher(input).find(); + private InetAddressUtils() { } public static boolean isIPv4Address(String input) { @@ -52,11 +44,29 @@ public class InetAddressUtils { return org.apache.http.conn.util.InetAddressUtils.isIPv6Address(input); } + public static boolean isInternetIPv4Address(String input) { + return isIPv4Address(input) && + !INTRANET_ADDRESS_PATTERN.matcher(input).find(); + } + + public static boolean isIntranetIPv4Address(String input) { + return isIPv4Address(input) && INTRANET_ADDRESS_PATTERN.matcher(input).find(); + } + + + public static boolean isIntranetAddress(String input) { + return isIntranetIPv4Address(input) || "localhost".equalsIgnoreCase(input); + } + + public static boolean isInternetAddress(String input) { + return isIPv6Address(input) || isInternetIPv4Address(input); + } + public static boolean isLocalAddress(String input) { - return isLocalIPv4Address(input) || "localhost".equalsIgnoreCase(input); + return (isIPv4Address(input) && LOCAL_IP_ADDRESS_PATTERN.matcher(input).find()) || "localhost".equalsIgnoreCase(input); } public static boolean isNotLocalAddress(String input) { - return !isLocalAddress(input); + return isIPv6Address(input) || (isIPv4Address(input) && !LOCAL_IP_ADDRESS_PATTERN.matcher(input).find()); } } diff --git a/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java b/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java index 4453e9917ece32de735bb8a99189987d9e6a5253..0ede067e330aaffea70a5f2212ba1223e5b2cc71 100644 --- a/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java +++ b/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java @@ -30,29 +30,80 @@ import org.junit.Test; */ public class InetAddressUtilsTest { + @Test + public void isIPv4Address() { + + boolean check = InetAddressUtils.isIPv4Address("192.168.0.254"); + Assert.assertTrue(check); + } + @Test public void isNotLocalIPv4Address() { - Assert.assertFalse(InetAddressUtils.isNotLocalIPv4Address("192.168.1.11")); - Assert.assertFalse(InetAddressUtils.isNotLocalIPv4Address("abc")); + Assert.assertFalse(InetAddressUtils.isInternetIPv4Address("192.168.1.11")); + Assert.assertFalse(InetAddressUtils.isInternetIPv4Address("abc")); - Assert.assertTrue(InetAddressUtils.isNotLocalIPv4Address("82.239.120.237")); + Assert.assertTrue(InetAddressUtils.isInternetIPv4Address("82.239.120.237")); } @Test public void isLocalIPv4Address() { - boolean check = InetAddressUtils.isLocalIPv4Address("192.168.1.11"); + boolean check = InetAddressUtils.isIntranetIPv4Address("192.168.1.11"); Assert.assertTrue(check); - check = InetAddressUtils.isLocalIPv4Address("127.0.0.1"); + check = InetAddressUtils.isIntranetIPv4Address("127.0.0.1"); Assert.assertTrue(check); } @Test public void isLocalAddress() { - boolean check = InetAddressUtils.isLocalAddress("localhost"); - Assert.assertTrue(check); + boolean checkTrue = InetAddressUtils.isLocalAddress("127.0.0.1"); + Assert.assertTrue(checkTrue); + + checkTrue = InetAddressUtils.isLocalAddress("localhost"); + Assert.assertTrue(checkTrue); + + boolean checkFalse = InetAddressUtils.isLocalAddress("192.168.0.254"); + Assert.assertFalse(checkFalse); + + checkFalse = InetAddressUtils.isLocalAddress("10.0.0.1"); + Assert.assertFalse(checkFalse); + } + + @Test + public void isIntranetAddress() { + + boolean checkTrue = InetAddressUtils.isIntranetAddress("127.0.0.1"); + Assert.assertTrue(checkTrue); + + checkTrue = InetAddressUtils.isIntranetAddress("10.0.0.1"); + Assert.assertTrue(checkTrue); + + checkTrue = InetAddressUtils.isIntranetAddress("localhost"); + Assert.assertTrue(checkTrue); + + checkTrue = InetAddressUtils.isIntranetAddress("192.168.0.254"); + Assert.assertTrue(checkTrue); + } + + @Test + public void isInternetAddress() { + + boolean checkTrue = InetAddressUtils.isInternetAddress("88.168.0.254"); + Assert.assertTrue(checkTrue); + + boolean checkFalse = InetAddressUtils.isInternetAddress("127.0.0.1"); + Assert.assertFalse(checkFalse); + + checkFalse = InetAddressUtils.isInternetAddress("10.0.0.1"); + Assert.assertFalse(checkFalse); + + checkFalse = InetAddressUtils.isInternetAddress("localhost"); + Assert.assertFalse(checkFalse); + + checkFalse = InetAddressUtils.isInternetAddress("192.168.0.254"); + Assert.assertFalse(checkFalse); } } diff --git a/pom.xml b/pom.xml index c56c69f287084f773e38a649a1cb7e2f86365697..15ca46d9830c0cca2af89252563c70e0134e34e6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>org.duniter</groupId> <artifactId>duniter4j</artifactId> - <version>1.4.1-SNAPSHOT</version> + <version>1.5.7-SNAPSHOT</version> <packaging>pom</packaging> <name>Duniter4j</name> <description>a Duniter Java Client API</description> @@ -24,7 +24,7 @@ <slf4j.version>1.7.30</slf4j.version> <guava.version>23.0</guava.version> <xml-apis.version>2.0.2</xml-apis.version> - <kalium.version>0.8.1-SNAPSHOT</kalium.version> + <kalium.version>0.8.2</kalium.version> <jna.version>5.8.0</jna.version> <jnr-ffi.version>2.2.2</jnr-ffi.version> <jnr-jffi.version>1.3.2</jnr-jffi.version> @@ -34,7 +34,7 @@ <stringtemplate.version>4.1</stringtemplate.version> <jTextUtilsVersion>0.3.3</jTextUtilsVersion> <lombok.version>1.18.20</lombok.version> - <httpclient.version>4.5.10</httpclient.version> + <httpclient.version>4.5.13</httpclient.version> <nuitonConfigVersion>3.4</nuitonConfigVersion> <nuitonVersionVersion>1.0-rc-2</nuitonVersionVersion> @@ -43,6 +43,7 @@ <!-- UI versions --> <spring.version>5.3.5</spring.version> <aspectj.version>1.8.7</aspectj.version> + <javaMail.version>1.6.7</javaMail.version> <!-- Unit test --> <junit.version>4.12</junit.version> @@ -194,7 +195,7 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> - <version>3.4</version> + <version>3.12.0</version> </dependency> <dependency> <groupId>org.antlr</groupId> @@ -215,27 +216,28 @@ <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> - <version>1.1.1</version> + <version>1.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> - <version>2.6</version> + <version>2.11.0</version> </dependency> <dependency> - <groupId>javax.mail</groupId> - <artifactId>mail</artifactId> - <version>1.4.7</version> + <groupId>com.sun.mail</groupId> + <artifactId>jakarta.mail</artifactId> + <version>${javaMail.version}</version> + <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> - <version>4.0</version> + <version>4.4</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> - <version>1.8.3</version> + <version>1.9.4</version> </dependency> <dependency> <groupId>org.nuiton</groupId>