diff --git a/pom.xml b/pom.xml index 37be673..cf4c78f 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,12 @@ OF THE POSSIBILITY OF SUCH DAMAGE. + + javax.validation + validation-api + 2.0.1.Final + provided + org.projectlombok lombok @@ -227,6 +233,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE. findbugs:.* + duplicatefinder:.* diff --git a/src/main/java/com/jcabi/dynamo/AttributeUpdates.java b/src/main/java/com/jcabi/dynamo/AttributeUpdates.java index 8b07d47..e564446 100644 --- a/src/main/java/com/jcabi/dynamo/AttributeUpdates.java +++ b/src/main/java/com/jcabi/dynamo/AttributeUpdates.java @@ -38,11 +38,9 @@ import com.jcabi.immutable.ArrayMap; import java.util.ArrayList; import java.util.Collection; -import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import lombok.EqualsAndHashCode; /** diff --git a/src/main/java/com/jcabi/dynamo/AwsItem.java b/src/main/java/com/jcabi/dynamo/AwsItem.java index 2c3a3e1..05e676c 100644 --- a/src/main/java/com/jcabi/dynamo/AwsItem.java +++ b/src/main/java/com/jcabi/dynamo/AwsItem.java @@ -45,7 +45,6 @@ import com.jcabi.log.Logger; import java.io.IOException; import java.util.Collections; -import java.util.Locale; import java.util.Map; import java.util.NoSuchElementException; import lombok.EqualsAndHashCode; @@ -60,6 +59,7 @@ @Loggable(Loggable.DEBUG) @ToString @EqualsAndHashCode(of = { "credentials", "frm", "name", "attributes" }) +@SuppressWarnings("PMD.GuardLogStatement") final class AwsItem implements Item { /** diff --git a/src/main/java/com/jcabi/dynamo/AwsIterator.java b/src/main/java/com/jcabi/dynamo/AwsIterator.java index a1915e1..635c6e2 100644 --- a/src/main/java/com/jcabi/dynamo/AwsIterator.java +++ b/src/main/java/com/jcabi/dynamo/AwsIterator.java @@ -64,6 +64,7 @@ ( of = { "credentials", "conditions", "frame", "name", "keys", "valve" } ) +@SuppressWarnings("PMD.GuardLogStatement") final class AwsIterator implements Iterator { /** @@ -220,6 +221,8 @@ public void remove() { /** * Dosage with fixed list of items. + * + * @since 0.1 */ @Immutable private static final class Fixed implements Dosage { @@ -227,10 +230,12 @@ private static final class Fixed implements Dosage { * List of items. */ private final transient Array> list; + /** * Previous dosage. */ private final transient Dosage prev; + /** * Ctor. * @param dsg Dosage @@ -240,14 +245,17 @@ private static final class Fixed implements Dosage { this.prev = dsg; this.list = new Array<>(items); } + @Override public List> items() { return Collections.unmodifiableList(this.list); } + @Override public Dosage next() { return this.prev.next(); } + @Override public boolean hasNext() { return this.prev.hasNext(); diff --git a/src/main/java/com/jcabi/dynamo/AwsTable.java b/src/main/java/com/jcabi/dynamo/AwsTable.java index 5a206a4..d79b393 100644 --- a/src/main/java/com/jcabi/dynamo/AwsTable.java +++ b/src/main/java/com/jcabi/dynamo/AwsTable.java @@ -63,6 +63,7 @@ @Loggable(Loggable.DEBUG) @ToString @EqualsAndHashCode(of = { "credentials", "reg", "self" }) +@SuppressWarnings("PMD.GuardLogStatement") final class AwsTable implements Table { /** diff --git a/src/main/java/com/jcabi/dynamo/Conditions.java b/src/main/java/com/jcabi/dynamo/Conditions.java index e6a49fd..65c862a 100644 --- a/src/main/java/com/jcabi/dynamo/Conditions.java +++ b/src/main/java/com/jcabi/dynamo/Conditions.java @@ -64,6 +64,7 @@ ( { "PMD.TooManyMethods", + "PMD.ProhibitPublicStaticMethods", "PMD.AvoidInstantiatingObjectsInLoops" } ) diff --git a/src/main/java/com/jcabi/dynamo/Credentials.java b/src/main/java/com/jcabi/dynamo/Credentials.java index 3829c85..5249133 100644 --- a/src/main/java/com/jcabi/dynamo/Credentials.java +++ b/src/main/java/com/jcabi/dynamo/Credentials.java @@ -29,7 +29,6 @@ */ package com.jcabi.dynamo; -import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; @@ -82,14 +81,17 @@ final class Simple implements Credentials { * AWS key. */ private final transient String key; + /** * AWS secret. */ private final transient String secret; + /** * Region name. */ private final transient String region; + /** * Public ctor, with "us-east-1" region. * @param akey AWS key @@ -98,6 +100,7 @@ final class Simple implements Credentials { public Simple(final String akey, final String scrt) { this(akey, scrt, Regions.US_EAST_1.getName()); } + /** * Public ctor. * @param akey AWS key @@ -109,10 +112,12 @@ public Simple(final String akey, final String scrt, final String reg) { this.secret = scrt; this.region = reg; } + @Override public String toString() { return String.format("%s/%s", this.region, this.key); } + @Override public AmazonDynamoDB aws() { final com.amazonaws.regions.Region reg = @@ -147,12 +152,14 @@ final class Assumed implements Credentials { * Region name. */ private final transient String region; + /** * Public ctor. */ public Assumed() { this(Regions.US_EAST_1.getName()); } + /** * Public ctor. * @param reg Region @@ -160,10 +167,12 @@ public Assumed() { public Assumed(final String reg) { this.region = reg; } + @Override public String toString() { return this.region; } + @Override public AmazonDynamoDB aws() { final com.amazonaws.regions.Region reg = @@ -192,10 +201,12 @@ final class Direct implements Credentials { * Original credentials. */ private final transient Credentials.Simple origin; + /** * Endpoint. */ private final transient String endpoint; + /** * Public ctor. * @param creds Original credentials @@ -205,6 +216,7 @@ public Direct(final Credentials.Simple creds, final String pnt) { this.origin = creds; this.endpoint = pnt; } + /** * Public ctor. * @param creds Original credentials @@ -213,10 +225,12 @@ public Direct(final Credentials.Simple creds, final String pnt) { public Direct(final Credentials.Simple creds, final int port) { this(creds, String.format("http://localhost:%d", port)); } + @Override public String toString() { return String.format("%s at %s", this.origin, this.endpoint); } + @Override public AmazonDynamoDB aws() { return AmazonDynamoDBClientBuilder.standard() diff --git a/src/main/java/com/jcabi/dynamo/Dosage.java b/src/main/java/com/jcabi/dynamo/Dosage.java index 853f920..fb39bce 100644 --- a/src/main/java/com/jcabi/dynamo/Dosage.java +++ b/src/main/java/com/jcabi/dynamo/Dosage.java @@ -66,6 +66,8 @@ public interface Dosage { /** * Always empty. + * + * @since 0.1 */ @Immutable @Loggable(Loggable.DEBUG) @@ -76,12 +78,14 @@ final class Empty implements Dosage { public List> items() { return new ArrayList<>(0); } + @Override public Dosage next() { throw new IllegalStateException( "this is nothing left" ); } + @Override public boolean hasNext() { return false; diff --git a/src/main/java/com/jcabi/dynamo/QueryValve.java b/src/main/java/com/jcabi/dynamo/QueryValve.java index 8e34c57..9a25607 100644 --- a/src/main/java/com/jcabi/dynamo/QueryValve.java +++ b/src/main/java/com/jcabi/dynamo/QueryValve.java @@ -62,7 +62,7 @@ @ToString @Loggable(Loggable.DEBUG) @EqualsAndHashCode(of = { "limit", "forward" }) -@SuppressWarnings("PMD.TooManyMethods") +@SuppressWarnings({"PMD.TooManyMethods", "PMD.GuardLogStatement"}) public final class QueryValve implements Valve { /** @@ -339,6 +339,8 @@ public QueryValve withAttributesToGet(final String... names) { /** * Next dosage. + * + * @since 0.1 */ @ToString @Loggable(Loggable.DEBUG) @@ -348,14 +350,17 @@ private final class NextDosage implements Dosage { * AWS client. */ private final transient Credentials credentials; + /** * Query request. */ private final transient QueryRequest request; + /** * Query request. */ private final transient QueryResult result; + /** * Public ctor. * @param creds Credentials @@ -368,14 +373,17 @@ private final class NextDosage implements Dosage { this.request = rqst; this.result = rslt; } + @Override public List> items() { return this.result.getItems(); } + @Override public boolean hasNext() { return this.result.getLastEvaluatedKey() != null; } + @Override public Dosage next() { if (!this.hasNext()) { diff --git a/src/main/java/com/jcabi/dynamo/Region.java b/src/main/java/com/jcabi/dynamo/Region.java index 2d03818..baa8e98 100644 --- a/src/main/java/com/jcabi/dynamo/Region.java +++ b/src/main/java/com/jcabi/dynamo/Region.java @@ -74,6 +74,8 @@ public interface Region { /** * Simple region, basic implementation. + * + * @since 0.1 */ @Immutable @Loggable(Loggable.DEBUG) @@ -84,6 +86,7 @@ final class Simple implements Region { * Credentials. */ private final transient Credentials credentials; + /** * Public ctor. * @param creds Credentials @@ -91,10 +94,12 @@ final class Simple implements Region { public Simple(final Credentials creds) { this.credentials = creds; } + @Override public AmazonDynamoDB aws() { return this.credentials.aws(); } + @Override public Table table(final String name) { return new AwsTable(this.credentials, this, name); @@ -116,6 +121,8 @@ public Table table(final String name) { * instance pointing to the Dynamo DB table named {@code "foo-test"}. Could * be a convenient mechanism when you have many tables for different * projects in the same region. + * + * @since 0.1 */ @Immutable @Loggable(Loggable.DEBUG) @@ -126,10 +133,12 @@ final class Prefixed implements Region { * Original region. */ private final transient Region origin; + /** * Prefix to add. */ private final transient String prefix; + /** * Public ctor. * @param region Original region @@ -139,10 +148,12 @@ public Prefixed(final Region region, final String pfx) { this.origin = region; this.prefix = pfx; } + @Override public AmazonDynamoDB aws() { return this.origin.aws(); } + @Override public Table table(final String name) { return this.origin.table( diff --git a/src/main/java/com/jcabi/dynamo/ScanValve.java b/src/main/java/com/jcabi/dynamo/ScanValve.java index 722354f..8047d83 100644 --- a/src/main/java/com/jcabi/dynamo/ScanValve.java +++ b/src/main/java/com/jcabi/dynamo/ScanValve.java @@ -62,6 +62,7 @@ @ToString @Loggable(Loggable.DEBUG) @EqualsAndHashCode(of = { "limit", "attributes" }) +@SuppressWarnings("PMD.GuardLogStatement") public final class ScanValve implements Valve { /** @@ -208,6 +209,8 @@ public ScanValve withAttributeToGet(final String... names) { /** * Next dosage. + * + * @since 0.1 */ @ToString @Loggable(Loggable.DEBUG) @@ -217,14 +220,17 @@ private final class NextDosage implements Dosage { * AWS client. */ private final transient Credentials credentials; + /** * Query request. */ private final transient ScanRequest request; + /** * Query request. */ private final transient ScanResult result; + /** * Public ctor. * @param creds Credentials @@ -237,14 +243,17 @@ private final class NextDosage implements Dosage { this.request = rqst; this.result = rslt; } + @Override public List> items() { return this.result.getItems(); } + @Override public boolean hasNext() { return this.result.getLastEvaluatedKey() != null; } + @Override public Dosage next() { if (!this.hasNext()) { diff --git a/src/main/java/com/jcabi/dynamo/mock/H2Data.java b/src/main/java/com/jcabi/dynamo/mock/H2Data.java index f40de58..5da0050 100644 --- a/src/main/java/com/jcabi/dynamo/mock/H2Data.java +++ b/src/main/java/com/jcabi/dynamo/mock/H2Data.java @@ -75,28 +75,6 @@ @SuppressWarnings({ "PMD.TooManyMethods", "PMD.ExcessiveImports" }) public final class H2Data implements MkData { - /** - * Create primary key. - */ - private static final Function CREATE_KEY = - key -> String.format("%s VARCHAR PRIMARY KEY", key); - - /** - * Create attr. - */ - private static final Function CREATE_ATTR = - key -> String.format("%s CLOB", key); - - /** - * WHERE clauses are joined with this. - */ - private static final String AND = " AND "; - - /** - * JDBC URL. - */ - private final transient String jdbc; - /** * Fetcher of rows. */ @@ -112,6 +90,7 @@ public Iterable handle(final ResultSet rset, } return items; } + /** * Convert result set to Attributes. * @param rset Result set @@ -172,6 +151,28 @@ private Attributes fetch(final ResultSet rset) throws SQLException { ); }; + /** + * Create primary key. + */ + private static final Function CREATE_KEY = + key -> String.format("%s VARCHAR PRIMARY KEY", key); + + /** + * Create attr. + */ + private static final Function CREATE_ATTR = + key -> String.format("%s CLOB", key); + + /** + * WHERE clauses are joined with this. + */ + private static final String AND = " AND "; + + /** + * JDBC URL. + */ + private final transient String jdbc; + /** * Public ctor. * @throws IOException If fails @@ -349,6 +350,7 @@ public H2Data with(final String table, final String[] keys, } return this; } + /** * Make data source. * @return Data source for JDBC diff --git a/src/main/java/com/jcabi/dynamo/mock/MkTable.java b/src/main/java/com/jcabi/dynamo/mock/MkTable.java index 373f9c1..b9e8c62 100644 --- a/src/main/java/com/jcabi/dynamo/mock/MkTable.java +++ b/src/main/java/com/jcabi/dynamo/mock/MkTable.java @@ -65,8 +65,8 @@ final class MkTable implements Table { /** * Public ctor. - * @param name Name of the table * @param dta Data + * @param name Name of the table */ MkTable(final MkData dta, final String name) { this.data = dta; diff --git a/src/test/java/com/jcabi/dynamo/AwsTableTest.java b/src/test/java/com/jcabi/dynamo/AwsTableTest.java index 74c2d77..0313b51 100644 --- a/src/test/java/com/jcabi/dynamo/AwsTableTest.java +++ b/src/test/java/com/jcabi/dynamo/AwsTableTest.java @@ -56,6 +56,7 @@ public final class AwsTableTest { * Constant for 'tableName' attribute. */ private static final String TABLE_NAME = "tableName"; + /** * Constant for 'key' attribute. */ diff --git a/src/test/java/com/jcabi/dynamo/mock/H2DataTest.java b/src/test/java/com/jcabi/dynamo/mock/H2DataTest.java index c7d3f61..1403103 100644 --- a/src/test/java/com/jcabi/dynamo/mock/H2DataTest.java +++ b/src/test/java/com/jcabi/dynamo/mock/H2DataTest.java @@ -81,6 +81,7 @@ table, new Conditions().with(key, Conditions.equalTo(number)) /** * H2Data can store to a file. + * @param temp Temp dir * @throws Exception If some problem inside * @see * Google Code: DB file extension customizability diff --git a/src/test/java/com/jcabi/dynamo/mock/MkRegionTest.java b/src/test/java/com/jcabi/dynamo/mock/MkRegionTest.java index c2fbaf2..54b37d1 100644 --- a/src/test/java/com/jcabi/dynamo/mock/MkRegionTest.java +++ b/src/test/java/com/jcabi/dynamo/mock/MkRegionTest.java @@ -104,7 +104,7 @@ public void storesAndReadsSingleAttribute() throws Exception { final Table tbl = region.table(table); tbl.put( new Attributes() - .with(key, "32443") + .with(key, "324439") .with(attr, "0") ); final Item item = tbl.frame().iterator().next();