bcacccf869082716a255cb2be8e1c3b41e75f172
[netvirt.git] / aclservice / impl / src / test / java / org / opendaylight / netvirt / aclservice / tests / IdentifiedAceBuilder.java
1 /*
2  * Copyright (c) 2016 Red Hat, 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 package org.opendaylight.netvirt.aclservice.tests;
9
10 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
11
12 import java.util.Optional;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.netvirt.aclservice.tests.infra.DataTreeIdentifierDataObjectPairBuilder;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.AccessLists;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.Ipv4Acl;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.Acl;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.AclKey;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.AccessListEntries;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.Ace;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.AceBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.AceKey;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.ActionsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.Matches;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.ace.actions.packet.handling.PermitBuilder;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.aclservice.rev160608.DirectionBase;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.aclservice.rev160608.SecurityRuleAttr;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.aclservice.rev160608.SecurityRuleAttrBuilder;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.opendaylight.yangtools.yang.common.Empty;
32
33 /**
34  * This class is not ThreadSafe.
35  */
36 public class IdentifiedAceBuilder implements DataTreeIdentifierDataObjectPairBuilder<Ace> {
37
38     private String sgUuid;
39     private String ruleName;
40     private Matches matches;
41     private Class<? extends DirectionBase> direction;
42     private Optional<Uuid> optRemoteGroupId = Optional.empty();
43
44     @Override
45     public LogicalDatastoreType type() {
46         return CONFIGURATION;
47     }
48
49     @Override
50     public InstanceIdentifier<Ace> identifier() {
51         return InstanceIdentifier
52                 .builder(AccessLists.class)
53                 .child(Acl.class, new AclKey(sgUuid, Ipv4Acl.class))
54                 .child(AccessListEntries.class)
55                 .child(Ace.class, new AceKey(ruleName))
56                 .build();
57     }
58
59     @Override
60     public Ace dataObject() {
61         return new AceBuilder()
62             .withKey(new AceKey(ruleName))
63             .setRuleName(ruleName)
64             .setMatches(matches)
65             .setActions(new ActionsBuilder()
66                 .setPacketHandling(new PermitBuilder()
67                     .setPermit(Empty.getInstance()).build()
68                 ).build()
69             )
70             .addAugmentation(SecurityRuleAttr.class, new SecurityRuleAttrBuilder()
71                 .setDirection(direction)
72                 .setRemoteGroupId(optRemoteGroupId.orElse(null)).build()
73             ).build();
74     }
75
76     // TODO use Immutables.org to generate below?
77
78     public IdentifiedAceBuilder sgUuid(String newSgUuid) {
79         this.sgUuid = newSgUuid;
80         return this;
81     }
82
83     public IdentifiedAceBuilder newRuleName(String newRuleName) {
84         this.ruleName = newRuleName;
85         return this;
86     }
87
88     public IdentifiedAceBuilder newMatches(Matches newMatches) {
89         this.matches = newMatches;
90         return this;
91     }
92
93     public IdentifiedAceBuilder newDirection(Class<? extends DirectionBase> newDirection) {
94         this.direction = newDirection;
95         return this;
96     }
97
98     public IdentifiedAceBuilder newRemoteGroupId(Uuid newRemoteGroupId) {
99         this.optRemoteGroupId = Optional.of(newRemoteGroupId);
100         return this;
101     }
102
103 }