Commit 91b8c2c6 authored by Fotis Soldatos's avatar Fotis Soldatos
Browse files

refactor(automation): implement builder pattern for EndPoint

parent 0315e6b7
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import context.ContextOuterClass.ConfigRule_Custom;
import context.ContextOuterClass.ContextId;
import context.ContextOuterClass.DeviceId;
import context.ContextOuterClass.DeviceOperationalStatusEnum;
import context.ContextOuterClass.Location.LocationCase;
import context.ContextOuterClass.Uuid;
import eu.teraflow.automation.acl.AclAction;
import eu.teraflow.automation.acl.AclEntry;
@@ -833,12 +834,14 @@ public class Serializer {
        final var serializedEndPointId = serialize(endPointId);
        final var serializedKpiSampleTypes =
                kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
        if (endPointLocation != null) {
            final var serializedEndPointLocation = serialize(endPointLocation);
            builder.setEndpointLocation(serializedEndPointLocation);
        }

        builder.setEndpointId(serializedEndPointId);
        builder.setEndpointType(endPointType);
        builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
        builder.setEndpointLocation(serializedEndPointLocation);

        return builder.build();
    }
@@ -852,9 +855,15 @@ public class Serializer {
        final var endPointId = deserialize(serializedEndPointId);
        final var kpiSampleTypes =
                serializedKpiSampleTypes.stream().map(this::deserialize).collect(Collectors.toList());

        if (serializedEndPointLocation.getLocationCase() != LocationCase.LOCATION_NOT_SET) {
            final var endPointLocation = deserialize(serializedEndPointLocation);
            return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes)
                    .location(endPointLocation)
                    .build();
        }

        return new EndPoint(endPointId, endPointType, kpiSampleTypes, endPointLocation);
        return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
    }

    public ContextOuterClass.Device serialize(Device device) {
+7 −6
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package eu.teraflow.automation.acl;

import eu.teraflow.automation.common.Util;
import java.util.List;
import java.util.stream.Collectors;

public class AclRuleSet {

@@ -64,10 +64,11 @@ public class AclRuleSet {
    public String toString() {
        return String.format(
                "%s:{name:\"%s\", type:\"%s\", description:\"%s\", userId:\"%s\", [%s]}",
                getClass().getSimpleName(), name, type.toString(), description, userId, toString(entries));
    }

    private static <T> String toString(List<T> list) {
        return list.stream().map(T::toString).collect(Collectors.joining(", "));
                getClass().getSimpleName(),
                name,
                type.toString(),
                description,
                userId,
                Util.toString(entries));
    }
}
+3 −7
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package eu.teraflow.automation.context.model;

import eu.teraflow.automation.common.Util;
import java.util.List;
import java.util.stream.Collectors;

public class Device {

@@ -102,11 +102,7 @@ public class Device {
                deviceType,
                deviceConfig,
                deviceOperationalStatus.toString(),
                toString(deviceDrivers),
                toString(endPoints));
    }

    private static <T> String toString(List<T> list) {
        return list.stream().map(T::toString).collect(Collectors.joining(", "));
                Util.toString(deviceDrivers),
                Util.toString(endPoints));
    }
}
+48 −13
Original line number Diff line number Diff line
@@ -16,9 +16,9 @@

package eu.teraflow.automation.context.model;

import eu.teraflow.automation.common.Util;
import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
import java.util.List;
import java.util.stream.Collectors;

