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

com.bytex.snamp.configuration.impl.SerializableManagedResourceGroupConfiguration Maven / Gradle / Ivy

package com.bytex.snamp.configuration.impl;

import com.bytex.snamp.SpecialUse;
import com.bytex.snamp.configuration.EntityMap;
import com.bytex.snamp.configuration.FeatureConfiguration;
import com.bytex.snamp.configuration.ManagedResourceConfiguration;
import com.bytex.snamp.configuration.ManagedResourceGroupConfiguration;

import java.util.Map;
import java.util.Objects;
import java.util.Set;

/**
 * Represents serializable version of managed resource group.
 * This class cannot be inherited.
 * @author Roman Sakno
 * @version 1.0
 * @since 1.0
 */
final class SerializableManagedResourceGroupConfiguration extends AbstractManagedResourceTemplate implements ManagedResourceGroupConfiguration {
    private static final long serialVersionUID = 9050126733283251808L;

    @SpecialUse(SpecialUse.Case.SERIALIZATION)
    public SerializableManagedResourceGroupConfiguration(){
    }

    private static  void mergeFeatures(final EntityMap groupFeatures,
                                                                       final EntityMap resourceFeatures) {
        groupFeatures.forEach((featureNameInGroup, featureConfigInGroup) -> {
            final F featureConfigInResource = resourceFeatures.getOrAdd(featureNameInGroup);
            if (!featureConfigInResource.isOverridden())
                featureConfigInResource.load(featureConfigInGroup);
        });
    }

    private static void mergeParameters(final Map groupParameters,
                                        final Map resourceParameters,
                                        final Set overriddenProperties) {
        groupParameters.forEach((paramNameInGroup, paramValueInGroup) -> {
            if (!overriddenProperties.contains(paramNameInGroup))
                resourceParameters.put(paramNameInGroup, paramValueInGroup);
        });
    }

    @Override
    public void fillResourceConfig(final ManagedResourceConfiguration resource) {
        //overwrite all properties in resource but hold user-defined properties
        mergeParameters(this, resource, resource.getOverriddenProperties());
        //overwrite all attributes
        mergeFeatures(getAttributes(), resource.getAttributes());
        //overwrite all events
        mergeFeatures(getEvents(), resource.getEvents());
        //overwrite all operations
        mergeFeatures(getOperations(), resource.getOperations());
        //overwrite connector type
        resource.setType(getType());
    }

    private boolean equals(final ManagedResourceGroupConfiguration other) {
        return other.getAttributes().equals(getAttributes()) &&
                other.getEvents().equals(getEvents()) &&
                other.getOperations().equals(getOperations()) &&
                Objects.equals(other.getType(), getType()) &&
                super.equals(other);
    }

    @Override
    public boolean equals(final Object other) {
        return other instanceof ManagedResourceGroupConfiguration && equals((ManagedResourceGroupConfiguration)other);
    }

    @Override
    public int hashCode() {
        return super.hashCode() ^ Objects.hash(getType(), getAttributes(), getEvents(), getOperations());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy