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