pf-sdn/src/main/java/ru/kirillius/pf/sdn/flow/AutoResolveASN.java

63 lines
1.9 KiB
Java

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<String, PropertyDescriptor> 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<String, PropertyDescriptor> getProperties() {
return Collections.unmodifiableMap(properties);
}
@Override
public boolean hasInputs() {
return true;
}
@Override
public boolean hasOutputs() {
return true;
}
}