package at.gv.egiz.moazs.repository; import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.util.Optional; import java.util.concurrent.TimeUnit; import static at.gv.egiz.moazs.util.NullCoalesce.coalesce; import static java.util.Optional.ofNullable; @Repository @Profile("!cluster") public class InMemoryDeliveryRepository implements DeliveryRepository { private static final Logger logger = LoggerFactory.getLogger(InMemoryDeliveryRepository.class); private static final Cache requestRepository = CacheBuilder.newBuilder() .expireAfterWrite(30, TimeUnit.MINUTES) .build(); private static final Cache statusRepository = CacheBuilder.newBuilder() .expireAfterWrite(30, TimeUnit.MINUTES) .build(); private static final Cache signedStatusRepository = CacheBuilder.newBuilder() .expireAfterWrite(30, TimeUnit.MINUTES) .build(); @Override public void add(DeliveryRequestType request) { var key = request.getMetaData().getAppDeliveryID(); requestRepository.put(key, request); } @Override public Optional getDeliveryRequest(String appDeliveryID) { return ofNullable(requestRepository.getIfPresent(appDeliveryID)); } @Override public void add(DeliveryRequestStatusType status) { var key = coalesce(status.getSuccess(), status.getPartialSuccess(), status.getError()) .get().getAppDeliveryID(); statusRepository.put(key, status); } @Override public Optional getDeliveryRequestStatus(String appDeliveryID) { return ofNullable(statusRepository.getIfPresent(appDeliveryID)); } @Override public void addSignedDeliveryRequestStatus(byte[] bytes, String appDeliveryId) { signedStatusRepository.put(appDeliveryId, bytes); } @Override public Optional getSignedDeliveryRequestStatus(String appDeliveryID) { return ofNullable(signedStatusRepository.getIfPresent(appDeliveryID)); } }