8f8cb2086138ef3e284a4aecef347f0a389b228f
[groupbasedpolicy.git] / renderers / ios-xe / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ios_xe_provider / impl / util / StatusUtil.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util;
10
11 import com.google.common.annotations.VisibleForTesting;
12 import java.util.List;
13 import java.util.Objects;
14 import java.util.stream.Collectors;
15 import java.util.stream.Stream;
16 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyConfigurationContext;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.UnconfiguredRuleGroup;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.UnconfiguredRuleGroupBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Status;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.UnconfiguredRendererEndpoint;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.UnconfiguredRendererEndpointBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.unconfigured.renderer.endpoint.UnconfiguredPeerEndpoint;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.unconfigured.renderer.endpoint.UnconfiguredPeerEndpointBuilder;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 /**
31  * Purpose: assembly methods for {@link Status}.
32  */
33 public class StatusUtil {
34
35     private static final Logger LOG = LoggerFactory.getLogger(StatusUtil.class);
36
37     private StatusUtil() {
38         throw new IllegalAccessError("instance of util class not supported");
39     }
40
41     /**
42      * @param context holder of actual configuration state
43      * @param info    detailed message for not configurable item
44      * @return ful collection of not configurable items under given endpoint
45      */
46     public static UnconfiguredRendererEndpoint assembleFullyNotConfigurableRendererEP(final PolicyConfigurationContext context,
47                                                                                       final String info) {
48         final RendererEndpoint rendererEndpoint = context.getCurrentRendererEP();
49         LOG.trace("fully not configurable EP: {}", info);
50         return new UnconfiguredRendererEndpointBuilder(rendererEndpoint)
51                 .setUnconfiguredPeerEndpoint(assemblePeerEndpoint(rendererEndpoint.getPeerEndpoint().stream()))
52                 .setInfo(info)
53                 .build();
54     }
55
56     /**
57      * @param context holder of actual configuration state
58      * @param info    detailed message for not configurable item
59      * @return filtered collection of not configurable items under given endpoint and peer
60      */
61     public static UnconfiguredRendererEndpoint assembleNotConfigurableRendererEPForPeer(final PolicyConfigurationContext context,
62                                                                                         final PeerEndpoint peerEndpoint,
63                                                                                         final String info) {
64         final RendererEndpoint rendererEndpoint = context.getCurrentRendererEP();
65         LOG.trace("not configurable EP for peer: {}", info);
66         return new UnconfiguredRendererEndpointBuilder(rendererEndpoint)
67                 .setUnconfiguredPeerEndpoint(assemblePeerEndpoint(Stream.of(peerEndpoint)))
68                 .setInfo(info)
69                 .build();
70     }
71
72     @VisibleForTesting
73     static List<UnconfiguredPeerEndpoint> assemblePeerEndpoint(final Stream<PeerEndpoint> peerEndpoint) {
74         return peerEndpoint
75                 .map((peerEP) -> new UnconfiguredPeerEndpointBuilder(peerEP)
76                         .setUnconfiguredRuleGroup(
77                                 assembleRuleGroups(peerEP.getRuleGroupWithRendererEndpointParticipation().stream())
78                         ).build())
79                 .collect(Collectors.toList());
80     }
81
82     @VisibleForTesting
83     static List<UnconfiguredRuleGroup> assembleRuleGroups(final Stream<RuleGroupWithRendererEndpointParticipation> stream) {
84         return stream
85                 .filter(Objects::nonNull)
86                 .map((ruleGroup) -> new UnconfiguredRuleGroupBuilder(ruleGroup)
87                         .setRendererEndpointParticipation(ruleGroup.getRendererEndpointParticipation())
88                         // TODO: find rule-group and append names of resolved rules ...setUnconfiguredResolvedRule()
89                         .build())
90                 .collect(Collectors.toList());
91     }
92 }