Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
nl.vpro.api.client.utils.AbstractApiClientMediaRepository Maven / Gradle / Ivy
package nl.vpro.api.client.utils;
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
import jakarta.xml.bind.JAXB;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.io.InputStream;
import java.time.Instant;
import java.util.*;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.meeuw.functional.ReasonedPredicate;
import nl.vpro.api.client.frontend.NpoApiClients;
import nl.vpro.domain.api.*;
import nl.vpro.domain.api.media.*;
import nl.vpro.domain.api.profile.ProfileDefinition;
import nl.vpro.domain.api.profile.exception.ProfileNotFoundException;
import nl.vpro.domain.media.MediaObject;
import nl.vpro.domain.media.MediaRedirector;
import nl.vpro.util.CloseableIterator;
import nl.vpro.util.FilteringIterator;
/**
* @author Michiel Meeuwissen
* @since 1.1
*/
@Slf4j
public abstract class AbstractApiClientMediaRepository implements MediaRepository, MediaRedirector {
final NpoApiClients clients;
final NpoApiMediaUtil util;
@Inject
AbstractApiClientMediaRepository(NpoApiMediaUtil util) {
this.util = util;
this.clients = util.getClients();
}
@Override
public MediaObject load(boolean loadDeleted, String id) {
if (loadDeleted) {
throw new UnsupportedOperationException("We don't support loading deleted objects");
}
try {
return util.loadOrNull(id);
} catch (IOException e) {
log.error(e.getMessage());
return null;
}
}
@Override
@NonNull
public List loadAll(boolean loadDeleted, List ids) {
if (loadDeleted) {
throw new UnsupportedOperationException("We don't support loading deleted objects");
}
try {
return Arrays.asList(util.load(ids.toArray(new String[0])));
} catch (IOException e) {
log.error(e.getMessage());
return Collections.nCopies(ids.size(), null);
}
}
@Override
public CloseableIterator changes(Long since, ProfileDefinition current, ProfileDefinition previous, Order order, Integer max, Long keepAlive) {
throw new UnsupportedOperationException();
}
@Override
public MediaResult listDescendants(MediaObject media, ProfileDefinition profile, Order order, long offset, Integer max) throws ProfileNotFoundException {
return clients.getMediaService().listDescendants(media.getMid(), name(profile), null, order.toString(), offset, max);
}
@Override
public ProgramResult listEpisodes(MediaObject media, ProfileDefinition profile, Order order, long offset, Integer max) throws ProfileNotFoundException {
return clients.getMediaService().listEpisodes(media.getMid(), name(profile), null, order.toString(), offset, max);
}
@Override
public MediaResult listMembers(MediaObject media, ProfileDefinition profile, Order order, long offset, Integer max) throws ProfileNotFoundException {
return clients.getMediaService().listMembers(media.getMid(), name(profile), null, order.toString(), offset, max);
}
@Override
public MediaResult list(Order order, long offset, Integer max) {
return clients.getMediaService().list(null, order.toString(), offset, max);
}
public Iterator iterate(ProfileDefinition profile, MediaForm form, Integer max, long offset, FilteringIterator.KeepAlive keepAlive) {
throw new UnsupportedOperationException();
}
@Override
public Optional redirect(String s) {
MediaObject got = clients.getMediaService().load(s, "", null);
if (got == null) {
return Optional.empty();
}
if (Objects.equals(got.getMid(), s)) {
return Optional.empty();
}
return Optional.ofNullable(got.getMid());
}
@Override
public RedirectList redirects() {
try (Response r = clients.getMediaService().redirects(null)) {
InputStream is = (InputStream) r.getEntity();
return JAXB.unmarshal(is, RedirectList.class);
}
}
@Override
public CloseableIterator changes(
@Nullable final Instant since,
@Nullable final String mid,
@Nullable final ProfileDefinition profile,
@Nullable final Order order,
@Nullable final Integer max,
@Nullable Deletes deletes,
@Nullable final Tail tail,
@Nullable final ReasonedPredicate filter) {
throw new UnsupportedOperationException();
}
public Long getCurrentSince() {
return Instant.now().toEpochMilli();
}
@Override
public CloseableIterator iterate(ProfileDefinition profile, MediaForm form, long offset, Integer max, FilteringIterator.KeepAlive keepAlive) {
//InputStream i = clients.getMediaService().iterate(form, profile.getName(), null, offset, max, keepAlive, null, null);
throw new UnsupportedOperationException();
}
protected String name(ProfileDefinition profile) {
return profile == null ? null : profile.getName();
}
}