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

org.osgl.util.FeaturedBase Maven / Gradle / Ivy

The newest version!
package org.osgl.util;

/*-
 * #%L
 * Java Tool
 * %%
 * Copyright (C) 2014 - 2017 OSGL (Open Source General Library)
 * %%
 * 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.
 * #L%
 */

import java.util.EnumSet;

/**
 * Provide common logic to handle {@link C.Featured} interface
 */
public abstract class FeaturedBase implements C.Featured {

    volatile private EnumSet features_;

    protected final EnumSet features_() {
        if (null == features_) {
            synchronized (this) {
                if (null == features_) {
                    features_ = initFeatures();
                    assert(null != features_);
                }
            }
        }
        return features_;
    }

    /**
     * Sub class should override this method to provide initial feature
     * set for the feature based instance
     *
     * @return the initial feature set configuration
     */
    abstract protected EnumSet initFeatures();

    @Override
    public final EnumSet features() {
        return EnumSet.copyOf(features_());
    }

    @Override
    public final boolean is(C.Feature feature) {
        return features_().contains(feature);
    }

    protected FeaturedBase setFeature(C.Feature feature) {
        features_().add(feature);
        return this;
    }

    protected FeaturedBase unsetFeature(C.Feature feature) {
        features_().remove(feature);
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy