/* * ============LICENSE_START========================================== * ONAP Portal SDK * =================================================================== * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed * under the Apache License, Version 2.0 (the "License"); * you may not use this software except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at * * https://creativecommons.org/licenses/by/4.0/ * * Unless required by applicable law or agreed to in writing, documentation * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============LICENSE_END============================================ * * */ package org.onap.portalapp.music.conf; import java.time.Duration; import java.util.Map; import org.springframework.session.Session; import org.springframework.session.SessionRepository; import org.springframework.session.events.SessionDeletedEvent; import org.springframework.session.events.SessionExpiredEvent; /** * A {@link SessionRepository} backed by a {@link java.util.Map} and that uses a * {@link MapSession}. The injected {@link java.util.Map} can be backed by a * distributed NoSQL store like Hazelcast, for instance. Note that the supplied * map itself is responsible for purging the expired sessions. * *

* The implementation does NOT support firing {@link SessionDeletedEvent} or * {@link SessionExpiredEvent}. *

* * @author SRIDHAR REDDY M * @since 1.0 */ public class MusicSessionRepository implements SessionRepository { /** * If non-null, this value is used to override * {@link Session#setMaxInactiveInterval(Duration)}. */ private Integer defaultMaxInactiveInterval; private final MusicSessionRepositoryHandler sessionHandler; /** * Creates a new instance backed by the provided {@link java.util.Map}. This * allows injecting a distributed {@link java.util.Map}. * * @param sessions * the {@link java.util.Map} to use. Cannot be null. */ public MusicSessionRepository(MusicSessionRepositoryHandler handler) { this.sessionHandler = handler; } /** * If non-null, this value is used to override * {@link Session#setMaxInactiveInterval(Duration)}. * * @param defaultMaxInactiveInterval * the number of seconds that the {@link Session} should be kept * alive between client requests. */ public void setDefaultMaxInactiveInterval(int defaultMaxInactiveInterval) { this.defaultMaxInactiveInterval = defaultMaxInactiveInterval; } @Override public void save(MusicSession session) { if (!session.getId().equals(session.getOriginalId())) { this.sessionHandler.remove(session.getOriginalId()); session.setOriginalId(session.getId()); } // this.sessionHandler.put(session.getId(), new MusicSession(session)); this.sessionHandler.put(session.getId(), new MusicSession(session)); } @Override public MusicSession findById(String id) { Session saved = this.sessionHandler.get(id); if (saved == null) { return null; } if (saved.isExpired()) { deleteById(saved.getId()); return null; } //return sessionHandler.session(saved); return new MusicSession(saved); } @Override public void deleteById(String id) { this.sessionHandler.remove(id); } @Override public MusicSession createSession() { MusicSession result = new MusicSession(); if (this.defaultMaxInactiveInterval != null) { result.setMaxInactiveInterval(Duration.ofSeconds(this.defaultMaxInactiveInterval)); } return result; } }