Package org.agorava.oauth

Source Code of org.agorava.oauth.GlobalRepositoryImpl

/*
* Copyright 2014 Agorava
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file 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.
*/

package org.agorava.oauth;

import org.agorava.api.exception.AgoravaException;
import org.agorava.api.oauth.OAuthSession;
import org.agorava.api.storage.GlobalRepository;
import org.agorava.api.storage.UserSessionRepository;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.inject.Singleton;

/**
* @author Antoine Sabot-Durand
*/
@Singleton
public class GlobalRepositoryImpl extends GlobalRepository {


    private static final long serialVersionUID = -4639395999488886050L;
    private final Set<UserSessionRepository> userRepos = new HashSet<UserSessionRepository>();

    private UserSessionRepository current;

    public GlobalRepositoryImpl() {
        instance = this;
    }

    @Override
    public Collection<OAuthSession> getAllOauthSessions() {
        Set<OAuthSession> res = new HashSet<OAuthSession>();
        for (UserSessionRepository userRepo : userRepos) {
            res.addAll(userRepo.getAll());
        }
        return res;
    }

    @Override
    public OAuthSession getOauthSession(String sid) {
        if (sid != null && !sid.isEmpty()) {
            for (OAuthSession session : getAllOauthSessions()) {
                if (session.getId().equals(sid)) {
                    return session;
                }
            }
        }
        return null;
    }

    @Override
    public UserSessionRepository createNew() {
        UserSessionRepository res = new UserSessionRepositoryImpl();
        add(res);
        setCurrent(res);
        return res;
    }

    @Override
    public UserSessionRepository createNew(String id) {
        if (get(id) != null) {
            throw new AgoravaException("Unable to create new user repository : repository with id " + id + " already exists");
        } else {
            UserSessionRepository res = new UserSessionRepositoryImpl(id);
            add(res);
            setCurrent(res);
            return res;
        }
    }

    @Override
    public UserSessionRepository getCurrent() {
        return current;
    }

    @Override
    public void setCurrent(UserSessionRepository element) {
        current = element;
    }

    @Override
    public Collection<UserSessionRepository> getAll() {
        return Collections.unmodifiableCollection(userRepos);
    }

    @Override
    public UserSessionRepository setCurrent(String id) throws IllegalArgumentException {
        UserSessionRepository res = get(id);

        if (res == null) {
            throw new IllegalArgumentException("There's no OauthSessionRepository with id " + id);
        }
        return res;
    }

    @Override
    public UserSessionRepository get(String id) {
        if (id != null && !id.isEmpty())
            for (UserSessionRepository userRepo : userRepos) {
                if (userRepo.getId().equals(id))
                    return userRepo;
            }
        return null;
    }

    @Override
    public boolean removeCurrent() {
        if (getCurrent() != null) {
            return remove(current);
        }
        return false;
    }

    @Override
    public boolean remove(String id) {
        UserSessionRepository res = get(id);
        if (res != null)
            return remove(res);
        return false;
    }

    @Override
    public boolean remove(UserSessionRepository element) {
        return userRepos.remove(element);
    }

    @Override
    public void add(UserSessionRepository element) {
        userRepos.add(element);

    }

    @Override
    public void clear() {
        userRepos.clear();
    }

    @Override
    public Iterator<UserSessionRepository> iterator() {
        return new Iterator<UserSessionRepository>() {

            Iterator<UserSessionRepository> wrapped = getAll().iterator();

            @Override
            public boolean hasNext() {
                return wrapped.hasNext();
            }

            @Override
            public UserSessionRepository next() {
                current = wrapped.next();
                return current;
            }

            @Override
            public void remove() {
                wrapped.remove();

            }
        };
    }
}
TOP

Related Classes of org.agorava.oauth.GlobalRepositoryImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.