Package com.springsource.greenhouse.account

Source Code of com.springsource.greenhouse.account.AccountMapper

/*
* Copyright 2010 the original author or authors.
*
* 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 com.springsource.greenhouse.account;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.inject.Inject;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.FileStorage;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriTemplate;

/**
* RowMapper that maps a row in a ResultSet to an Account object instance.
* Designed to be re-used anywhere Account SQL mapping needs to be performed.
* Encapsulates the trickiest aspects of AccountMapping: mapping the picture and profile URL fields.
* Also capable of mapping AccountReference objects, for generating links to public user profile without exposing private user data.
* @author Keith Donald
*/
@Component
public class AccountMapper implements RowMapper<Account> {

  /**
   * SELECT clause for Account fields.
   */
  public static final String SELECT_ACCOUNT = "select id, firstName, lastName, email, username, gender, pictureSet from Member";

  /**
   * SELECT clause for AccountReference fields.
   */
  public static final String SELECT_ACCOUNT_REFERENCE = "select id, username, firstName, lastName, gender, pictureSet from Member";

  private final PictureUrlMapper pictureUrlMapper;
 
  private final UriTemplate profileUrlTemplate;

  /**
   * Constructs an AccountMapper.
   * @param pictureStorage The FileStorage for profile pictures
   * @param profileUrlTemplate The profile URL template for generating public user profile links
   */
  @Inject
  public AccountMapper(FileStorage pictureStorage, @Value("#{environment['application.url']}/members/{profileKey}") String profileUrlTemplate) {
    this(new PictureUrlMapper(new PictureUrlFactory(pictureStorage), PictureSize.SMALL), profileUrlTemplate);
  }

  // implementing RowMapper<Account>
 
  public Account mapRow(ResultSet rs, int row) throws SQLException {
    return new Account(rs.getLong("id"), rs.getString("firstName"), rs.getString("lastName"), rs.getString("email"), rs.getString("username"), pictureUrlMapper.mapRow(rs, row), profileUrlTemplate);
  }

  /**
   * A RowMapper that maps a lighter-weight {@link ProfileReference} object instead of a full-blown {@link Account}.
   * Designed to be used when generating links to user profiles.
   */
  public RowMapper<ProfileReference> getReferenceMapper() {
    return referenceMapper;
  }

  /**
   * Creates a new Account from a Person model.
   * The Account's username is initially null and may be changed later.
   * The Account's profile picture is initially the default picture for the Person's gender (it may also be changed later).
   * @param accountId the assigned internal account identifier
   * @param person the person model
   */
  public Account newAccount(Long accountId, Person person) {
    String pictureUrl = pictureUrlMapper.defaultPictureUrl(person.getGender());
    return new Account(accountId, person.getFirstName(), person.getLastName(), person.getEmail(), null, pictureUrl, profileUrlTemplate);
  }

  // internal helpers
 
  private final RowMapper<ProfileReference> referenceMapper = new RowMapper<ProfileReference>() {
    public ProfileReference mapRow(ResultSet rs, int row) throws SQLException {
      String id = getId(rs);
      String label = rs.getString("firstName") + " " + rs.getString("lastName");
      return new ProfileReference(id, label, pictureUrlMapper.mapRow(rs, row));
    }
   
    private String getId(ResultSet rs) throws SQLException {
      String username = rs.getString("username");
      return username != null ? username : rs.getString("id");
    }
  };

  private AccountMapper(PictureUrlMapper pictureUrlMapper, String profileUrlTemplate) {
    this.pictureUrlMapper = pictureUrlMapper;
    this.profileUrlTemplate = new UriTemplate(profileUrlTemplate);
  }

}
TOP

Related Classes of com.springsource.greenhouse.account.AccountMapper

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.