org.ldp4j.application.engine.context.ContentPreferences.java Source code

Java tutorial

Introduction

Here is the source code for org.ldp4j.application.engine.context.ContentPreferences.java

Source

/**
 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 *   This file is part of the LDP4j Project:
 *     http://www.ldp4j.org/
 *
 *   Center for Open Middleware
 *     http://www.centeropenmiddleware.com/
 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 *   Copyright (C) 2014-2016 Center for Open Middleware.
 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 *   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.
 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 *   Artifact    : org.ldp4j.framework:ldp4j-application-engine-api:0.2.1
 *   Bundle      : ldp4j-application-engine-api-0.2.1.jar
 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
 */
package org.ldp4j.application.engine.context;

import java.net.URI;
import java.util.Collections;
import java.util.Set;

import org.ldp4j.application.vocabulary.LDP;
import org.ldp4j.application.vocabulary.Term;

import com.google.common.base.Objects;
import com.google.common.collect.Sets;

public final class ContentPreferences {

    public enum Preference {
        CONTAINMENT_TRIPLES(LDP.PREFER_CONTAINMENT), MEMBERSHIP_TRIPLES(LDP.PREFER_MEMBERSHIP), MINIMAL_CONTAINER(
                LDP.PREFER_MINIMAL_CONTAINER), EMPTY_CONTAINER(LDP.PREFER_EMPTY_CONTAINER),;

        private final Term term;

        private Preference(Term term) {
            this.term = term;
        }

        public URI toURI() {
            return term.as(URI.class);
        }

        public static Preference fromString(String value) {
            for (Preference candidate : values()) {
                if (candidate.term.qualifiedEntityName().equals(value)) {
                    return candidate;
                }
            }
            return null;
        }
    }

    private final Set<Preference> include;
    private final Set<Preference> omit;

    private ContentPreferences() {
        this.include = Sets.newTreeSet();
        this.omit = Sets.newTreeSet();
    }

    public Set<Preference> includes() {
        return Collections.unmodifiableSet(this.include);
    }

    public Set<Preference> omits() {
        return Collections.unmodifiableSet(this.omit);
    }

    public int size() {
        return this.include.size() + this.omit.size();
    }

    public boolean isEmpty() {
        return size() == 0;
    }

    public void include(Preference preference) {
        if (preference != null) {
            this.include.add(preference);
            this.omit.remove(preference);
        }
    }

    public void omit(Preference preference) {
        if (preference != null) {
            this.include.remove(preference);
            this.omit.add(preference);
        }
    }

    public boolean isMinimalInclusionRequired() {
        return this.include.contains(Preference.MINIMAL_CONTAINER);
    }

    public boolean mayInclude(Preference preference) {
        Preference tmp = normalize(preference);
        return this.include.contains(tmp) || (!isOmissiontRequired(tmp) && !isMinimalInclusionRequired());
    }

    private boolean isOmissiontRequired(Preference preference) {
        return this.omit.contains(preference);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(this.include, this.omit);
    }

    @Override
    public boolean equals(Object obj) {
        boolean result = false;
        if (obj != null && obj.getClass() == this.getClass()) {
            ContentPreferences that = (ContentPreferences) obj;
            result = Objects.equal(this.include, that.include) && Objects.equal(this.omit, that.omit);
        }
        return result;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("ContentPreferences [");
        builder.append("include=").append(this.include).append(", ");
        builder.append("omit=").append(this.omit);
        builder.append("]");
        return builder.toString();
    }

    public static ContentPreferences defaultPreferences() {
        ContentPreferences tmp = new ContentPreferences();
        tmp.include(Preference.CONTAINMENT_TRIPLES);
        tmp.include(Preference.MEMBERSHIP_TRIPLES);
        return tmp;
    }

    public static ContentPreferencesBuilder builder() {
        return new ContentPreferencesBuilder();
    }

    private static Preference normalize(Preference preference) {
        Preference result = preference;
        if (Preference.EMPTY_CONTAINER.equals(result)) {
            result = Preference.MINIMAL_CONTAINER;
        }
        return result;
    }

    public static final class ContentPreferencesBuilder {

        private ContentPreferences contentPreferences;

        private ContentPreferencesBuilder() {
            this.contentPreferences = new ContentPreferences();
        }

        public ContentPreferencesBuilder withInclude(Preference preference) {
            this.contentPreferences.include(normalize(preference));
            return this;
        }

        public ContentPreferencesBuilder withOmit(Preference preference) {
            this.contentPreferences.omit(normalize(preference));
            return this;
        }

        public ContentPreferences build() {
            return this.contentPreferences;
        }
    }

}