|
12 | 12 | import com.hedera.hashgraph.tck.util.KeyUtils; |
13 | 13 | import com.hedera.hashgraph.tck.util.TransactionBuilders; |
14 | 14 | import java.time.Duration; |
| 15 | +import java.util.Collections; |
| 16 | +import java.util.HashMap; |
15 | 17 | import java.util.Map; |
| 18 | +import java.util.function.Function; |
16 | 19 |
|
17 | 20 | @JSONRPC2Service |
18 | 21 | public class ScheduleService extends AbstractJSONRPC2Service { |
19 | 22 | private static final Duration DEFAULT_GRPC_DEADLINE = Duration.ofSeconds(10L); |
| 23 | + private static final Map<String, Function<Map<String, Object>, Transaction<?>>> SCHEDULED_TRANSACTION_BUILDERS; |
20 | 24 | private final SdkService sdkService; |
21 | 25 |
|
22 | 26 | public ScheduleService(SdkService sdkService) { |
23 | 27 | this.sdkService = sdkService; |
24 | 28 | } |
25 | 29 |
|
| 30 | + static { |
| 31 | + Map<String, Function<Map<String, Object>, Transaction<?>>> builders = new HashMap<>(); |
| 32 | + builders.put("transferCrypto", TransactionBuilders.TransferBuilder::buildTransfer); |
| 33 | + builders.put("submitMessage", TransactionBuilders.TopicBuilder::buildSubmitMessage); |
| 34 | + builders.put("burnToken", TransactionBuilders.TokenBuilder::buildBurn); |
| 35 | + builders.put("mintToken", TransactionBuilders.TokenBuilder::buildMint); |
| 36 | + builders.put("approveAllowance", TransactionBuilders.AccountBuilder::buildApproveAllowance); |
| 37 | + builders.put("createAccount", TransactionBuilders.AccountBuilder::buildCreate); |
| 38 | + builders.put("createToken", TransactionBuilders.TokenBuilder::buildCreate); |
| 39 | + builders.put("createTopic", TransactionBuilders.TopicBuilder::buildCreate); |
| 40 | + builders.put("createFile", TransactionBuilders.FileBuilder::buildCreate); |
| 41 | + builders.put("updateAccount", TransactionBuilders.AccountBuilder::buildUpdate); |
| 42 | + builders.put("updateToken", TransactionBuilders.TokenBuilder::buildUpdate); |
| 43 | + builders.put("updateTopic", TransactionBuilders.TopicBuilder::buildUpdate); |
| 44 | + builders.put("updateFile", TransactionBuilders.FileBuilder::buildUpdate); |
| 45 | + builders.put("deleteAccount", TransactionBuilders.AccountBuilder::buildDelete); |
| 46 | + builders.put("deleteToken", TransactionBuilders.TokenBuilder::buildDelete); |
| 47 | + builders.put("deleteTopic", TransactionBuilders.TopicBuilder::buildDelete); |
| 48 | + builders.put("deleteFile", TransactionBuilders.FileBuilder::buildDelete); |
| 49 | + builders.put("associateToken", TransactionBuilders.TokenBuilder::buildAssociate); |
| 50 | + builders.put("dissociateToken", TransactionBuilders.TokenBuilder::buildDissociate); |
| 51 | + builders.put("freezeToken", TransactionBuilders.TokenBuilder::buildFreeze); |
| 52 | + builders.put("unfreezeToken", TransactionBuilders.TokenBuilder::buildUnfreeze); |
| 53 | + builders.put("grantKyc", TransactionBuilders.TokenBuilder::buildGrantKyc); |
| 54 | + builders.put("revokeKyc", TransactionBuilders.TokenBuilder::buildRevokeKyc); |
| 55 | + builders.put("pauseToken", TransactionBuilders.TokenBuilder::buildPause); |
| 56 | + builders.put("unpauseToken", TransactionBuilders.TokenBuilder::buildUnpause); |
| 57 | + builders.put("wipeToken", TransactionBuilders.TokenBuilder::buildWipe); |
| 58 | + builders.put("updateTokenFeeSchedule", TransactionBuilders.TokenBuilder::buildUpdateFeeSchedule); |
| 59 | + builders.put("airdropToken", TransactionBuilders.TokenBuilder::buildAirdrop); |
| 60 | + builders.put("cancelAirdrop", TransactionBuilders.TokenBuilder::buildCancelAirdrop); |
| 61 | + builders.put("claimToken", TransactionBuilders.TokenBuilder::buildClaimAirdrop); |
| 62 | + builders.put("deleteAllowance", TransactionBuilders.AccountBuilder::buildDeleteAllowance); |
| 63 | + builders.put("appendFile", TransactionBuilders.FileBuilder::buildAppend); |
| 64 | + SCHEDULED_TRANSACTION_BUILDERS = Collections.unmodifiableMap(builders); |
| 65 | + } |
| 66 | + |
26 | 67 | @JSONRPC2Method("createSchedule") |
27 | 68 | public ScheduleResponse createSchedule(final ScheduleCreateParams params) throws Exception { |
28 | 69 | ScheduleCreateTransaction transaction = new ScheduleCreateTransaction().setGrpcDeadline(DEFAULT_GRPC_DEADLINE); |
29 | 70 | Client client = sdkService.getClient(params.getSessionId()); |
30 | 71 |
|
31 | 72 | params.getScheduledTransaction().ifPresent(scheduledTx -> { |
32 | 73 | try { |
33 | | - Transaction<?> tx = buildScheduledTransaction(scheduledTx); |
| 74 | + Transaction<?> tx = buildScheduledTransaction(scheduledTx, params.getSessionId()); |
34 | 75 | transaction.setScheduledTransaction(tx); |
35 | 76 | } catch (Exception e) { |
36 | 77 | throw new IllegalArgumentException("Failed to build scheduled transaction", e); |
@@ -137,44 +178,16 @@ public ScheduleResponse deleteSchedule(final ScheduleDeleteParams params) throws |
137 | 178 | /** |
138 | 179 | * Builds a scheduled transaction from method name and parameters |
139 | 180 | */ |
140 | | - private Transaction<?> buildScheduledTransaction(ScheduleCreateParams.ScheduledTransaction scheduledTx) { |
141 | | - String method = scheduledTx.getMethod(); |
142 | | - Map<String, Object> params = scheduledTx.getParams(); |
143 | | - |
144 | | - return switch (method) { |
145 | | - case "transferCrypto" -> TransactionBuilders.TransferBuilder.buildTransfer(params); |
146 | | - case "submitMessage" -> TransactionBuilders.TopicBuilder.buildSubmitMessage(params); |
147 | | - case "burnToken" -> TransactionBuilders.TokenBuilder.buildBurn(params); |
148 | | - case "mintToken" -> TransactionBuilders.TokenBuilder.buildMint(params); |
149 | | - case "approveAllowance" -> TransactionBuilders.AccountBuilder.buildApproveAllowance(params); |
150 | | - case "createAccount" -> TransactionBuilders.AccountBuilder.buildCreate(params); |
151 | | - case "createToken" -> TransactionBuilders.TokenBuilder.buildCreate(params); |
152 | | - case "createTopic" -> TransactionBuilders.TopicBuilder.buildCreate(params); |
153 | | - case "createFile" -> TransactionBuilders.FileBuilder.buildCreate(params); |
154 | | - case "updateAccount" -> TransactionBuilders.AccountBuilder.buildUpdate(params); |
155 | | - case "updateToken" -> TransactionBuilders.TokenBuilder.buildUpdate(params); |
156 | | - case "updateTopic" -> TransactionBuilders.TopicBuilder.buildUpdate(params); |
157 | | - case "updateFile" -> TransactionBuilders.FileBuilder.buildUpdate(params); |
158 | | - case "deleteAccount" -> TransactionBuilders.AccountBuilder.buildDelete(params); |
159 | | - case "deleteToken" -> TransactionBuilders.TokenBuilder.buildDelete(params); |
160 | | - case "deleteTopic" -> TransactionBuilders.TopicBuilder.buildDelete(params); |
161 | | - case "deleteFile" -> TransactionBuilders.FileBuilder.buildDelete(params); |
162 | | - case "associateToken" -> TransactionBuilders.TokenBuilder.buildAssociate(params); |
163 | | - case "dissociateToken" -> TransactionBuilders.TokenBuilder.buildDissociate(params); |
164 | | - case "freezeToken" -> TransactionBuilders.TokenBuilder.buildFreeze(params); |
165 | | - case "unfreezeToken" -> TransactionBuilders.TokenBuilder.buildUnfreeze(params); |
166 | | - case "grantKyc" -> TransactionBuilders.TokenBuilder.buildGrantKyc(params); |
167 | | - case "revokeKyc" -> TransactionBuilders.TokenBuilder.buildRevokeKyc(params); |
168 | | - case "pauseToken" -> TransactionBuilders.TokenBuilder.buildPause(params); |
169 | | - case "unpauseToken" -> TransactionBuilders.TokenBuilder.buildUnpause(params); |
170 | | - case "wipeToken" -> TransactionBuilders.TokenBuilder.buildWipe(params); |
171 | | - case "updateTokenFeeSchedule" -> TransactionBuilders.TokenBuilder.buildUpdateFeeSchedule(params); |
172 | | - case "airdropToken" -> TransactionBuilders.TokenBuilder.buildAirdrop(params); |
173 | | - case "cancelAirdrop" -> TransactionBuilders.TokenBuilder.buildCancelAirdrop(params); |
174 | | - case "claimToken" -> TransactionBuilders.TokenBuilder.buildClaimAirdrop(params); |
175 | | - case "deleteAllowance" -> TransactionBuilders.AccountBuilder.buildDeleteAllowance(params); |
176 | | - case "appendFile" -> TransactionBuilders.FileBuilder.buildAppend(params); |
177 | | - default -> throw new IllegalArgumentException("Unsupported scheduled transaction method: " + method); |
178 | | - }; |
| 181 | + private Transaction<?> buildScheduledTransaction( |
| 182 | + ScheduleCreateParams.ScheduledTransaction scheduledTx, String sessionId) { |
| 183 | + Map<String, Object> params = new HashMap<>(scheduledTx.getParams()); |
| 184 | + params.put("sessionId", sessionId); |
| 185 | + |
| 186 | + Function<Map<String, Object>, Transaction<?>> builder = |
| 187 | + SCHEDULED_TRANSACTION_BUILDERS.get(scheduledTx.getMethod()); |
| 188 | + if (builder == null) { |
| 189 | + throw new IllegalArgumentException("Unsupported scheduled transaction method: " + scheduledTx.getMethod()); |
| 190 | + } |
| 191 | + return builder.apply(params); |
179 | 192 | } |
180 | 193 | } |
0 commit comments