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

com.github.mygreen.supercsv.exception.SuperCsvValidationException Maven / Gradle / Ivy

Go to download

CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。

There is a newer version: 2.3
Show newest version
package com.github.mygreen.supercsv.exception;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.exception.SuperCsvCellProcessorException;
import org.supercsv.util.CsvContext;

import com.github.mygreen.supercsv.util.Utils;

/**
 * {@link CellProcessor}の実行に失敗(入力値が不正)などの時にスローされる例外。
 * 

フォーマット用のメッセージや、変数が設定可能。

* * @since 2.0 * @author T.TSUCHIE * */ public class SuperCsvValidationException extends SuperCsvCellProcessorException implements Cloneable { /** serialVersionUID */ private static final long serialVersionUID = 3448638872019192862L; private boolean parsedError; private Object rejectedValue; private String validationMessage; private Map messageVariables = new HashMap<>(); public SuperCsvValidationException(final String msg, final CsvContext context, final CellProcessor processor) { super(msg, context, processor); } public SuperCsvValidationException(final String msg, final CsvContext context, final CellProcessor processor, final Throwable t) { super(msg, context, processor, t); } /** * 検証に失敗した値を取得する。 * @return */ public Object getRejectedValue() { return rejectedValue; } /** * 検証用のメッセージを取得する。 * @return 検証用のメッセージ。 */ public String getValidationMessage() { return validationMessage; } /** * 検証用のメッセージ変数を取得する。 * @return 検証用のメッセージ変数 */ public Map getMessageVariables() { return messageVariables; } /** * パース時などの型変換エラーかどうか。 * @return trueの場合、型変換エラー。 */ public boolean isParedError() { return parsedError; } @Override public SuperCsvValidationException clone() { return new Builder(new CsvContext(getCsvContext()), getProcessor()) .message(getMessage()) .exception(getCause()) .rejectedValue(rejectedValue) .validationMessage(validationMessage) .messageVariables(messageVariables) .parsedError(parsedError) .build(); } /** * {@link SuperCsvValidationException}のインスタンスを作成するビルダクラス。 * */ public final static class Builder { private final CsvContext context; private final CellProcessor processor; private String message; private Throwable exception; private Object rejectedValue; private String validationMessage; private Map messageVariables = new HashMap<>(); private boolean parsedError; public Builder(CsvContext context, CellProcessor processor) { this.context = context; this.processor = processor; } /** * 例外用のメッセージを設定する。 * @param message 例外用のメッセージ。 * @return */ public Builder message(String message) { this.message = message; return this; } /** * 例外用のメッセージをフォーマットして設定する。 * * @see String#format(String, Object...) * @param format フォーマット。 * @param args 書式の引数。 * @return */ public Builder messageFormat(final String format, final Object... args) { return message(String.format(format, args)); } /** * 例外を設定する。 * @param exception 例外。 * @return */ public Builder exception(Throwable exception) { this.exception = exception; return this; } /** * 検証に失敗した値 * @param rejectedValue * @return */ public Builder rejectedValue(Object rejectedValue) { this.rejectedValue = rejectedValue; return this; } /** * 検証エラー用メッセージを設定する * @param validationMessage 検証エラー時のメッセージ * @return */ public Builder validationMessage(String validationMessage) { this.validationMessage = validationMessage; return this; } /** * 値が存在する場合に検証エラー用メッセージを設定する * @param validationMessage 検証エラー時のメッセージ * @return */ public Builder validationMessageIfPresent(Optional validationMessage) { validationMessage.ifPresent(m -> validationMessage(m)); return this; } /** * 検証エラー用メッセージの引数を追加する。 * @param key キー. * @param value 値 * @return */ public Builder messageVariables(String key, Object value) { this.messageVariables.put(key, value); return this; } /** * 値が存在する場合に検証エラー用メッセージの引数を追加する。 * @param key キー. * @param value 値。 * @return */ public Builder messageVariablesIfPresent(String key, Optional value) { value.ifPresent(v -> messageVariables.put(key, v)); return this; } /** * 値が存在する場合に検証エラー用メッセージの引数を追加する。 * @param arguments メッセージ変数のマップ。 * @return */ public Builder messageVariables(Map arguments) { this.messageVariables.putAll(arguments); return this; } /** * パース時のエラーかどうか設定する。 * @param parsedError * @return */ public Builder parsedError(boolean parsedError) { this.parsedError = parsedError; return this; } /** * {@link SuperCsvValidationException}のインスタンスを作成する。 * @return */ public SuperCsvValidationException build() { final String msg = Optional.ofNullable(message) .orElseGet(() -> processor.getClass().getName() + " error."); final SuperCsvValidationException error; if(exception == null) { error = new SuperCsvValidationException(msg, context, processor); } else { error = new SuperCsvValidationException(msg, context, processor, exception); } error.rejectedValue = rejectedValue; if(Utils.isNotEmpty(validationMessage)) { error.validationMessage = validationMessage; } if(messageVariables.size() > 0) { error.messageVariables = messageVariables; } error.parsedError = parsedError; return error; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy