
au.org.consumerdatastandards.client.cli.ReferenceTest Maven / Gradle / Ivy
/*
* Consumer Data Standards
* Sample CLI tool to Demonstrate the Consumer Data Right APIs
*
* NOTE: This class is auto generated by the codegen artefact
* https://github.com/ConsumerDataStandardsAustralia/java-artefacts/codegen
*/
package au.org.consumerdatastandards.client.cli;
import au.org.consumerdatastandards.client.ApiClientOptions;
import au.org.consumerdatastandards.client.ApiException;
import au.org.consumerdatastandards.client.JSON;
import au.org.consumerdatastandards.client.model.BankingAccountDetail;
import au.org.consumerdatastandards.client.model.BankingAuthorisedEntity;
import au.org.consumerdatastandards.client.model.BankingBalance;
import au.org.consumerdatastandards.client.model.BankingBalancePurse;
import au.org.consumerdatastandards.client.model.BankingBillerPayee;
import au.org.consumerdatastandards.client.model.BankingCreditCardAccount;
import au.org.consumerdatastandards.client.model.BankingDirectDebit;
import au.org.consumerdatastandards.client.model.BankingDomesticPayee;
import au.org.consumerdatastandards.client.model.BankingDomesticPayeeAccount;
import au.org.consumerdatastandards.client.model.BankingDomesticPayeeCard;
import au.org.consumerdatastandards.client.model.BankingDomesticPayeePayId;
import au.org.consumerdatastandards.client.model.BankingInternationalPayee;
import au.org.consumerdatastandards.client.model.BankingInternationalPayeeBankDetails;
import au.org.consumerdatastandards.client.model.BankingInternationalPayeeBankDetailsBankAddress;
import au.org.consumerdatastandards.client.model.BankingInternationalPayeeBeneficiaryDetails;
import au.org.consumerdatastandards.client.model.BankingLoanAccount;
import au.org.consumerdatastandards.client.model.BankingPayee;
import au.org.consumerdatastandards.client.model.BankingPayeeDetail;
import au.org.consumerdatastandards.client.model.BankingProductAdditionalInformation;
import au.org.consumerdatastandards.client.model.BankingProductBundle;
import au.org.consumerdatastandards.client.model.BankingProductCategory;
import au.org.consumerdatastandards.client.model.BankingProductConstraint;
import au.org.consumerdatastandards.client.model.BankingProductDepositRate;
import au.org.consumerdatastandards.client.model.BankingProductDiscount;
import au.org.consumerdatastandards.client.model.BankingProductDiscountEligibility;
import au.org.consumerdatastandards.client.model.BankingProductEligibility;
import au.org.consumerdatastandards.client.model.BankingProductFeature;
import au.org.consumerdatastandards.client.model.BankingProductFee;
import au.org.consumerdatastandards.client.model.BankingProductLendingRate;
import au.org.consumerdatastandards.client.model.BankingProductRateCondition;
import au.org.consumerdatastandards.client.model.BankingProductRateTierSubTier;
import au.org.consumerdatastandards.client.model.BankingProductRateTierV1;
import au.org.consumerdatastandards.client.model.BankingProductRateTierV3;
import au.org.consumerdatastandards.client.model.BankingProductV1;
import au.org.consumerdatastandards.client.model.BankingProductDetailV1;
import au.org.consumerdatastandards.client.model.BankingProductV2;
import au.org.consumerdatastandards.client.model.BankingProductCardArt;
import au.org.consumerdatastandards.client.model.BankingProductDetailV2;
import au.org.consumerdatastandards.client.model.BankingScheduledPayment;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentFrom;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentInterval;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentRecurrence;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentRecurrenceEventBased;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentRecurrenceIntervalSchedule;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentRecurrenceLastWeekday;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentRecurrenceOnceOff;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentSet;
import au.org.consumerdatastandards.client.model.BankingScheduledPaymentTo;
import au.org.consumerdatastandards.client.model.BankingTermDepositAccount;
import au.org.consumerdatastandards.client.model.BankingTransaction;
import au.org.consumerdatastandards.client.model.BankingTransactionDetail;
import au.org.consumerdatastandards.client.model.BankingTransactionDetailExtendedData;
import au.org.consumerdatastandards.client.model.BankingTransactionDetailExtendedDataX2p101Payload;
import au.org.consumerdatastandards.client.model.CommonEmailAddress;
import au.org.consumerdatastandards.client.model.CommonOrganisation;
import au.org.consumerdatastandards.client.model.CommonOrganisationDetail;
import au.org.consumerdatastandards.client.model.CommonPAFAddress;
import au.org.consumerdatastandards.client.model.CommonPerson;
import au.org.consumerdatastandards.client.model.CommonPersonDetail;
import au.org.consumerdatastandards.client.model.CommonPhoneNumber;
import au.org.consumerdatastandards.client.model.CommonPhysicalAddress;
import au.org.consumerdatastandards.client.model.CommonPhysicalAddressWithPurpose;
import au.org.consumerdatastandards.client.model.CommonSimpleAddress;
import au.org.consumerdatastandards.client.model.DiscoveryOutage;
import au.org.consumerdatastandards.client.model.Error;
import au.org.consumerdatastandards.client.model.Links;
import au.org.consumerdatastandards.client.model.LinksPaginated;
import au.org.consumerdatastandards.client.model.ParamAccountOpenStatus;
import au.org.consumerdatastandards.client.model.RequestAccountIds;
import au.org.consumerdatastandards.client.model.RequestAccountIdsData;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountById;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountList;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountListData;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountsBalanceById;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountsBalanceList;
import au.org.consumerdatastandards.client.model.ResponseBankingAccountsBalanceListData;
import au.org.consumerdatastandards.client.model.ResponseBankingDirectDebitAuthorisationList;
import au.org.consumerdatastandards.client.model.ResponseBankingDirectDebitAuthorisationListData;
import au.org.consumerdatastandards.client.model.ResponseBankingPayeeById;
import au.org.consumerdatastandards.client.model.ResponseBankingPayeeList;
import au.org.consumerdatastandards.client.model.ResponseBankingPayeeListData;
import au.org.consumerdatastandards.client.model.ResponseBankingProductById;
import au.org.consumerdatastandards.client.model.ResponseBankingProductList;
import au.org.consumerdatastandards.client.model.ResponseBankingProductListData;
import au.org.consumerdatastandards.client.model.ResponseBankingScheduledPaymentsList;
import au.org.consumerdatastandards.client.model.ResponseBankingScheduledPaymentsListData;
import au.org.consumerdatastandards.client.model.ResponseBankingTransactionById;
import au.org.consumerdatastandards.client.model.ResponseBankingTransactionList;
import au.org.consumerdatastandards.client.model.ResponseBankingTransactionListData;
import au.org.consumerdatastandards.client.model.ResponseCommonCustomer;
import au.org.consumerdatastandards.client.model.ResponseCommonCustomerData;
import au.org.consumerdatastandards.client.model.ResponseCommonCustomerDetail;
import au.org.consumerdatastandards.client.model.ResponseCommonCustomerDetailData;
import au.org.consumerdatastandards.client.model.ResponseCommonDiscoveryStatus;
import au.org.consumerdatastandards.client.model.ResponseCommonDiscoveryStatusData;
import au.org.consumerdatastandards.client.model.ResponseDiscoveryOutagesList;
import au.org.consumerdatastandards.client.model.ResponseDiscoveryOutagesListData;
import com.google.gson.reflect.TypeToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.shell.standard.ShellCommandGroup;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
import org.springframework.shell.standard.ShellOption;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Type;
@ShellComponent
@ShellCommandGroup("Reference Testing")
public class ReferenceTest extends ApiCliBase {
private static final Logger LOGGER = LoggerFactory.getLogger(ReferenceTest.class);
private static final String EXCEPTION_DESERIALISING_FILE = "Exception deserialising file {}: ";
private final static String MODEL_PACKAGE_PREFIX = "au.org.consumerdatastandards.client.model.";
private final static Type[] responseModels = {
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken>() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType(),
new TypeToken() {}.getType()
};
@Autowired
private ApiClientOptions apiClientOptions;
@ShellMethod("Retrieve current conformance check status")
public void payloadValidationStatus() {
LOGGER.info("Automatic payload validation setting: {}", apiClientOptions.isValidationEnabled());
}
@ShellMethod("Validate all Payloads Automatically")
public void autoValidate(@ShellOption(help = "true or false", defaultValue = ShellOption.NULL) String enableValidation) {
if (enableValidation != null) {
apiClientOptions.setValidationEnabled(Boolean.parseBoolean(enableValidation));
}
payloadValidationStatus();
}
@ShellMethod("Validate json payload(s) against CDS")
public void validatePath(@ShellOption(value = "-f", help = "payload file or folder") String fileOrFolder,
@ShellOption(value="-m", help = "model", defaultValue = "") String model) throws ApiException {
File file = new File(fileOrFolder);
if (!file.exists()) {
LOGGER.error("Unable to find the specified file for validation: {}", fileOrFolder);
} else if (file.isDirectory()) {
File[] files = file.listFiles();
if (files == null || files.length == 0) {
LOGGER.error("No files found in directory: {}", file.getAbsolutePath());
} else {
for (File oneFile : files) {
validatePath(oneFile.getAbsolutePath(), model);
}
}
} else {
JSON json = new JSON(true);
boolean success = false;
for (Type type : responseModels) {
String typeName = type.getTypeName().replaceAll(MODEL_PACKAGE_PREFIX, "");
LOGGER.trace("Trying model: {}", typeName);
if (model.isEmpty() || typeName.equals(model)) {
try {
Object obj = json.deserialize(new FileReader(file), type);
success = true;
break;
} catch (FileNotFoundException e) {
LOGGER.error("File not found: {}", file.getAbsolutePath());
return;
} catch (Exception e) {
if (model.isEmpty()) {
LOGGER.trace(EXCEPTION_DESERIALISING_FILE, fileOrFolder, e);
} else {
LOGGER.error(EXCEPTION_DESERIALISING_FILE, fileOrFolder, e);
return;
}
}
}
}
if (!success) {
throw new ApiException("Could not find a matching model." + (model.isEmpty() ? " Try the -m option." : ""));
}
LOGGER.info("Validation of {} successful", file.getAbsolutePath());
}
}
@ShellMethod("List top-level payload models")
public String listPayloadModels() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
for (Type topLevelModel : responseModels) {
pw.println(topLevelModel.getTypeName().replaceAll(MODEL_PACKAGE_PREFIX, ""));
}
return sw.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy