Bug 3240 3613: Asymetric policy in neutron
[groupbasedpolicy.git] / neutron-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / rule / SingleRuleContract.java
1 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
2
3 import static com.google.common.base.Preconditions.checkNotNull;
4
5 import javax.annotation.Nullable;
6 import javax.annotation.concurrent.Immutable;
7
8 import org.opendaylight.neutron.spi.NeutronSecurityRule;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
16
17 import com.google.common.collect.ImmutableList;
18
19 @Immutable
20 public class SingleRuleContract {
21
22     private final SingleClassifierRule singleClassifierRule;
23     private final Rule rule;
24     private final Subject subject;
25     private final Clause clause;
26     private final Contract contract;
27
28     public SingleRuleContract(NeutronSecurityRule secRule, int subjectAndRuleOrder, @Nullable Description contractDescription) {
29         this(secRule, new SingleClassifierRule(secRule, subjectAndRuleOrder), subjectAndRuleOrder, contractDescription);
30     }
31
32     public SingleRuleContract(NeutronSecurityRule secRule, SingleClassifierRule singleClassifierRule,
33             int subjectOrder, @Nullable Description contractDescription) {
34         checkNotNull(secRule);
35         this.singleClassifierRule = checkNotNull(singleClassifierRule);
36         this.rule = singleClassifierRule.getRule();
37         this.subject = new SubjectBuilder().setName(SecRuleNameDecoder.getSubjectName(secRule))
38             .setOrder(subjectOrder)
39             .setRule(ImmutableList.of(rule))
40             .build();
41         this.clause = SecRuleEntityDecoder.getClause(secRule);
42         this.contract = new ContractBuilder().setId(SecRuleEntityDecoder.getContractId(secRule))
43             .setSubject(ImmutableList.of(subject))
44             .setClause(ImmutableList.of(clause))
45             .setDescription(contractDescription)
46             .build();
47     }
48
49     public SingleClassifierRule getSingleClassifierRule() {
50         return singleClassifierRule;
51     }
52
53     public Rule getRule() {
54         return rule;
55     }
56
57     public Subject getSubject() {
58         return subject;
59     }
60
61     public Clause getClause() {
62         return clause;
63     }
64
65     public Contract getContract() {
66         return contract;
67     }
68
69 }