public class EndPoint {
    private final EndPointId endPointId;
@@ -26,15 +26,11 @@ public class EndPoint {
    private final List<KpiSampleType> kpiSampleTypes;
    private final Location endPointLocation;

    public EndPoint(
            EndPointId endPointId,
            String endPointType,
            List<KpiSampleType> kpiSampleTypes,
            Location endPointLocation) {
        this.endPointId = endPointId;
        this.endPointType = endPointType;
        this.kpiSampleTypes = kpiSampleTypes;
        this.endPointLocation = endPointLocation;
    EndPoint(EndPointBuilder builder) {
        this.endPointId = builder.endPointId;
        this.endPointType = builder.endPointType;
        this.kpiSampleTypes = builder.kpiSampleTypes;
        this.endPointLocation = builder.endPointLocation;
    }

    public EndPointId getEndPointId() {
@@ -60,11 +56,50 @@ public class EndPoint {
                getClass().getSimpleName(),
                endPointId,
                endPointType,
                toString(kpiSampleTypes),
                Util.toString(kpiSampleTypes),
                endPointLocation);
    }

    private static <T> String toString(List<T> list) {
        return list.stream().map(T::toString).collect(Collectors.joining(", "));
    public static class EndPointBuilder {
        private final EndPointId endPointId;
        private final String endPointType;
        private final List<KpiSampleType> kpiSampleTypes;
        private Location endPointLocation;

        public EndPointBuilder(
                EndPointId endPointId, String endPointType, List<KpiSampleType> kpiSampleTypes) {
            this.endPointId = endPointId;
            this.endPointType = endPointType;
            this.kpiSampleTypes = kpiSampleTypes;
        }

        public EndPointBuilder location(Location endPointLocation) {
            this.endPointLocation = endPointLocation;
            return this;
        }

        public EndPoint build() {
            EndPoint endPoint = new EndPoint(this);
            validateEndPointObject(endPoint);
            return endPoint;
        }

        private void validateEndPointObject(EndPoint endPoint) {
            final var validatedEndPointId = endPoint.getEndPointId();
            final var validatedEndPointType = endPoint.getEndPointType();
            final var validatedKpiSampleTypes = endPoint.getKpiSampleTypes();

            if (validatedEndPointId == null) {
                throw new IllegalStateException("EndPoint ID cannot be null");
            }

            if (validatedEndPointType == null) {
                throw new IllegalStateException("EndPoint type cannot be null");
            }

            if (validatedKpiSampleTypes == null) {
                throw new IllegalStateException("Kpi sample types cannot be null");
            }
        }
    }
}
+17 −5
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import eu.teraflow.automation.context.model.Device;
import eu.teraflow.automation.context.model.DeviceConfig;
import eu.teraflow.automation.context.model.DeviceDriverEnum;
import eu.teraflow.automation.context.model.DeviceOperationalStatus;
import eu.teraflow.automation.context.model.EndPoint;
import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
import eu.teraflow.automation.context.model.EndPointId;
import eu.teraflow.automation.context.model.Location;
import eu.teraflow.automation.context.model.LocationTypeRegion;
@@ -109,7 +109,10 @@ class AutomationFunctionalServiceTest {
                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
        final var locationTypeRegionA = new LocationTypeRegion("ATH");
        final var locationA = new Location(locationTypeRegionA);
        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
        final var endPointA =
                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
                        .location(locationA)
                        .build();

        final var topologyIdB = new TopologyId("contextIdB", "idB");
        final var deviceIdB = "deviceIdB";
@@ -120,7 +123,10 @@ class AutomationFunctionalServiceTest {
                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
        final var locationTypeRegionB = new LocationTypeRegion("ATH");
        final var locationB = new Location(locationTypeRegionB);
        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
        final var endPointB =
                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
                        .location(locationB)
                        .build();

        final var endPoints = List.of(endPointA, endPointB);

@@ -217,7 +223,10 @@ class AutomationFunctionalServiceTest {
                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
        final var locationTypeRegionA = new LocationTypeRegion("ATH");
        final var locationA = new Location(locationTypeRegionA);
        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
        final var endPointA =
                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
                        .location(locationA)
                        .build();

        final var topologyIdB = new TopologyId("contextIdB", "idB");
        final var deviceIdB = "deviceIdB";
@@ -228,7 +237,10 @@ class AutomationFunctionalServiceTest {
                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
        final var locationTypeRegionB = new LocationTypeRegion("ATH");
        final var locationB = new Location(locationTypeRegionB);
        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
        final var endPointB =
                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
                        .location(locationB)
                        .build();

        final var endPoints = List.of(endPointA, endPointB);

Loading