UrlGenerator.java
package no.nav.data.team.notify;
import lombok.Getter;
import no.nav.data.common.auditing.domain.AuditVersion;
import no.nav.data.common.security.SecurityProperties;
import no.nav.data.common.storage.domain.DomainObject;
import no.nav.data.common.storage.domain.TypeRegistration;
import no.nav.data.team.po.domain.ProductArea;
import no.nav.data.team.shared.dto.Links.NamedLink;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Component
public class UrlGenerator {
private static final String teamSlackId = "T5LNAMWNA";
private static final String slackUrl = "https://slack.com/app_redirect?team=%s&channel=%s";
@Getter
private final String baseUrl;
@Getter
private final boolean dev;
private static UrlGenerator INSTANCE;
public UrlGenerator(SecurityProperties securityProperties) {
baseUrl = securityProperties.findBaseUrl();
dev = securityProperties.isDev();
INSTANCE = this;
}
public String urlFor(Class<? extends DomainObject> type, UUID id) {
return baseUrl + "/" + urlPathForTable(TypeRegistration.typeOf(type)) + "/" + id;
}
public String urlFor(AuditVersion auditVersion) {
return baseUrl + "/" + urlPathForTable(auditVersion.getTable()) + "/" + auditVersion.getTableId();
}
public String resourceUrl(String ident) {
return baseUrl + "/resource/" + ident;
}
public List<NamedLink> slackUrls(String slack) {
return Arrays.stream(slack.replaceAll("[#,]", "")
.split(" "))
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(s -> new NamedLink("#" + s, slackUrl.formatted(teamSlackId, s)))
.collect(Collectors.toList());
}
private String urlPathForTable(String table) {
if (table.equals(TypeRegistration.typeOf(ProductArea.class))) {
return "area";
}
return table.toLowerCase();
}
public static UrlGenerator instance() {
return INSTANCE;
}
}