2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.policy;
11 import java.util.Comparator;
12 import java.util.List;
14 import javax.annotation.Nonnull;
15 import javax.annotation.concurrent.Immutable;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
25 import com.google.common.collect.ComparisonChain;
26 import com.google.common.collect.ImmutableSortedSet;
27 import com.google.common.collect.Ordering;
30 * Represent a group of rules applied to a given pair of endpoints.
31 * Includes references back to the normalized policy that resulted in the rule
35 public class ResolvedRuleGroup implements Comparable<ResolvedRuleGroup> {
37 private static final ResolvedRuleComparator RULE_COMPARATOR = new ResolvedRuleComparator();
38 private ImmutableSortedSet<ResolvedRule> rules;
39 private final Integer order;
40 private final TenantId contractTenantId;
41 private final ContractId contractId;
42 private final SubjectName relatedSubject;
44 public static class ResolvedRuleComparator implements Comparator<ResolvedRule> {
47 public int compare(ResolvedRule o1, ResolvedRule o2) {
48 return ComparisonChain.start()
49 .compare(o1.getOrder(), o2.getOrder(), Ordering.natural().nullsLast())
50 .compare(o1.getName().getValue(), o2.getName().getValue(), Ordering.natural().nullsLast())
56 public ResolvedRuleGroup(@Nonnull RuleGroup ruleGroup) {
57 this.rules = ImmutableSortedSet.copyOf(RULE_COMPARATOR, ruleGroup.getResolvedRule());
58 this.order = ruleGroup.getOrder();
59 this.contractTenantId = ruleGroup.getTenantId();
60 this.contractId = ruleGroup.getContractId();
61 this.relatedSubject = ruleGroup.getSubjectName();
64 public ResolvedRuleGroup(List<ResolvedRule> rules, Integer order, TenantId contractTenantId, ContractId contractId,
65 SubjectName subject) {
66 this.rules = ImmutableSortedSet.copyOf(RULE_COMPARATOR, rules);
68 this.contractTenantId = contractTenantId;
69 this.contractId = contractId;
70 this.relatedSubject = subject;
74 * @return sorted {@link Rule} list
76 public ImmutableSortedSet<ResolvedRule> getRules() {
80 public Integer getOrder() {
84 public TenantId getContractTenantId() {
85 return contractTenantId;
88 public ContractId getContractId() {
92 public SubjectName getRelatedSubject() {
93 return relatedSubject;
96 public RuleGroupKey getRelatedRuleGroupKey() {
97 return new RuleGroupKey(contractId, relatedSubject, contractTenantId);
101 public int hashCode() {
102 final int prime = 31;
104 result = prime * result + ((order == null) ? 0 : order.hashCode());
105 result = prime * result + ((rules == null) ? 0 : rules.hashCode());
106 result = prime * result + ((relatedSubject == null) ? 0 : relatedSubject.hashCode());
111 public boolean equals(Object obj) {
116 if (getClass() != obj.getClass())
118 ResolvedRuleGroup other = (ResolvedRuleGroup) obj;
120 if (other.order != null)
122 } else if (!order.equals(other.order))
125 if (other.rules != null)
127 } else if (!rules.equals(other.rules))
129 if (relatedSubject == null) {
130 if (other.relatedSubject != null)
132 } else if (!relatedSubject.equals(other.relatedSubject))
138 public int compareTo(ResolvedRuleGroup o) {
139 return ComparisonChain.start()
140 .compare(order, o.order, Ordering.natural().nullsLast())
141 .compare(relatedSubject.getValue(), o.relatedSubject.getValue(), Ordering.natural().nullsLast())