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.mdsal.common.api.LogicalDatastoreType.CONFIGURATION;
12 import java.util.Optional;
13 import org.opendaylight.mdsal.common.api.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;
34 * This class is not ThreadSafe.
36 public class IdentifiedAceBuilder implements DataTreeIdentifierDataObjectPairBuilder<Ace> {
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();
45 public LogicalDatastoreType type() {
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))
60 public Ace dataObject() {
61 return new AceBuilder()
62 .withKey(new AceKey(ruleName))
63 .setRuleName(ruleName)
65 .setActions(new ActionsBuilder()
66 .setPacketHandling(new PermitBuilder()
67 .setPermit(Empty.getInstance()).build()
70 .addAugmentation(SecurityRuleAttr.class, new SecurityRuleAttrBuilder()
71 .setDirection(direction)
72 .setRemoteGroupId(optRemoteGroupId.orElse(null)).build()
76 // TODO use Immutables.org to generate below?
78 public IdentifiedAceBuilder sgUuid(String newSgUuid) {
79 this.sgUuid = newSgUuid;
83 public IdentifiedAceBuilder newRuleName(String newRuleName) {
84 this.ruleName = newRuleName;
88 public IdentifiedAceBuilder newMatches(Matches newMatches) {
89 this.matches = newMatches;
93 public IdentifiedAceBuilder newDirection(Class<? extends DirectionBase> newDirection) {
94 this.direction = newDirection;
98 public IdentifiedAceBuilder newRemoteGroupId(Uuid newRemoteGroupId) {
99 this.optRemoteGroupId = Optional.of(newRemoteGroupId);