OptionalProcessCase.java
- package com.gh.mygreen.xlsmapper.cellconverter;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.NoSuchElementException;
- import java.util.Objects;
- import java.util.Optional;
- import java.util.Set;
- import com.gh.mygreen.xlsmapper.fieldprocessor.ProcessCase;
- /**
- * 処理ケースが該当する
- *
- *
- * @param <T> 保持する値のクラスタイプ
- * @author T.TSUCHIE
- */
- public class OptionalProcessCase<T> {
- /**
- * 空オブジェクト
- */
- private static final OptionalProcessCase<?> EMPTY = new OptionalProcessCase<>(Optional.empty(), Collections.emptyList());
- private final Optional<T> value;
- private final Set<ProcessCase> cases;
- private OptionalProcessCase(Optional<T> value, Collection<ProcessCase> cases) {
- this.value = value;
- this.cases = new HashSet<>(cases);
- }
- /**
- * 指定された非null値を含む{@link OptionalProcessCase} を返します。
- * @param value 存在する値、非nullである必要がある
- * @param cases 処理ケース。
- * @return 存在する値での{@link OptionalProcessCase}.
- */
- public static <T> OptionalProcessCase<T> of(T value, ProcessCase... cases) {
- return new OptionalProcessCase<>(Optional.of(value), Arrays.asList(cases));
- }
- /**
- * 指定された値がnullでない場合はその値を記述する{@link OptionalProcessCase}を返し、
- * それ以外の場合は空の{@link OptionalProcessCase}を返します。
- *
- * @param value 記述する値(nullも可)
- * @param cases 処理ケース。
- * @return 指定された値がnullでない場合は存在する値での{@link OptionalProcessCase}、それ以外の場合は空の{@link OptionalProcessCase}.
- */
- public static <T> OptionalProcessCase<T> ofNulable(T value, ProcessCase... cases) {
- return new OptionalProcessCase<>(Optional.ofNullable(value), Arrays.asList(cases));
- }
- /**
- * 空の{@link OptionalProcessCase}インスタンスを返します。この{@link OptionalProcessCase}の値は存在しません。
- * @return 空の{@link OptionalProcessCase}
- */
- @SuppressWarnings("unchecked")
- public static <T> OptionalProcessCase<T> empty() {
- return (OptionalProcessCase<T>)EMPTY;
- }
- /**
- * 存在する値がある場合はtrueを返し、それ以外の場合はfalseを返します。
- * 処理ケースに該当する必要もあります。
- * @param processCase 処理ケース
- * @return 存在する値がない場合はtrue、それ以外の場合はfalse
- */
- public boolean isPresent(final ProcessCase processCase) {
- return value.isPresent() & contains(processCase);
- }
- /**
- * この{@link OptionalProcessCase}に値が存在する場合は値を返し、それ以外の場合は{@link NoSuchElementException}を返します。
- * @param processCase 処理ケース
- * @return この{@link NoSuchElementException}が保持する非null値
- * @throws NoSuchElementException 存在する値がない場合
- */
- public T get(final ProcessCase processCase) {
- if(!value.isPresent() || !isPresent(processCase)) {
- throw new NoSuchElementException(String.format("No value present in processCase '%s'.", processCase.name()));
- }
- return value.get();
- }
- /**
- * 処理ケースに該当するうかどうか判定します。
- * 処理ケースが空の場合は、全てに該当します。
- * @param processCase 判定する処理ケース
- * @return trueの場合、該当する。
- */
- public boolean contains(final ProcessCase processCase) {
- Objects.requireNonNull(processCase);
- if(cases.isEmpty()) {
- return true;
- }
- return cases.contains(processCase);
- }
- }