Package org.eurekaj.plugins.leveldb.dao

Source Code of org.eurekaj.plugins.leveldb.dao.LevelDBAccountDao

package org.eurekaj.plugins.leveldb.dao;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.eurekaj.api.dao.AccountDao;
import org.eurekaj.api.datatypes.AccessToken;
import org.eurekaj.api.datatypes.Account;
import org.eurekaj.api.datatypes.Session;
import org.eurekaj.api.datatypes.User;
import org.eurekaj.api.datatypes.basic.BasicAccessToken;
import org.eurekaj.api.datatypes.basic.BasicAccount;
import org.eurekaj.api.datatypes.basic.BasicSession;
import org.eurekaj.api.datatypes.basic.BasicUser;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.DBIterator;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import static org.iq80.leveldb.impl.Iq80DBFactory.*;

public class LevelDBAccountDao implements AccountDao {
  private Logger logger = Logger.getLogger(LevelDBAccountDao.class.getName());
 
  private DB db;
  private static final String accountBucketKey = "account;";
  private static final String userBucketKey = "user;";
  private static final String sessionBucketKey = "session;";
  private static final String accessTokenBucketKey = "accessToken;";
  private Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().serializeNulls().create();
 
  public LevelDBAccountDao(DB db) {
    this.db = db;
  }
 
  @Override
  public List<Account> getAccounts() {
    List<Account> accountList = new ArrayList<>();
   
    DBIterator iterator = db.iterator();
    iterator.seek(bytes(accountBucketKey));
    while (iterator.hasNext() && asString(iterator.peekNext().getKey()).startsWith(accountBucketKey)) {
      accountList.add(gson.fromJson(asString(iterator.next().getValue()), BasicAccount.class));
    }
    return accountList;
  }

  @Override
  public Account getAccount(String id) {
    String json = asString(db.get(bytes(accountBucketKey + id)));
    BasicAccount account = gson.fromJson(json, BasicAccount.class);
    return account;
  }

  @Override
  public void persistAccount(Account account) {
    db.put(bytes(accountBucketKey + account.getId()), bytes(gson.toJson(new BasicAccount(account))));
  }

  @Override
  public User getUser(String username, String accountName) {
    String json = asString(db.get(bytes(userBucketKey + username.replace("@", "__") + ";" + accountName)));
    BasicUser user = gson.fromJson(json, BasicUser.class);
    return user;
  }
 
  @Override
  public List<User> getUsers(String username) {
    logger.info("LevelDB: Getting Users with username: " + username);
    List<User> userList = new ArrayList<>();
   
    DBIterator iterator = db.iterator();
    iterator.seek(bytes(userBucketKey + ";" + username.replace("@", "__")));
    while (iterator.hasNext() && asString(iterator.peekNext().getKey()).startsWith(userBucketKey)) {
      BasicUser user = gson.fromJson(asString(iterator.next().getValue()), BasicUser.class);
      logger.info("Got User: " + user.getUserName() + " with role: " + user.getUserRole());
      if (user.getUserName().equals(username)) {
        userList.add(user);
      }
    }
   
    logger.info("found: " + userList.size() + " users");
    return userList;
  }

  @Override
  public void persistUser(User user) {
    db.put(bytes(userBucketKey + user.getUserName().replace("@", "__") + ";" + user.getAccountName()), bytes(gson.toJson(new BasicUser(user))));   
  }
 
  @Override
  public Session getSession(String uuid) {
    String json = asString(db.get(bytes(sessionBucketKey + uuid)));
    BasicSession session = gson.fromJson(json, BasicSession.class);
    return session;
  }
 
  @Override
  public void persistSession(Session session) {
    db.put(bytes(sessionBucketKey + session.getUuid()), bytes(gson.toJson(new BasicSession(session))));   
  }
 
  @Override
  public AccessToken getAccessToken(String accessToken) {
    String json = asString(db.get(bytes(accessTokenBucketKey + accessToken)));
    BasicAccessToken session = gson.fromJson(json, BasicAccessToken.class);
    return session;
  }
 
  @Override
  public void persistAccessToken(AccessToken accessToken) {
    db.put(bytes(accessTokenBucketKey + accessToken.getId()), bytes(gson.toJson(new BasicAccessToken(accessToken))));   
  }

}
TOP

Related Classes of org.eurekaj.plugins.leveldb.dao.LevelDBAccountDao

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.