All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.nem.symbol.sdk.infrastructure.vertx.mappers.GeneralTransactionMapper Maven / Gradle / Ivy

/*
 * Copyright 2020 NEM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.nem.symbol.sdk.infrastructure.vertx.mappers;

import io.nem.symbol.sdk.infrastructure.TransactionMapper;
import io.nem.symbol.sdk.model.transaction.JsonHelper;
import io.nem.symbol.sdk.model.transaction.Transaction;
import io.nem.symbol.sdk.model.transaction.TransactionFactory;
import io.nem.symbol.sdk.model.transaction.TransactionType;
import java.util.EnumMap;
import java.util.Map;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.exception.ExceptionUtils;

/**
 * Entry point for the transaction mapping. This mapper should support all the known transactions.
 *
 * 

It's basically a delegator to the specific {@link TransactionMapper} registered in this * object. */ public class GeneralTransactionMapper implements TransactionMapper { private final JsonHelper jsonHelper; private final Map transactionMappers = new EnumMap<>(TransactionType.class); public GeneralTransactionMapper(JsonHelper jsonHelper) { this.jsonHelper = jsonHelper; Validate.notNull(jsonHelper, "jsonHelper must not be null"); register(new AddressAliasTransactionMapper(jsonHelper)); register(new HashLockTransactionMapper(jsonHelper)); register(new MosaicAddressRestrictionTransactionMapper(jsonHelper)); register(new MosaicAliasTransactionMapper(jsonHelper)); register(new MosaicDefinitionTransactionMapper(jsonHelper)); register(new MosaicGlobalRestrictionTransactionMapper(jsonHelper)); register(new MosaicSupplyChangeTransactionMapper(jsonHelper)); register(new MultisigAccountModificationTransactionMapper(jsonHelper)); register(new NamespaceRegistrationTransactionMapper(jsonHelper)); register(new SecretLockTransactionMapper(jsonHelper)); register(new SecretProofTransactionMapper(jsonHelper)); register(new TransferTransactionMapper(jsonHelper)); register(new AccountMetadataTransactionMapper(jsonHelper)); register(new MosaicMetadataTransactionMapper(jsonHelper)); register(new NamespaceMetadataTransactionMapper(jsonHelper)); register(new AccountAddressRestrictionTransactionMapper(jsonHelper)); register(new AccountMosaicRestrictionTransactionMapper(jsonHelper)); register(new AccountOperationRestrictionTransactionMapper(jsonHelper)); register(new NodeKeyLinkTransactionMapper(jsonHelper)); register(new VotingKeyLinkTransactionMapper(jsonHelper)); register(new VrfKeyLinkTransactionMapper(jsonHelper)); register(new AccountKeyLinkTransactionMapper(jsonHelper)); register(new AggregateTransactionMapper(jsonHelper, TransactionType.AGGREGATE_BONDED, this)); register(new AggregateTransactionMapper(jsonHelper, TransactionType.AGGREGATE_COMPLETE, this)); } private void register(TransactionMapper mapper) { if (transactionMappers.put(mapper.getTransactionType(), mapper) != null) { throw new IllegalArgumentException( "TransactionMapper for type " + mapper.getTransactionType() + " was already registered!"); } } @Override public TransactionFactory mapToFactoryFromDto(Object transactionInfoDTO) { try { Validate.notNull(transactionInfoDTO, "transactionInfoDTO must not be null"); return resolveMapper(transactionInfoDTO).mapToFactoryFromDto(transactionInfoDTO); } catch (Exception e) { throw new IllegalArgumentException( "Unknown error mapping transaction: " + ExceptionUtils.getMessage(e) + "\n" + jsonHelper.prettyPrint(transactionInfoDTO), e); } } @Override public Transaction mapFromDto(Object transactionInfoDTO) { return this.mapToFactoryFromDto(transactionInfoDTO).build(); } @Override public Object mapToDto(Transaction transaction, Boolean embedded) { Validate.notNull(transaction, "transaction must not be null"); return resolveMapper(transaction.getType()).mapToDto(transaction, embedded); } @Override public TransactionType getTransactionType() { // All transaction types supported. return null; } private TransactionMapper resolveMapper(Object transactionInfoJson) { Integer type = getJsonHelper().getInteger(transactionInfoJson, "transaction", "type"); if (type == null) { throw new IllegalArgumentException( "Transaction cannot be mapped, object does not not have transaction type."); } TransactionType transactionType = TransactionType.rawValueOf(type); return resolveMapper(transactionType); } private TransactionMapper resolveMapper(TransactionType transactionType) { TransactionMapper mapper = transactionMappers.get(transactionType); if (mapper == null) { throw new UnsupportedOperationException("Unimplemented Transaction type " + transactionType); } return mapper; } public JsonHelper getJsonHelper() { return jsonHelper; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy