package ru.kirillius.pf.sdn.flow; import lombok.RequiredArgsConstructor; import ru.kirillius.pf.sdn.api.Networking.NetworkScope; import ru.kirillius.pf.sdn.api.flow.CallContext; import ru.kirillius.pf.sdn.api.flow.FlowFunction; import ru.kirillius.pf.sdn.api.properties.PropertyDescriptor; import ru.kirillius.pf.sdn.api.properties.PropertyType; import ru.kirillius.pf.sdn.service.AutonomousSystemCacheService; import java.util.Collections; import java.util.HashMap; import java.util.Map; @RequiredArgsConstructor public class AutoResolveASN implements FlowFunction { private final AutonomousSystemCacheService autonomousSystemCacheService; private final static String CLEAR = "clear"; private final static Map properties; static { properties = new HashMap<>(); properties.put(CLEAR, PropertyDescriptor.builder() .type(PropertyType.BOOLEAN) .required(true) .defaultValue(true) .array(false) .build() ); } @Override public void apply(CallContext context) { var output = new NetworkScope(); output.add(context.getSource()); var properties = context.getProperties(); if (properties.containsKey(CLEAR) && properties.get(CLEAR).equals(Boolean.TRUE.toString())) { output.getASN().clear(); } context.getSource().getASN().forEach(asn -> output.getSubnets().addAll(autonomousSystemCacheService.load(asn))); context.setOutput(output); } @Override public Map getProperties() { return Collections.unmodifiableMap(properties); } @Override public boolean hasInputs() { return true; } @Override public boolean hasOutputs() { return true; } }