diff options
Diffstat (limited to 'ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepository.java')
-rw-r--r-- | ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepository.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepository.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepository.java new file mode 100644 index 00000000..37a7ae7e --- /dev/null +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/conf/MusicSessionRepository.java @@ -0,0 +1,135 @@ +/* + * ============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============================================ + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +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. + * + * <p> + * The implementation does NOT support firing {@link SessionDeletedEvent} or + * {@link SessionExpiredEvent}. + * </p> + * + * @author SRIDHAR REDDY M + * @since 1.0 + */ +public class MusicSessionRepository implements SessionRepository<MusicSession> { + + /** + * 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; + } + +} |