From 04bdd1d308e69c87d5cd81539324efd74ae5b0c6 Mon Sep 17 00:00:00 2001 From: Stefan Obermeier Date: Sat, 4 Apr 2020 01:27:52 +0200 Subject: [PATCH] Update chaincode to be compatible with doc. E.g. Return key of the queried record Signed-off-by: Stefan Obermeier --- .../fabric/samples/fabcar/CarQueryResult.java | 68 +++++++++++++++++++ .../fabric/samples/fabcar/FabCar.java | 14 ++-- .../fabric/samples/fabcar/FabCarTest.java | 16 ++--- 3 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/CarQueryResult.java diff --git a/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/CarQueryResult.java b/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/CarQueryResult.java new file mode 100644 index 00000000..60b792cb --- /dev/null +++ b/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/CarQueryResult.java @@ -0,0 +1,68 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.hyperledger.fabric.samples.fabcar; + +import java.util.Objects; + +import org.hyperledger.fabric.contract.annotation.DataType; +import org.hyperledger.fabric.contract.annotation.Property; + +import com.owlike.genson.annotation.JsonProperty; + +/** + * CarQueryResult structure used for handling result of query + * + */ +@DataType() +public final class CarQueryResult { + @Property() + private final String key; + + @Property() + private final Car record; + + public CarQueryResult(@JsonProperty("Key") final String key, @JsonProperty("Record") final Car record) { + this.key = key; + this.record = record; + } + + public String getKey() { + return key; + } + + public Car getRecord() { + return record; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + + if ((obj == null) || (getClass() != obj.getClass())) { + return false; + } + + CarQueryResult other = (CarQueryResult) obj; + + Boolean recordsAreEquals = this.getRecord().equals(other.getRecord()); + Boolean keysAreEquals = this.getKey().equals(other.getKey()); + + return recordsAreEquals && keysAreEquals; + } + + @Override + public int hashCode() { + return Objects.hash(this.getKey(), this.getRecord()); + } + + @Override + public String toString() { + return "{\"Key\":\"" + key + "\"" + "\"Record\":{\"" + record + "}\"}"; + } + +} + diff --git a/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java b/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java index 8e8f1535..3fe6a2ab 100644 --- a/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java +++ b/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java @@ -140,21 +140,21 @@ public final class FabCar implements ContractInterface { * @return array of Cars found on the ledger */ @Transaction() - public Car[] queryAllCars(final Context ctx) { + public CarQueryResult[] queryAllCars(final Context ctx) { ChaincodeStub stub = ctx.getStub(); final String startKey = "CAR0"; final String endKey = "CAR999"; - List cars = new ArrayList(); - + List queryResults = new ArrayList(); + QueryResultsIterator results = stub.getStateByRange(startKey, endKey); - + for (KeyValue result: results) { + Car car = genson.deserialize(result.getStringValue(), Car.class); - cars.add(car); + queryResults.add(new CarQueryResult(result.getKey(), car)); } - - Car[] response = cars.toArray(new Car[cars.size()]); + CarQueryResult[] response = queryResults.toArray(new CarQueryResult[queryResults.size()]); return response; } diff --git a/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java b/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java index cd5f79bb..b52465e7 100644 --- a/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java +++ b/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java @@ -213,14 +213,14 @@ public final class FabCarTest { when(ctx.getStub()).thenReturn(stub); when(stub.getStateByRange("CAR0", "CAR999")).thenReturn(new MockCarResultsIterator()); - Car[] cars = contract.queryAllCars(ctx); + CarQueryResult[] cars = contract.queryAllCars(ctx); - final List expectedCars = new ArrayList(); - expectedCars.add(new Car("Toyota", "Prius", "blue", "Tomoko")); - expectedCars.add(new Car("Ford", "Mustang", "red", "Brad")); - expectedCars.add(new Car("Hyundai", "Tucson", "green", "Jin Soo")); - expectedCars.add(new Car("Fiat", "Punto", "violet", "Pari")); - expectedCars.add(new Car("Holden", "Barina", "brown", "Shotaro")); + final List expectedCars = new ArrayList(); + expectedCars.add(new CarQueryResult("CAR0", new Car("Toyota", "Prius", "blue", "Tomoko"))); + expectedCars.add(new CarQueryResult("CAR1", new Car("Ford", "Mustang", "red", "Brad"))); + expectedCars.add(new CarQueryResult("CAR2", new Car("Hyundai", "Tucson", "green", "Jin Soo"))); + expectedCars.add(new CarQueryResult("CAR7", new Car("Fiat", "Punto", "violet", "Pari"))); + expectedCars.add(new CarQueryResult("CAR9", new Car("Holden", "Barina", "brown", "Shotaro"))); assertThat(cars).containsExactlyElementsOf(expectedCars); } @@ -239,7 +239,7 @@ public final class FabCarTest { Car car = contract.changeCarOwner(ctx, "CAR0", "Dr Evil"); - assertThat(car).isEqualTo(new Car("Toyota", "Prius", "blue", "Dr Evil")); + assertThat(car).isEqualTo(new CarQueryResult("CAR0", new Car("Toyota", "Prius", "blue", "Dr Evil"))); } @Test