StoredParamMeta.java
package com.github.mygreen.sqlmapper.core.meta;
import java.util.Collection;
import java.util.Optional;
import org.springframework.util.LinkedCaseInsensitiveMap;
import com.github.mygreen.sqlmapper.core.type.ValueType;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
/**
* ストアドのパラメータを表現します。
*
* @since 0.3
* @author T.TSUCHIE
*
*/
@RequiredArgsConstructor
public class StoredParamMeta {
/**
* パラメータのタイプです
*/
@Getter
private final Class<?> paramType;
/**
* 匿名パラメータ(INのみ)かどうか。
*/
@Getter
private final boolean anonymouse;
/**
* 値の変換処理。
* <p>匿名パラメータのときのみ値を持つ。
*/
@Getter
private Optional<ValueType<?>> valueType;
/**
* プロパティ情報
* <p>key=プロパティ名</p>
*/
private LinkedCaseInsensitiveMap<StoredPropertyMeta> propertyMetaMap = new LinkedCaseInsensitiveMap<>();
/**
* パラメータの値に対する {@link ValueType} を設定します。
* @param valueType パラメータの値に対する {@link ValueType} を設定しま
*/
public void setValueType(@NonNull ValueType<?> valueType) {
this.valueType = Optional.of(valueType);
}
/**
* プロパティ情報を追加します。
* @param propertyMeta プロパティ情報。
*/
public void addPropertyMeta(@NonNull StoredPropertyMeta propertyMeta) {
propertyMetaMap.put(propertyMeta.getName(), propertyMeta);
}
/**
* プロパティメタ情報を取得します。
* @param propertyName プロパティ名
* @return プロパティメタ情報
*/
public Optional<StoredPropertyMeta> getPropertyMeta(@NonNull String propertyName) {
return Optional.ofNullable(propertyMetaMap.get(propertyName));
}
/**
* プロパティメタデータがあるかどうかを返します。
* @param propertyName プロパティ名
* @return {@literal true}のときプロパティメタデータがあります。
*/
public boolean hasPropertyMeta(String propertyName) {
return propertyMetaMap.containsKey(propertyName);
}
/**
* 全てのプロパティメタ情報の一覧を返します。
* @return プロパティメタ情報の一覧
*/
public Collection<StoredPropertyMeta> getAllPropertyMeta() {
return propertyMetaMap.values();
}
}