Links.java
package no.nav.data.team.shared.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import no.nav.data.common.storage.domain.DomainObject;
import no.nav.data.team.cluster.domain.Cluster;
import no.nav.data.team.notify.UrlGenerator;
import no.nav.data.team.po.domain.ProductArea;
import no.nav.data.team.resource.domain.Resource;
import no.nav.data.team.team.domain.Team;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"ui", "slackChannels"})
public class Links {
private String ui;
@JsonInclude(Include.NON_NULL)
private List<NamedLink> slackChannels;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"name", "url"})
public static class NamedLink {
private String name;
private String url;
}
public Links(String ui) {
this.ui = ui;
}
public static Links getFor(DomainObject domainObject) {
UrlGenerator urlGenerator = UrlGenerator.instance();
if (domainObject instanceof Resource r) {
return Links.builder().ui(urlGenerator.resourceUrl(r.getNavIdent())).build();
}
return Links.builder()
.ui(urlGenerator.urlFor(domainObject.getClass(), domainObject.getId()))
.slackChannels(slackUrls(domainObject))
.build();
}
private static List<NamedLink> slackUrls(DomainObject domainObject) {
String slack = null;
if (domainObject instanceof Team t) {
slack = t.getSlackChannel();
} else if (domainObject instanceof ProductArea pa) {
slack = pa.getSlackChannel();
} else if (domainObject instanceof Cluster c) {
slack = c.getSlackChannel();
}
if (slack == null) {
return null;
}
return UrlGenerator.instance().slackUrls(slack);
}
}