/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; import com.google.common.annotations.VisibleForTesting; import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyConfigurationContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.UnconfiguredRuleGroup; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.UnconfiguredRuleGroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.unconfigured.rule.group.UnconfiguredResolvedRule; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.unconfigured.rule.group.UnconfiguredResolvedRuleBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Status; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.UnconfiguredRendererEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.UnconfiguredRendererEndpointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.unconfigured.renderer.endpoint.UnconfiguredPeerEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.unconfigured.renderer.endpoint.UnconfiguredPeerEndpointBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Purpose: assembly methods for {@link Status}. */ public class StatusUtil { private static final Logger LOG = LoggerFactory.getLogger(StatusUtil.class); private StatusUtil() { throw new IllegalAccessError("instance of util class not supported"); } /** * @param context holder of actual configuration state * @param info detailed message for not configurable item * @return ful collection of not configurable items under given endpoint */ public static UnconfiguredRendererEndpoint assembleFullyNotConfigurableRendererEP(final PolicyConfigurationContext context, final String info) { final RendererEndpoint rendererEndpoint = context.getCurrentRendererEP(); LOG.trace("Fully not configurable EP: {}", info); return new UnconfiguredRendererEndpointBuilder(rendererEndpoint) .setUnconfiguredPeerEndpoint(assemblePeerEndpoint(rendererEndpoint.getPeerEndpoint().stream(), context)) .setInfo(info) .build(); } /** * @param context holder of actual configuration state * @param peerEndpoint peer endpoint * @param info detailed message for not configurable item * @return filtered collection of not configurable items under given endpoint and peer */ public static UnconfiguredRendererEndpoint assembleNotConfigurableRendererEPForPeer(final PolicyConfigurationContext context, final PeerEndpoint peerEndpoint, final String info) { final RendererEndpoint rendererEndpoint = context.getCurrentRendererEP(); LOG.trace("Not configurable EP for peer: {}", info); return new UnconfiguredRendererEndpointBuilder(rendererEndpoint) .setUnconfiguredPeerEndpoint(assemblePeerEndpoint(Stream.of(peerEndpoint), context)) .setInfo(info) .build(); } @VisibleForTesting static List<UnconfiguredPeerEndpoint> assemblePeerEndpoint(final Stream<PeerEndpoint> peerEndpoint, final PolicyConfigurationContext context) { return peerEndpoint .map((peerEP) -> new UnconfiguredPeerEndpointBuilder(peerEP) .setUnconfiguredRuleGroup( assembleRuleGroups(peerEP.getRuleGroupWithRendererEndpointParticipation().stream(), context) ).build()) .collect(Collectors.toList()); } @VisibleForTesting static List<UnconfiguredRuleGroup> assembleRuleGroups(final Stream<RuleGroupWithRendererEndpointParticipation> stream, final PolicyConfigurationContext context) { return stream .filter(Objects::nonNull) .map((ruleGroup) -> new UnconfiguredRuleGroupBuilder(ruleGroup) .setRendererEndpointParticipation(ruleGroup.getRendererEndpointParticipation()) .setUnconfiguredResolvedRule(assembleResolvedRule(Stream.of(context.getCurrentUnconfiguredRule()), context)) .build()) .collect(Collectors.toList()); } @VisibleForTesting private static List<UnconfiguredResolvedRule> assembleResolvedRule(final Stream<UnconfiguredResolvedRule> stream, final PolicyConfigurationContext context) { return stream .filter(Objects::nonNull) .map((unconfiguredRule) -> new UnconfiguredResolvedRuleBuilder(context.getCurrentUnconfiguredRule()) .setRuleName(context.getCurrentUnconfiguredRule().getRuleName()) .build()) .collect(Collectors.toList()); } }