Rng.java
package jasper.component;
import io.micrometer.core.annotation.Timed;
import jasper.domain.Ref;
import jasper.domain.Ref_;
import jasper.repository.RefRepository;
import jasper.repository.filter.RefFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;
import java.util.UUID;
import static jasper.repository.spec.OriginSpec.isUnderOrigin;
import static org.springframework.data.domain.Sort.Order.desc;
import static org.springframework.data.domain.Sort.by;
@Component
public class Rng {
private static final Logger logger = LoggerFactory.getLogger(Rng.class);
@Autowired
RefRepository refRepository;
@Timed(value = "jasper.rng.update", histogram = true)
public void update(String rootOrigin, Ref ref, Ref existing) {
if (!ref.hasTag("plugin/rng")) return;
if (existing != null) {
var remotes = refRepository.findAll(RefFilter.builder()
.url(ref.getUrl())
.modifiedAfter(existing.getModified())
.build().spec().and(isUnderOrigin(rootOrigin)), PageRequest.of(0, 1, by(desc(Ref_.MODIFIED))));
if (remotes.isEmpty() || remotes.getContent().get(0).getOrigin().equals(ref.getOrigin())) {
ref.removeTag("plugin/rng");
for (var t : existing.getTags()) {
if (t.startsWith("+plugin/rng/")) {
ref.addTag(t);
}
}
return;
}
} else {
if (refRepository.count(RefFilter.builder()
.url(ref.getUrl())
.build().spec()) == 0) {
return;
}
}
ref.removeTag("+plugin/rng");
ref.addTag("+plugin/rng/" + UUID.randomUUID().toString().toLowerCase().replaceAll("\\W", ""));
}
}