ComponentDtoMapper.java
package jasper.component.dto;
import com.fasterxml.jackson.databind.ObjectMapper;
import jasper.domain.Ext;
import jasper.domain.Plugin;
import jasper.domain.Ref;
import jasper.domain.Template;
import jasper.domain.User;
import jasper.service.dto.ExtDto;
import jasper.service.dto.PluginDto;
import jasper.service.dto.RefDto;
import jasper.service.dto.TemplateDto;
import jasper.service.dto.UserDto;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Mapper(componentModel = "spring")
public abstract class ComponentDtoMapper {
@Autowired
ObjectMapper objectMapper;
@Mapping(target = "metadata.userUrls", ignore = true)
public abstract RefDto domainToDto(Ref ref);
public abstract UserDto domainToDto(User ref);
public abstract ExtDto domainToDto(Ext ref);
public abstract PluginDto domainToDto(Plugin ref);
public abstract TemplateDto domainToDto(Template ref);
public int countMetadata(List<String> responses) {
if (responses == null) return 0;
return responses.size();
}
public abstract RefUpdateDto dtoToUpdateDto(RefDto ref);
@AfterMapping
protected void publicTags(@MappingTarget RefUpdateDto ref) {
if (ref.getTags() == null) return;
var filtered = new ArrayList<>(ref.getTags().stream().filter(t -> !t.startsWith("_")).toList());
if (ref.getPlugins() != null && filtered.size() < ref.getTags().size()) {
var filteredPlugins = objectMapper.createObjectNode();
ref.getPlugins().fieldNames().forEachRemaining(field -> {
if (filtered.contains(field)) filteredPlugins.set(field, ref.getPlugins().get(field));
});
if (filteredPlugins.isEmpty()) {
ref.setPlugins(null);
} else {
ref.setPlugins(filteredPlugins);
}
}
ref.setTags(filtered);
}
@AfterMapping
protected void publicMetadata(@MappingTarget MetadataUpdateDto metadata) {
if (metadata.getPlugins() == null) return;
var filteredPlugins = new HashMap<String, Integer>();
metadata.getPlugins().entrySet().iterator().forEachRemaining(e -> {
if (!e.getKey().startsWith("_")) {
filteredPlugins.put(e.getKey(), e.getValue());
}
});
if (filteredPlugins.isEmpty()) {
metadata.setPlugins(null);
} else {
metadata.setPlugins(filteredPlugins);
}
}
}