2 * Copyright (c) 2016 Red Hat, 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
8 package org.opendaylight.netvirt.aclservice.tests;
10 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
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;
34 public class IdentifiedAceBuilder implements DataTreeIdentifierDataObjectPairBuilder<Ace> {
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();
43 public LogicalDatastoreType type() {
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))
58 public Ace dataObject() {
59 return new AceBuilder()
60 .setKey(new AceKey(ruleName))
61 .setRuleName(ruleName)
63 .setActions(new ActionsBuilder()
64 .setPacketHandling(new PermitBuilder()
65 .setPermit(true).build()
68 .addAugmentation(SecurityRuleAttr.class, new SecurityRuleAttrBuilder()
69 .setDirection(direction)
70 .setRemoteGroupId(optRemoteGroupId.orElse(null)).build()
74 // TODO use Immutables.org to generate below?
76 public IdentifiedAceBuilder sgUuid(String newSgUuid) {
77 this.sgUuid = newSgUuid;
81 public IdentifiedAceBuilder newRuleName(String newRuleName) {
82 this.ruleName = newRuleName;
86 public IdentifiedAceBuilder newMatches(Matches newMatches) {
87 this.matches = newMatches;
91 public IdentifiedAceBuilder newDirection(Class<? extends DirectionBase> newDirection) {
92 this.direction = newDirection;
96 public IdentifiedAceBuilder newRemoteGroupId(Uuid newRemoteGroupId) {
97 this.optRemoteGroupId = Optional.of(newRemoteGroupId);