/******************************************************************************* * Copyright 2019 Graz University of Technology * MOA ZS has been developed in a cooperation between EGIZ * and Graz University of Technology. * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * https://joinup.ec.europa.eu/news/understanding-eupl-v12 * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. *******************************************************************************/ 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.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 com.google.common.cache.CacheBuilder.newBuilder; import static java.util.Optional.ofNullable; /** * @author Christof Rabensteiner * */ @Repository @Profile("!cluster") public class InMemoryDeliveryRepository implements DeliveryRepository { private static final Logger log = LoggerFactory.getLogger(InMemoryDeliveryRepository.class); 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(); } //TODO: Handle all "key exists" cases! @Override public void store(DeliveryRequestType request) { var key = request.getMetaData().getAppDeliveryID(); log.info("Store DeliveryRequest by key={}.", key); requestRepository.put(key, request); } @Override public Optional retrieveDeliveryRequest(String appDeliveryID) { log.info("Retrieve DeliveryRequest by key={}.", appDeliveryID); return ofNullable(requestRepository.getIfPresent(appDeliveryID)); } @Override public void store(MsgResponse response) { String key = response.getResponseID(); log.info("Store MsgResponse by key={}.", key); responseRepository.put(key, response); } @Override public Optional retrieveResponse(String responseID) { log.info("Retrieve MsgResponse by key={}.", responseID); return ofNullable(responseRepository.getIfPresent(responseID)); } @Override public void store(String responseID, byte[] data) { log.info("Store Binary MsgResponse by key={}.", responseID); binaryResponseRepository.put(responseID, data); } @Override public Optional retrieveBinaryResponse(String responseID) { log.info("Retrieve Binary MsgResponse by key={}.", responseID); return ofNullable(binaryResponseRepository.getIfPresent(responseID)); } }