jease.cms.service.Users.java Source code

Java tutorial

Introduction

Here is the source code for jease.cms.service.Users.java

Source

/*
Copyright (C) 2016 maik.jablonski@jease.org
    
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package jease.cms.service;

import java.util.List;

import jease.cmf.service.Nodes;
import jease.cms.domain.Content;
import jease.cms.domain.User;
import jfix.db4o.Database;

import org.apache.commons.lang3.StringUtils;

public class Users {

    /**
     * Returns all users with administration rights.
     */
    public static List<User> queryAdministrators() {
        return Database.query(User.class, User::isAdministrator);
    }

    /**
     * Returns all users who are modifiable by given user. At the current state
     * administrators will retrieve all existing users, all other users will
     * retrieve themselfes.
     */
    public static List<User> queryModifiableByUser(final User user) {
        return Database.query(User.class, $user -> user.isAdministrator() || user == $user);
    }

    /**
     * Returns a unique user for given combination of login / password. If the
     * login is also compared to the email address of the user.
     */
    public static User queryByLogin(final String login, final String password) {
        return Database.queryUnique(User.class,
                $user -> (login.equals($user.getLogin()) || login.equals($user.getEmail()))
                        && $user.hasPassword(password));
    }

    /**
     * Returns a unique user for given login
     */
    public static User queryByLogin(final String login) {
        return Database.queryUnique(User.class, $user -> login.equals($user.getLogin()));
    }

    /**
     * Returns a unique user for given email address.
     */
    public static User queryByEmail(final String email) {
        return Database.queryUnique(User.class, $user -> email.equals($user.getEmail()));
    }

    /**
     * Returns true if given login and given email is unique within database for
     * given user.
     */
    public static boolean isIdentityUnique(final User user, final String login, final String email) {
        return Database.isUnique(user, $user -> (StringUtils.isNotBlank(login) && login.equals($user.getLogin()))
                || (StringUtils.isNotBlank(email) && email.equals($user.getEmail())));
    }

    /**
     * Replaces all occurences of old user with new user as editor of content.
     */
    public static void replace(User oldUser, User newUser) {
        for (Content content : queryContentsEditedByUser(oldUser)) {
            content.setEditor(newUser);
            Nodes.save(content);
        }
    }

    private static List<Content> queryContentsEditedByUser(final User user) {
        return Database.query(Content.class, $content -> $content.getEditor() == user);
    }

    /**
     * Returns true if the given user is stored in database.
     */
    public static boolean isStored(User user) {
        return user != null ? Database.isStored(user) : false;
    }
}