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

com.tangosol.coherence.config.SystemPropertyResolver Maven / Gradle / Ivy

There is a newer version: 24.09
Show newest version
/*
 * Copyright (c) 2000, 2020, Oracle and/or its affiliates.
 *
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */
package com.tangosol.coherence.config;


import java.util.Iterator;
import java.util.Optional;
import java.util.ServiceLoader;


/**
 * An abstraction that allows us to make system property resolution
 * customizable.
 *
 * @author as  2019.10.11
 */
public interface SystemPropertyResolver
    {
    /**
     * Return the value of the specified system property.
     *
     * @param sPropertyName  the name of the property to return
     *
     * @return the value of the specified system property
     */
    public String getProperty(String sPropertyName);

    /**
     * Return the value of the specified system property, or the specified
     * default value if the property doesn't exist.
     *
     * @param sPropertyName  the name of the property to return
     * @param sDefaultValue  the default value to return if the property
     *                       doesn't exist
     *
     * @return the value of the specified system property, or the specified
     *         default value if the property doesn't exist
     */
    public default String getProperty(String sPropertyName, String sDefaultValue)
        {
        return Optional.ofNullable(getProperty(sPropertyName)).orElse(sDefaultValue);
        }

    /**
     * Return an instance of a {@link SystemPropertyResolver} discovered by
     * the {@code ServiceLoader}, or a default instance if none are discovered.
     *
     * @return an instance of a {@code SystemPropertyResolver}
     */
    public static SystemPropertyResolver getInstance()
        {
        ServiceLoader serviceLoader =
                ServiceLoader.load(SystemPropertyResolver.class);
        Iterator resolvers = serviceLoader.iterator();
        return resolvers.hasNext() ? resolvers.next() : new Default();
        }

    // ---- inner class: Default --------------------------------------------

    /**
     * Default {@link SystemPropertyResolver} implementation.
     * 

* This implementation simply delegates to {@link System#getProperty(String)}. */ class Default implements SystemPropertyResolver { @Override public String getProperty(String sPropertyName) { return System.getProperty(sPropertyName); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy