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

org.jboss.galleon.api.config.GalleonConfigCustomizations Maven / Gradle / Ivy

/*
 * Copyright 2016-2023 Red Hat, Inc. and/or its affiliates
 * and other contributors as indicated by the @author tags.
 *
 * 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 org.jboss.galleon.api.config;

import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.jboss.galleon.config.ConfigId;

import org.jboss.galleon.util.CollectionUtils;
import org.jboss.galleon.util.StringUtils;

/**
 *
 * @author Alexey Loubyansky
 */
public class GalleonConfigCustomizations {

    protected final Boolean inheritConfigs;
    protected final boolean inheritModelOnlyConfigs;
    protected final Set includedModels;
    protected final Map excludedModels;
    protected final Set includedConfigs;
    protected final Set excludedConfigs;
    protected final Map definedConfigs;
    protected final boolean hasModelOnlyConfigs;

    protected GalleonConfigCustomizations(GalleonConfigCustomizationsBuilder builder) {
        this.inheritConfigs = builder.inheritConfigs;
        this.inheritModelOnlyConfigs = builder.inheritModelOnlyConfigs;
        this.includedModels = CollectionUtils.unmodifiable(builder.includedModels);
        this.excludedModels = CollectionUtils.unmodifiable(builder.excludedModels);
        this.includedConfigs = CollectionUtils.unmodifiable(builder.includedConfigs);
        this.excludedConfigs = CollectionUtils.unmodifiable(builder.excludedConfigs);
        this.definedConfigs = CollectionUtils.unmodifiable(builder.definedConfigs);
        this.hasModelOnlyConfigs = builder.hasModelOnlyConfigs;
    }

    public boolean isInheritConfigs(boolean defaultValue) {
        return inheritConfigs == null ? defaultValue : inheritConfigs.booleanValue();
    }

    public Boolean getInheritConfigs() {
        return inheritConfigs;
    }

    public boolean isInheritModelOnlyConfigs() {
        return inheritModelOnlyConfigs;
    }

    public boolean hasFullModelsIncluded() {
        return !includedModels.isEmpty();
    }

    public Set getFullModelsIncluded() {
        return includedModels;
    }

    public boolean isConfigModelIncluded(ConfigId configId) {
        return includedModels.contains(configId.getModel());
    }

    public boolean hasFullModelsExcluded() {
        return !excludedModels.isEmpty();
    }

    public Map getFullModelsExcluded() {
        return excludedModels;
    }

    public boolean isConfigModelExcluded(ConfigId configId) {
        final Boolean namedOnly = excludedModels.get(configId.getModel());
        if (namedOnly == null) {
            return false;
        }
        return namedOnly ? configId.getName() != null : true;
    }

    public boolean hasExcludedConfigs() {
        return !excludedConfigs.isEmpty();
    }

    public boolean isConfigExcluded(ConfigId configId) {
        return excludedConfigs.contains(configId);
    }

    public Set getExcludedConfigs() {
        return excludedConfigs;
    }

    public boolean hasIncludedConfigs() {
        return !includedConfigs.isEmpty();
    }

    public boolean isConfigIncluded(ConfigId id) {
        return includedConfigs.contains(id);
    }

    public Set getIncludedConfigs() {
        return includedConfigs;
    }

    public boolean hasDefinedConfigs() {
        return !definedConfigs.isEmpty();
    }

    public Collection getDefinedConfigs() {
        return definedConfigs.values();
    }

    public boolean hasDefinedConfig(ConfigId configId) {
        return definedConfigs.containsKey(configId);
    }

    public GalleonConfigurationWithLayers getDefinedConfig(ConfigId configId) {
        return definedConfigs.get(configId);
    }

    public boolean hasModelOnlyConfigs() {
        return hasModelOnlyConfigs;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((definedConfigs == null) ? 0 : definedConfigs.hashCode());
        result = prime * result + ((excludedConfigs == null) ? 0 : excludedConfigs.hashCode());
        result = prime * result + ((excludedModels == null) ? 0 : excludedModels.hashCode());
        result = prime * result + ((includedConfigs == null) ? 0 : includedConfigs.hashCode());
        result = prime * result + ((includedModels == null) ? 0 : includedModels.hashCode());
        result = prime * result + ((inheritConfigs == null) ? 0 : inheritConfigs.hashCode());
        result = prime * result + (inheritModelOnlyConfigs ? 1231 : 1237);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        GalleonConfigCustomizations other = (GalleonConfigCustomizations) obj;
        if (definedConfigs == null) {
            if (other.definedConfigs != null) {
                return false;
            }
        } else if (!definedConfigs.equals(other.definedConfigs)) {
            return false;
        }
        if (excludedConfigs == null) {
            if (other.excludedConfigs != null) {
                return false;
            }
        } else if (!excludedConfigs.equals(other.excludedConfigs)) {
            return false;
        }
        if (excludedModels == null) {
            if (other.excludedModels != null) {
                return false;
            }
        } else if (!excludedModels.equals(other.excludedModels)) {
            return false;
        }
        if (includedConfigs == null) {
            if (other.includedConfigs != null) {
                return false;
            }
        } else if (!includedConfigs.equals(other.includedConfigs)) {
            return false;
        }
        if (includedModels == null) {
            if (other.includedModels != null) {
                return false;
            }
        } else if (!includedModels.equals(other.includedModels)) {
            return false;
        }
        if (inheritConfigs == null) {
            if (other.inheritConfigs != null) {
                return false;
            }
        } else if (!inheritConfigs.equals(other.inheritConfigs)) {
            return false;
        }
        if (inheritModelOnlyConfigs != other.inheritModelOnlyConfigs) {
            return false;
        }
        return true;
    }

    protected void append(StringBuilder builder) {
        if (inheritConfigs != null) {
            builder.append(" inheritConfigs=").append(inheritConfigs);
        }
        if (!inheritModelOnlyConfigs) {
            builder.append(" inheritModelOnlyConfigs=false");
        }
        if (!this.excludedModels.isEmpty()) {
            builder.append(" excludedModels ");
            StringUtils.append(builder, excludedModels.entrySet());
        }
        if (!this.includedModels.isEmpty()) {
            builder.append(" includedModels ");
            StringUtils.append(builder, includedModels);
        }
        if (!excludedConfigs.isEmpty()) {
            builder.append(" excludedConfigs ");
            StringUtils.append(builder, excludedConfigs);
        }
        if (!includedConfigs.isEmpty()) {
            builder.append(" includedConfigs ");
            StringUtils.append(builder, includedConfigs);
        }
        if (!definedConfigs.isEmpty()) {
            builder.append(" definedConfigs ");
            StringUtils.append(builder, definedConfigs.values());
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy