From 9ab224a3f80ab077959c9d728b93670571a4245c Mon Sep 17 00:00:00 2001 From: Paul Ferraro Date: Wed, 7 Jun 2017 17:21:10 -0400 Subject: [PATCH] InjectedValue impl that exposes an Optional. --- .../service/OptionalInjectedValue.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 clustering/service/src/main/java/org/wildfly/clustering/service/OptionalInjectedValue.java diff --git a/clustering/service/src/main/java/org/wildfly/clustering/service/OptionalInjectedValue.java b/clustering/service/src/main/java/org/wildfly/clustering/service/OptionalInjectedValue.java new file mode 100644 index 000000000000..5a355d49f46e --- /dev/null +++ b/clustering/service/src/main/java/org/wildfly/clustering/service/OptionalInjectedValue.java @@ -0,0 +1,53 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2017, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.wildfly.clustering.service; + +import java.util.Optional; + +import org.jboss.msc.inject.RetainingInjector; +import org.jboss.msc.value.Value; + +/** + * Like {@link org.jboss.msc.value.InjectedValue}, but with support for returning an {@link Optional}. + * @author Paul Ferraro + */ +public class OptionalInjectedValue extends RetainingInjector implements Value { + + @Override + public T getValue() { + Value value = getStoredValue(); + if (value == null) { + throw new IllegalStateException(); + } + return value.getValue(); + } + + /** + * Returns the optional value, which is only defined if a value was injected. + * Analogous to {@link org.jboss.msc.value.InjectedValue#getOptionalValue()}. + * @return an optional injected value + */ + public Optional getOptionalValue() { + return Optional.ofNullable(this.getStoredValue()).map(Value::getValue); + } +}