Bug 8228 - metadata service fix made cleaner
[groupbasedpolicy.git] / neutron-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / mapper / infrastructure / NetworkService.java
index 6a33eb3709377885d4c43d2ee78f7a55e85db3b9..5dad3f0595a70a65e5390efead1d177c038738bc 100755 (executable)
@@ -8,10 +8,8 @@
 
 package org.opendaylight.groupbasedpolicy.neutron.mapper.infrastructure;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 import javax.annotation.Nullable;
@@ -22,56 +20,33 @@ import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
 import org.opendaylight.groupbasedpolicy.util.IidFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.EndpointIdentificationConstraintsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.L3EndpointIdentificationConstraints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.L3EndpointIdentificationConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchers;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
 
 import com.google.common.collect.ImmutableList;
 
-public class NetworkService {
+public class NetworkService extends ServiceUtil {
 
     /**
      * Unit tests {@link NetworkServiceTest}
@@ -201,25 +176,8 @@ public class NetworkService {
         ProviderNamedSelector dhcpProviderSelector = createProviderSelector(DHCP_CONTRACT);
         ProviderNamedSelector dnsProviderSelector = createProviderSelector(DNS_CONTRACT);
         ProviderNamedSelector mgmtProviderSelector = createProviderSelector(MGMT_CONTRACT);
-        return new EndpointGroupBuilder().setId(EPG_ID)
-            .setName(NETWORK_SERVICE_EPG_NAME)
+        return createEpgBuilder(EPG_ID, NETWORK_SERVICE_EPG_NAME, NETWORK_SERVICE_EPG_DESC)
             .setProviderNamedSelector(ImmutableList.of(dhcpProviderSelector, dnsProviderSelector, mgmtProviderSelector))
-            .setIntraGroupPolicy(IntraGroupPolicy.RequireContract)
-            .setDescription(NETWORK_SERVICE_EPG_DESC)
-            .build();
-    }
-
-    private static ProviderNamedSelector createProviderSelector(Contract contract) {
-        SelectorName selectorName = new SelectorName(contract.getSubject().get(0).getName().getValue());
-        return new ProviderNamedSelectorBuilder().setName(selectorName)
-            .setContract(ImmutableList.of(contract.getId()))
-            .build();
-    }
-
-    private static ConsumerNamedSelector createConsumerSelector(Contract contract) {
-        SelectorName selectorName = new SelectorName(contract.getSubject().get(0).getName().getValue());
-        return new ConsumerNamedSelectorBuilder().setName(selectorName)
-            .setContract(ImmutableList.of(contract.getId()))
             .build();
     }
 
@@ -233,10 +191,7 @@ public class NetworkService {
             .setRule(ImmutableList.of(clientServerIpv4Rule, serverClientIpv4Rule, clientServerIpv6Rule,
                     serverClientIpv6Rule))
             .build();
-        return new ContractBuilder().setId(DHCP_CONTRACT_ID)
-            .setSubject(ImmutableList.of(subject))
-            .setDescription(DHCP_CONTRACT_DESC)
-            .build();
+        return createContract(DHCP_CONTRACT_ID, ImmutableList.of(subject), DHCP_CONTRACT_DESC);
     }
 
     private static Contract createContractDns() {
@@ -254,10 +209,7 @@ public class NetworkService {
                     serverClientUdpIpv6Rule, clientServerTcpIpv4Rule, serverClientTcpIpv4Rule, clientServerTcpIpv6Rule,
                     serverClientTcpIpv6Rule))
             .build();
-        return new ContractBuilder().setId(DNS_CONTRACT_ID)
-            .setSubject(ImmutableList.of(subject))
-            .setDescription(DNS_CONTRACT_DESC)
-            .build();
+        return createContract(DNS_CONTRACT_ID, ImmutableList.of(subject), DNS_CONTRACT_DESC);
     }
 
     private static Contract createContractMgmt() {
@@ -276,23 +228,7 @@ public class NetworkService {
                     clientServerSshIpv6Rule, clientServerIcmpIpv4Rule, clientServerIcmpIpv6Rule,
                     serverClientIcmpIpv4Rule, serverClientIcmpIpv6Rule))
             .build();
-        return new ContractBuilder().setId(MGMT_CONTRACT_ID)
-            .setSubject(ImmutableList.of(subject))
-            .setDescription(MGMT_CONTRACT_DESC)
-            .build();
-    }
-
-    private static Rule createRuleAllow(ClassifierName classifierName, Direction direction) {
-        ClassifierName name =
-                new ClassifierName(direction.name() + MappingUtils.NAME_DOUBLE_DELIMETER + classifierName.getValue());
-        ClassifierRef classifierRef = new ClassifierRefBuilder().setName(name)
-            .setInstanceName(classifierName)
-            .setDirection(direction)
-            .build();
-        return new RuleBuilder().setName(new RuleName(name))
-            .setActionRef(ImmutableList.<ActionRef>of(MappingUtils.ACTION_REF_ALLOW))
-            .setClassifierRef(ImmutableList.of(classifierRef))
-            .build();
+        return createContract(MGMT_CONTRACT_ID, ImmutableList.of(subject), MGMT_CONTRACT_DESC);
     }
 
     /**
@@ -340,39 +276,6 @@ public class NetworkService {
                 clause, true);
     }
 
-    private static Clause createClauseWithConsProvEic(@Nullable IpPrefix ipPrefix, SubjectName subjectName) {
-        ConsumerMatchers consumerMatchers = null;
-        ProviderMatchers providerMatchers = null;
-        StringBuilder clauseName = new StringBuilder();
-        clauseName.append(subjectName.getValue());
-        if (ipPrefix != null) {
-            clauseName.append(MappingUtils.NAME_DOUBLE_DELIMETER).append(Utils.getStringIpPrefix(ipPrefix));
-            consumerMatchers =
-                    new ConsumerMatchersBuilder()
-                        .setEndpointIdentificationConstraints(new EndpointIdentificationConstraintsBuilder()
-                            .setL3EndpointIdentificationConstraints(new L3EndpointIdentificationConstraintsBuilder()
-                                .setPrefixConstraint(
-                                        ImmutableList.of(new PrefixConstraintBuilder().setIpPrefix(ipPrefix).build()))
-                                .build())
-                            .build())
-                        .build();
-            providerMatchers =
-                    new ProviderMatchersBuilder()
-                        .setEndpointIdentificationConstraints(new EndpointIdentificationConstraintsBuilder()
-                            .setL3EndpointIdentificationConstraints(new L3EndpointIdentificationConstraintsBuilder()
-                                .setPrefixConstraint(
-                                        ImmutableList.of(new PrefixConstraintBuilder().setIpPrefix(ipPrefix).build()))
-                                .build())
-                            .build())
-                        .build();
-        }
-        return new ClauseBuilder().setName(new ClauseName(clauseName.toString()))
-            .setSubjectRefs(ImmutableList.of(subjectName))
-            .setConsumerMatchers(consumerMatchers)
-            .setProviderMatchers(providerMatchers)
-            .build();
-    }
-
     /**
      * Puts network service entities (classifier-instances, {@link #DHCP_CONTRACT},
      * {@link #DNS_CONTRACT}, {@link #MGMT_CONTRACT} and {@link #EPG}) to
@@ -424,176 +327,127 @@ public class NetworkService {
         cis.add(createSshTcpIpv6ClientServer());
         cis.add(createIcmpIpv4());
         cis.add(createIcmpIpv6());
-
         return cis;
     }
 
     // ###################### DHCP
     private static ClassifierInstance createDhcpIpv4ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DHCP_IPV4_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
-                    DHCP_IPV4_CLIENT_PORT, DHCP_IPV4_SERVER_PORT))
-            .build();
+        return createClassifInstance(DHCP_IPV4_CLIENT_SERVER_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DHCP_IPV4_CLIENT_PORT, DHCP_IPV4_SERVER_PORT));
     }
 
     private static ClassifierInstance createDhcpIpv4ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DHCP_IPV4_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
-                    DHCP_IPV4_SERVER_PORT, DHCP_IPV4_CLIENT_PORT))
-            .build();
+        return createClassifInstance(DHCP_IPV4_SERVER_CLIENT_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DHCP_IPV4_SERVER_PORT, DHCP_IPV4_CLIENT_PORT));
     }
 
     private static ClassifierInstance createDhcpIpv6ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DHCP_IPV6_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
-                    DHCP_IPV6_CLIENT_PORT, DHCP_IPV6_SERVER_PORT))
-            .build();
+        return createClassifInstance(DHCP_IPV6_CLIENT_SERVER_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DHCP_IPV6_CLIENT_PORT, DHCP_IPV6_SERVER_PORT));
     }
 
     private static ClassifierInstance createDhcpIpv6ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DHCP_IPV6_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
-                    DHCP_IPV6_SERVER_PORT, DHCP_IPV6_CLIENT_PORT))
-            .build();
+        return createClassifInstance(DHCP_IPV6_SERVER_CLIENT_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DHCP_IPV6_SERVER_PORT, DHCP_IPV6_CLIENT_PORT));
     }
 
     // ###################### DNS UDP
     private static ClassifierInstance createDnsUdpIpv4ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DNS_UDP_IPV4_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE, null, DNS_SERVER_PORT))
-            .build();
+        return createClassifInstance(DNS_UDP_IPV4_CLIENT_SERVER_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE, null,
+                        DNS_SERVER_PORT));
     }
 
     private static ClassifierInstance createDnsUdpIpv4ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DNS_UDP_IPV4_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE, DNS_SERVER_PORT, null))
-            .build();
+        return createClassifInstance(DNS_UDP_IPV4_SERVER_CLIENT_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DNS_SERVER_PORT, null));
     }
 
     private static ClassifierInstance createDnsUdpIpv6ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DNS_UDP_IPV6_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE, null, DNS_SERVER_PORT))
-            .build();
+        return createClassifInstance(DNS_UDP_IPV6_CLIENT_SERVER_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE, null,
+                        DNS_SERVER_PORT));
     }
 
     private static ClassifierInstance createDnsUdpIpv6ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DNS_UDP_IPV6_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE, DNS_SERVER_PORT, null))
-            .build();
+        return createClassifInstance(DNS_UDP_IPV6_SERVER_CLIENT_NAME, L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.UDP_VALUE,
+                        DNS_SERVER_PORT, null));
     }
 
     // ###################### DNS TCP
     private static ClassifierInstance createDnsTcpIpv4ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DNS_TCP_IPV4_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.TCP_VALUE, null, DNS_SERVER_PORT))
-            .build();
+        return createClassifInstance(DNS_TCP_IPV4_CLIENT_SERVER_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, null, DNS_SERVER_PORT));
     }
 
     private static ClassifierInstance createDnsTcpIpv4ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DNS_TCP_IPV4_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.TCP_VALUE, DNS_SERVER_PORT, null))
-            .build();
+        return createClassifInstance(DNS_TCP_IPV4_SERVER_CLIENT_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, DNS_SERVER_PORT, null));
     }
 
     private static ClassifierInstance createDnsTcpIpv6ClientServer() {
-        return new ClassifierInstanceBuilder().setName(DNS_TCP_IPV6_CLIENT_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.TCP_VALUE, null, DNS_SERVER_PORT))
-            .build();
+        return createClassifInstance(DNS_TCP_IPV6_CLIENT_SERVER_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, null, DNS_SERVER_PORT));
     }
 
     private static ClassifierInstance createDnsTcpIpv6ServerClient() {
-        return new ClassifierInstanceBuilder().setName(DNS_TCP_IPV6_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.TCP_VALUE, DNS_SERVER_PORT, null))
-            .build();
+        return createClassifInstance(DNS_TCP_IPV6_SERVER_CLIENT_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, DNS_SERVER_PORT, null));
     }
 
     // ###################### SSH TCP
     private static ClassifierInstance createSshTcpIpv4ClientServer() {
-        return new ClassifierInstanceBuilder().setName(SSH_IPV4_CLIENT_TO_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.TCP_VALUE, SSH_TCP_PORT, null))
-            .build();
+        return createClassifInstance(SSH_IPV4_CLIENT_TO_SERVER_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, SSH_TCP_PORT, null));
     }
 
     private static ClassifierInstance createSshTcpIpv4ServerClient() {
-        return new ClassifierInstanceBuilder().setName(SSH_IPV4_SERVER_TO_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.TCP_VALUE, null, SSH_TCP_PORT))
-            .build();
+        return createClassifInstance(SSH_IPV4_SERVER_TO_CLIENT_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv4_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, null, SSH_TCP_PORT));
     }
 
     private static ClassifierInstance createSshTcpIpv6ClientServer() {
-        return new ClassifierInstanceBuilder().setName(SSH_IPV6_CLIENT_TO_SERVER_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.TCP_VALUE, SSH_TCP_PORT, null))
-            .build();
+        return createClassifInstance(SSH_IPV6_CLIENT_TO_SERVER_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, SSH_TCP_PORT, null));
     }
 
     private static ClassifierInstance createSshTcpIpv6ServerClient() {
-        return new ClassifierInstanceBuilder().setName(SSH_IPV6_SERVER_TO_CLIENT_NAME)
-            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(
-                    createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.TCP_VALUE, null, SSH_TCP_PORT))
-            .build();
+        return createClassifInstance(SSH_IPV6_SERVER_TO_CLIENT_NAME,
+                L4ClassifierDefinition.DEFINITION.getId(),
+                createParams(EtherTypeClassifierDefinition.IPv6_VALUE,
+                        IpProtoClassifierDefinition.TCP_VALUE, null, SSH_TCP_PORT));
     }
 
     // ###################### ICMP
     private static ClassifierInstance createIcmpIpv4() {
-        return new ClassifierInstanceBuilder().setName(ICMP_IPV4_BETWEEN_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(IpProtoClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.ICMP_VALUE, null, null))
-            .build();
+        return createClassifInstance(ICMP_IPV4_BETWEEN_SERVER_CLIENT_NAME,
+                IpProtoClassifierDefinition.DEFINITION.getId(), createParams(
+                        EtherTypeClassifierDefinition.IPv4_VALUE, IpProtoClassifierDefinition.ICMP_VALUE, null, null));
     }
 
     private static ClassifierInstance createIcmpIpv6() {
-        return new ClassifierInstanceBuilder().setName(ICMP_IPV6_BETWEEN_SERVER_CLIENT_NAME)
-            .setClassifierDefinitionId(IpProtoClassifierDefinition.DEFINITION.getId())
-            .setParameterValue(createParams(EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.ICMP_VALUE, null, null))
-            .build();
-    }
-
-    private static List<ParameterValue> createParams(long etherType, long proto, @Nullable Long srcPort,
-            @Nullable Long dstPort) {
-        List<ParameterValue> params = new ArrayList<>();
-        if (srcPort != null) {
-            params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM))
-                .setIntValue(srcPort)
-                .build());
-        }
-        if (dstPort != null) {
-            params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM))
-                .setIntValue(dstPort)
-                .build());
-        }
-        params.add(new ParameterValueBuilder().setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM))
-            .setIntValue(proto)
-            .build());
-        params.add(new ParameterValueBuilder().setName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM))
-            .setIntValue(etherType)
-            .build());
-        return params;
+        return createClassifInstance((ICMP_IPV6_BETWEEN_SERVER_CLIENT_NAME),
+                IpProtoClassifierDefinition.DEFINITION.getId(), createParams(
+                        EtherTypeClassifierDefinition.IPv6_VALUE, IpProtoClassifierDefinition.ICMP_VALUE, null, null));
     }
 }