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

com.github.mygreen.supercsv.validation.CsvError Maven / Gradle / Ivy

Go to download

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

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

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

import com.github.mygreen.supercsv.localization.MessageInterpolator;
import com.github.mygreen.supercsv.localization.MessageResolver;

/**
 * オブジェクトに対するエラーメッセージ。
 * 
 * @version 2.0
 * @author T.TSUCHIE
 *
 */
public class CsvError implements Serializable {
    
    /** serialVersionUID */
    private static final long serialVersionUID = -1561852232153053944L;
    
    /**
     * オブジェクト名
     */
    private final String objectName;
    
    /**
     * メッセージコード
     * 

複数指定可能で、フォーマットする際に一致するメッセージのリソースが見つかるまで

*/ private final String[] codes; /** * メッセージ中の変数。 */ private final Map variables; /** * デフォルトメッセージ。 *

指定したコードに対するメッセージが見つからない場合に、適用されるメッセージ。 */ private final String defaultMessage; public CsvError(final String objectName, final String[] codes, final Map variables, final String defaultMessaage) { this.objectName = objectName; this.codes = codes; this.variables = variables; this.defaultMessage = defaultMessaage; } /** * メッセージにフォーマットする。 * @param messageResolver * @param messageInterpolator * @return フォーマットされたメッセージ。 */ public String format(final MessageResolver messageResolver, final MessageInterpolator messageInterpolator) { for(String code : getCodes()) { Optional message = messageResolver.getMessage(code); if(message.isPresent()) { return messageInterpolator.interpolate(message.get(), getVariables(), true, messageResolver); } } // デフォルトメッセージはBeanValidationのとき変数を追加している場合があるため、再度フォーマットする。 return messageInterpolator.interpolate(getDefaultMessage(), getVariables(), true, messageResolver); } /** * オブジェクト名の取得。 * @return Beanクラス名のパッケージ名を除いた値。 */ public String getObjectName() { return objectName; } /** * メッセージコードの候補を取得する。 * @return メッセージコードの候補。 */ public String[] getCodes() { return codes; } /** * メッセージ変数を取得する。 * @return メッセージをフォーマットする際に、その中で利用可能な変数。 */ public Map getVariables() { return variables; } /** * デフォルトメッセージを取得する。 * @return メッセージコードで指定したメッセージリソースが見つからない場合に適用されるメッセージ。 */ public String getDefaultMessage() { return defaultMessage; } public static final class Builder { private final String objectName; private final String[] codes; private Map variables = new HashMap<>(); private String defaultMessage; public Builder(final String objectName, final String[] codes) { this.objectName = objectName; this.codes = codes; } public Builder variables(final Map variables) { this.variables.putAll(variables); return this; } public Builder variables(final String key, final Object value) { this.variables.put(key, value); return this; } public Builder defaultMessage(final String defaultMessage) { this.defaultMessage = defaultMessage; return this; } public CsvError build() { return new CsvError(objectName, codes, variables, defaultMessage); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy