Skip to content

Commit 663c079

Browse files
Add Controllers
- Add Json RPC methods - Add REST endpoint
1 parent 7535b03 commit 663c079

File tree

4 files changed

+134
-4
lines changed

4 files changed

+134
-4
lines changed

src/main/java/blockchains/iaas/uni/stuttgart/de/jsonrpc/BalService.java

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2019 Institute for the Architecture of Application System - University of Stuttgart
2+
* Copyright (c) 2019-2023 Institute for the Architecture of Application System - University of Stuttgart
33
* Author: Ghareeb Falazi
44
*
55
* This program and the accompanying materials are made available under the
@@ -12,12 +12,15 @@
1212
package blockchains.iaas.uni.stuttgart.de.jsonrpc;
1313

1414
import java.util.List;
15+
import java.util.UUID;
1516

1617
import blockchains.iaas.uni.stuttgart.de.api.exceptions.InvalidScipParameterException;
1718
import blockchains.iaas.uni.stuttgart.de.management.BlockchainManager;
1819
import blockchains.iaas.uni.stuttgart.de.api.model.Parameter;
1920
import blockchains.iaas.uni.stuttgart.de.api.model.QueryResult;
2021
import blockchains.iaas.uni.stuttgart.de.api.model.TimeFrame;
22+
import blockchains.iaas.uni.stuttgart.de.management.tccsci.DistributedTransactionManager;
23+
import blockchains.iaas.uni.stuttgart.de.management.tccsci.DistributedTransactionRepository;
2124
import com.github.arteam.simplejsonrpc.core.annotation.JsonRpcMethod;
2225
import com.github.arteam.simplejsonrpc.core.annotation.JsonRpcOptional;
2326
import com.github.arteam.simplejsonrpc.core.annotation.JsonRpcParam;
@@ -34,6 +37,7 @@ public class BalService {
3437
private final String blockchainType;
3538
private final String blockchainId;
3639
private final String smartContractPath;
40+
private static final String DTX_ID_FIELD_NAME = "dtx_id";
3741

3842
@JsonRpcMethod
3943
public String Invoke(
@@ -47,9 +51,15 @@ public String Invoke(
4751
@JsonRpcParam("signature") String signature
4852
) {
4953
log.info("Invoke method is executed!");
50-
BlockchainManager manager = new BlockchainManager();
51-
manager.invokeSmartContractFunction(blockchainId, smartContractPath, functionIdentifier, inputs, outputs,
52-
requiredConfidence, callbackUrl, timeoutMillis, correlationId, signature);
54+
if (inputs.stream().anyMatch(p -> p.getName().equals(DTX_ID_FIELD_NAME))) {
55+
DistributedTransactionManager distributedTransactionManager = new DistributedTransactionManager();
56+
distributedTransactionManager.invokeSc(blockchainId, smartContractPath, functionIdentifier, inputs, outputs,
57+
requiredConfidence, callbackUrl, timeoutMillis, correlationId, signature);
58+
} else {
59+
BlockchainManager manager = new BlockchainManager();
60+
manager.invokeSmartContractFunction(blockchainId, smartContractPath, functionIdentifier, inputs, outputs,
61+
requiredConfidence, callbackUrl, timeoutMillis, correlationId, signature);
62+
}
5363

5464
return "OK";
5565
}
@@ -122,4 +132,32 @@ public QueryResult Query(
122132

123133
throw new InvalidScipParameterException();
124134
}
135+
136+
@JsonRpcMethod
137+
public String Start_Dtx() {
138+
log.info("Start_Dtx method is executed!");
139+
DistributedTransactionManager manager = new DistributedTransactionManager();
140+
141+
return manager.startDtx().toString();
142+
}
143+
144+
@JsonRpcMethod
145+
public String Commit_Dtx(@JsonRpcParam(DTX_ID_FIELD_NAME) String dtxId) {
146+
log.info("Commit_Dtx method is executed!");
147+
UUID uuid = UUID.fromString(dtxId);
148+
DistributedTransactionManager manager = new DistributedTransactionManager();
149+
manager.commitDtx(uuid);
150+
151+
return "OK";
152+
}
153+
154+
@JsonRpcMethod
155+
public String Abort_Dtx(@JsonRpcParam(DTX_ID_FIELD_NAME) String dtxId) {
156+
log.info("Abort_Dtx method is executed!");
157+
UUID uuid = UUID.fromString(dtxId);
158+
DistributedTransactionManager manager = new DistributedTransactionManager();
159+
manager.abortDtx(uuid);
160+
161+
return "OK";
162+
}
125163
}

src/main/java/blockchains/iaas/uni/stuttgart/de/management/tccsci/DistributedTransactionManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
/********************************************************************************
2+
* Copyright (c) 2023 Institute for the Architecture of Application System -
3+
* University of Stuttgart
4+
* Author: Ghareeb Falazi
5+
*
6+
* This program and the accompanying materials are made available under the
7+
* terms the Apache Software License 2.0
8+
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
9+
*
10+
* SPDX-License-Identifier: Apache-2.0
11+
********************************************************************************/
12+
113
package blockchains.iaas.uni.stuttgart.de.management.tccsci;
214

315
import blockchains.iaas.uni.stuttgart.de.adaptation.AdapterManager;

src/main/java/blockchains/iaas/uni/stuttgart/de/management/tccsci/DistributedTransactionRepository.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
/********************************************************************************
2+
* Copyright (c) 2023 Institute for the Architecture of Application System -
3+
* University of Stuttgart
4+
* Author: Ghareeb Falazi
5+
*
6+
* This program and the accompanying materials are made available under the
7+
* terms the Apache Software License 2.0
8+
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
9+
*
10+
* SPDX-License-Identifier: Apache-2.0
11+
********************************************************************************/
12+
113
package blockchains.iaas.uni.stuttgart.de.management.tccsci;
214

315
import blockchains.iaas.uni.stuttgart.de.management.model.DistributedTransaction;
@@ -38,6 +50,10 @@ public DistributedTransaction getById(UUID txId) {
3850
return distributedTransactions.stream().filter(tx->tx.getId().equals(txId)).findFirst().orElse(null);
3951
}
4052

53+
public List<DistributedTransaction> getAll() {
54+
return this.distributedTransactions;
55+
}
56+
4157
public Collection<DistributedTransaction> getByState(DistributedTransactionState state) {
4258
return distributedTransactions.stream().filter(tx->tx.getState().equals(state)).collect(Collectors.toList());
4359
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/********************************************************************************
2+
* Copyright (c) 2023 Institute for the Architecture of Application System -
3+
* University of Stuttgart
4+
*
5+
* Author: Ghareeb Falazi
6+
*
7+
* This program and the accompanying materials are made available under the
8+
* terms the Apache Software License 2.0
9+
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
10+
*
11+
* SPDX-License-Identifier: Apache-2.0
12+
********************************************************************************/
13+
14+
package blockchains.iaas.uni.stuttgart.de.restapi.Controllers;
15+
16+
import blockchains.iaas.uni.stuttgart.de.management.model.DistributedTransaction;
17+
import blockchains.iaas.uni.stuttgart.de.management.tccsci.DistributedTransactionRepository;
18+
import blockchains.iaas.uni.stuttgart.de.restapi.model.response.LinkCollectionResponse;
19+
import blockchains.iaas.uni.stuttgart.de.restapi.util.UriUtil;
20+
21+
import javax.ws.rs.GET;
22+
import javax.ws.rs.Path;
23+
import javax.ws.rs.PathParam;
24+
import javax.ws.rs.core.Context;
25+
import javax.ws.rs.core.MediaType;
26+
import javax.ws.rs.core.Response;
27+
import javax.ws.rs.core.UriInfo;
28+
import java.util.List;
29+
import java.util.UUID;
30+
31+
@Path("distributed-transactions")
32+
public class DistributedTransactionsController {
33+
34+
@Context
35+
protected UriInfo uriInfo;
36+
@GET
37+
public Response get() {
38+
List<DistributedTransaction> all = DistributedTransactionRepository.getInstance().getAll();
39+
final LinkCollectionResponse response = new LinkCollectionResponse();
40+
41+
for (final DistributedTransaction dtx : all) {
42+
response.add(UriUtil.generateSubResourceLink(uriInfo, dtx.getId().toString(), false, "self"));
43+
}
44+
45+
return Response.ok(response).build();
46+
}
47+
48+
@GET
49+
@Path("/{dtxId}")
50+
public Response getSubscriptionDetails(@PathParam("dtxId") final String dtxId) {
51+
UUID uuid = UUID.fromString(dtxId);
52+
DistributedTransaction dtx = DistributedTransactionRepository.getInstance().getById(uuid);
53+
if (dtx != null) {
54+
return Response
55+
.status(Response.Status.OK)
56+
.entity(dtx)
57+
.type(MediaType.APPLICATION_JSON)
58+
.build();
59+
} else {
60+
return Response.status(Response.Status.NOT_FOUND).build();
61+
}
62+
}
63+
64+
}

0 commit comments

Comments
 (0)