2 * Copyright (c) 2014 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.resolver;
11 import java.util.List;
13 import javax.annotation.concurrent.Immutable;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
20 import com.google.common.collect.ComparisonChain;
21 import com.google.common.collect.Ordering;
24 * Represent a group of rules that could apply to a given pair of endpoints.
25 * Includes references back to the normalized policy that resulted in the rule
30 public class RuleGroup implements Comparable<RuleGroup> {
31 final List<Rule> rules;
33 final Tenant contractTenant;
34 final Contract relatedContract;
35 final SubjectName relatedSubject;
37 public RuleGroup(List<Rule> rules, Integer order,
38 Tenant contractTenant, Contract contract,
39 SubjectName subject) {
41 this.rules = Ordering.from(TenantUtils.RULE_COMPARATOR).immutableSortedCopy(rules);
43 this.contractTenant = contractTenant;
44 this.relatedContract = contract;
45 this.relatedSubject = subject;
49 * @return sorted {@link Rule} list
51 public List<Rule> getRules() {
55 public Integer getOrder() {
59 public Tenant getContractTenant() {
60 return contractTenant;
63 public Contract getRelatedContract() {
64 return relatedContract;
67 public SubjectName getRelatedSubject() {
68 return relatedSubject;
72 public int hashCode() {
75 result = prime * result + ((order == null) ? 0 : order.hashCode());
76 result = prime * result + ((rules == null) ? 0 : rules.hashCode());
77 result = prime * result +
78 ((relatedSubject == null) ? 0 : relatedSubject.hashCode());
83 public boolean equals(Object obj) {
88 if (getClass() != obj.getClass())
90 RuleGroup other = (RuleGroup) obj;
92 if (other.order != null)
94 } else if (!order.equals(other.order))
97 if (other.rules != null)
99 } else if (!rules.equals(other.rules))
101 if (relatedSubject == null) {
102 if (other.relatedSubject != null)
104 } else if (!relatedSubject.equals(other.relatedSubject))
110 public int compareTo(RuleGroup o) {
111 return ComparisonChain.start()
112 .compare(order, o.order,
113 Ordering.natural().nullsLast())
114 .compare(relatedSubject.getValue(), o.relatedSubject.getValue(),
115 Ordering.natural().nullsLast())
120 public String toString() {
121 return "RuleGroup [rules=" + rules + ", order=" + order +
122 ", contractTenant=" + contractTenant.getId() +
123 ", relatedContract=" + relatedContract.getId() +
124 ", relatedSubject=" + relatedSubject + "]";