package com.dbg.cloud.acheron.pluginconfig;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import java.util.Date;
import java.util.Set;
import java.util.UUID;
public interface PluginConfig {
UUID getId();
String getName();
String getRouteId();
Set<String> getHttpMethods();
UUID getConsumerId();
String getConfig();
boolean isEnabled();
Date getCreatedAt();
@AllArgsConstructor
@Getter
@ToString
final class Default implements PluginConfig {
private final UUID id;
private final String name;
private final String routeId;
private final Set<String> httpMethods;
private final UUID consumerId;
private final String config;
private final boolean isEnabled;
private final Date createdAt;
}
@AllArgsConstructor
@Getter
@ToString
final class ForCreation implements PluginConfig {
private final String name;
private final String routeId;
private final Set<String> httpMethods;
private final UUID consumerId;
private final String config;
private final boolean isEnabled;
// already set
private final UUID id = null;
private final Date createdAt = null;
}
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@ToString
final class Merge implements PluginConfig {
private final UUID id;
private final String name;
private final String routeId;
private final Set<String> httpMethods;
private final UUID consumerId;
private final String config;
private final boolean isEnabled;
private final Date createdAt;
public Merge(final PluginConfig baseConfig, final PluginConfig mergeConfig) {
this(
baseConfig.getId(),
mergeConfig.getName() != null ? mergeConfig.getName() : baseConfig.getName(),
mergeConfig.getRouteId() != null ? mergeConfig.getRouteId() : baseConfig.getRouteId(),
mergeConfig.getHttpMethods() != null ? mergeConfig.getHttpMethods() : baseConfig.getHttpMethods(),
mergeConfig.getConsumerId() != null ? mergeConfig.getConsumerId() : baseConfig.getConsumerId(),
mergeConfig.getConfig() != null ? mergeConfig.getConfig() : baseConfig.getConfig(),
mergeConfig.isEnabled(),
mergeConfig.getCreatedAt() != null ? mergeConfig.getCreatedAt() : baseConfig.getCreatedAt());
}
}
@AllArgsConstructor
@Getter
@ToString
final class WithoutCreatedDate implements PluginConfig {
private final UUID id;
private final String name;
private final String routeId;
private final Set<String> httpMethods;
private final UUID consumerId;
private final String config;
private final boolean isEnabled;
private final Date createdAt = null;
public WithoutCreatedDate(final PluginConfig patch) {
this(
patch.getId(),
patch.getName(),
patch.getRouteId(),
patch.getHttpMethods(),
patch.getConsumerId(),
patch.getConfig(),
patch.isEnabled()
);
}
}
}