package at.gv.egiz.moazs.repository; import at.gv.egiz.moazs.scheme.MsgResponse; import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; import com.google.common.cache.Cache; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.util.Optional; import java.util.concurrent.TimeUnit; import static com.google.common.cache.CacheBuilder.newBuilder; import static java.util.Optional.ofNullable; @Repository @Profile("!cluster") public class InMemoryDeliveryRepository implements DeliveryRepository { private final Cache requestRepository; private final Cache responseRepository; private final Cache binaryResponseRepository; public InMemoryDeliveryRepository(int expiresAfterWrite) { var builder = newBuilder().expireAfterWrite(expiresAfterWrite, TimeUnit.MINUTES); this.requestRepository = builder.build(); this.responseRepository = builder.build(); this.binaryResponseRepository = builder.build(); } @Override public void store(DeliveryRequestType request) { var key = request.getMetaData().getAppDeliveryID(); requestRepository.put(key, request); } @Override public Optional retrieveDeliveryRequest(String appDeliveryID) { return ofNullable(requestRepository.getIfPresent(appDeliveryID)); } @Override public void store(MsgResponse response) { String key = response.getResponseID(); responseRepository.put(key, response); } @Override public Optional retrieveResponse(String responseID) { return ofNullable(responseRepository.getIfPresent(responseID)); } @Override public void store(String id, byte[] data) { binaryResponseRepository.put(id, data); } @Override public Optional retrieveBinaryResponse(String responseID) { return ofNullable(binaryResponseRepository.getIfPresent(responseID)); } }