Package org.growersnation.site.model

Source Code of org.growersnation.site.model.ModelBuilder

package org.growersnation.site.model;

import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import org.growersnation.site.SiteConfiguration;
import org.growersnation.site.dao.security.UserDao;
import org.growersnation.site.model.security.User;
import org.growersnation.site.model.view.BaseModel;

import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.HttpHeaders;
import java.util.UUID;

/**
* <p>Builder to provide the following to resources:</p>
* <ul>
* <li>Utility methods to build backing models for Views</li>
* </ul>
*
* @since 0.0.1
*/
public class ModelBuilder {

  private final UserDao userDao;

  @Inject
  public ModelBuilder(UserDao userDao) {
    Preconditions.checkNotNull(userDao);
    this.userDao = userDao;
  }

  private Optional<UUID> extractSessionToken(HttpHeaders httpHeaders) {

    // Want to fail fast to absent() since this will get called a lot
    Optional<UUID> sessionToken = Optional.absent();

    if (httpHeaders == null) {
      // Might be an internal call such as an error condition
      return sessionToken;
    }
    if (httpHeaders.getCookies() == null) {
      // This is a cold user
      return sessionToken;
    }

    Cookie cookie = httpHeaders.getCookies().get(SiteConfiguration.SESSION_TOKEN_NAME);
    if (cookie == null) {
      // This is a cold user
      return sessionToken;
    }
    String value = cookie.getValue();
    if (value == null) {
      // This is a broken cookie
      // Rather than throw an error we can force a fresh login to fix it up
      return sessionToken;
    }

    // Must be OK to be here
    return Optional.of(UUID.fromString(value));

  }

  /**
   * @return A new base model with user populated from the session token if present
   */
  public BaseModel newBaseModel(HttpHeaders httpHeaders) {

    BaseModel baseModel = new BaseModel();

    // Locate and populate the user by their session token (if present)
    Optional<UUID> sessionToken = extractSessionToken(httpHeaders);
    if (sessionToken.isPresent()) {
      Optional<User> user = userDao.getBySessionToken(sessionToken.get());
      if (user.isPresent()) {
        baseModel.setUser(user.get());
      }
    }

    return baseModel;

  }

}
TOP

Related Classes of org.growersnation.site.model.ModelBuilder

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.