123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- * Copyright 2000-2016 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.vaadin.data;
-
- import java.util.Objects;
- import java.util.Optional;
-
- import com.vaadin.server.SerializableConsumer;
- import com.vaadin.server.SerializableFunction;
-
- /**
- * An internal implementation of {@code Result}.
- *
- * @param <R>
- * the result value type
- */
- class SimpleResult<R> implements Result<R> {
-
- private final R value;
- private final String message;
-
- /**
- * Creates a new {@link Result} instance using {@code value} for a non error
- * {@link Result} and {@code message} for an error {@link Result}.
- * <p>
- * If {@code message} is null then {@code value} is ignored and result is an
- * error.
- *
- * @param value
- * the value of the result, may be {@code null}
- * @param message
- * the error message of the result, may be {@code null}
- */
- SimpleResult(R value, String message) {
- // value != null => message == null
- assert value == null
- || message == null : "Message must be null if value is provided";
- this.value = value;
- this.message = message;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <S> Result<S> flatMap(SerializableFunction<R, Result<S>> mapper) {
- Objects.requireNonNull(mapper, "mapper cannot be null");
-
- if (isError()) {
- // Safe cast; valueless
- return (Result<S>) this;
- } else {
- return mapper.apply(value);
- }
- }
-
- @Override
- public void handle(SerializableConsumer<R> ifOk,
- SerializableConsumer<String> ifError) {
- Objects.requireNonNull(ifOk, "ifOk cannot be null");
- Objects.requireNonNull(ifError, "ifError cannot be null");
- if (isError()) {
- ifError.accept(message);
- } else {
- ifOk.accept(value);
- }
- }
-
- @Override
- public Optional<String> getMessage() {
- return Optional.ofNullable(message);
- }
-
- @Override
- public boolean isError() {
- return message != null;
- }
-
- @Override
- public String toString() {
- if (isError()) {
- return "error(" + message + ")";
- } else {
- return "ok(" + value + ")";
- }
- }
-
- @Override
- public <X extends Throwable> R getOrThrow(
- SerializableFunction<String, ? extends X> exceptionSupplier)
- throws X {
- Objects.requireNonNull(exceptionSupplier,
- "Exception supplier cannot be null");
- if (isError()) {
- throw exceptionSupplier.apply(message);
- } else {
- return value;
- }
- }
-
- }
|