Package net.cloudcodex.server.service

Source Code of net.cloudcodex.server.service.HomeService

package net.cloudcodex.server.service;

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

import net.cloudcodex.server.Context;
import net.cloudcodex.server.data.Data;
import net.cloudcodex.server.data.Data.Campaign;
import net.cloudcodex.server.data.Data.Notification;
import net.cloudcodex.server.data.Data.User;
import net.cloudcodex.server.data.home.CampaignPublicSummary;
import net.cloudcodex.server.data.home.CampaignSummary;
import net.cloudcodex.server.data.home.CharacterSummary;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Query.FilterOperator;

/**
* Service for Campaign
* @author Thomas
*/
public class HomeService extends AbstractService {

  /**
   * @param store Google AppEngine datastore.
   */
  public HomeService(DatastoreService store) {
    super(store);
  }

  /**
   * Searchs an user by its email.
   */
  public Data.User getUserByEmail(Context context, String email) {
    return dao.getUserByEmail(context, email);
  }
 
  /**
   * Searchs an user by its email.
   */
  public Data.User getUserByGoogleId(Context context, String userId) {
    return dao.getUserByGoogleId(context, userId);
  }

  /**
   * Utility method to create a user.
   * TODO doesn't check anything ...
   *
   * @param context execution context.
   * @param email email of the user.
   * @param nickname nickname of the user.
   * @return the user created.
   */
  public Data.User createUser(Context context, String email, String nickname) {
   
    final Data.User user = new Data.User();
    user.setEmail(email);
    user.setNickname(nickname);
    dao.save(context, user);

    return user;
  }
 
  /**
   * @param context execution context.
   * @return the characters summary data.
   */
  public List<CharacterSummary> getCharacterSummaries(Context context) {

    final Data.User user = context.getUser();
   
    if(user == null) {
      return null;
    }
   
    // Search the characters.
    final List<Data.Character> characters =
      dao.asListOfCharacters(context, dao.addCharacterFilterOnOwner(
        dao.queryCharacter(), FilterOperator.EQUAL, user.getKey()), null);
   
    if(characters == null || characters.isEmpty()) {
      return null;
    }
   
    final List<CharacterSummary> summaries = new ArrayList<CharacterSummary>();
   
    // Iterate over the characters to reach the other data
    for(Data.Character character : characters) {
      final Key key = character.getKey();
     
      // Search the campaign ...
      final Data.Campaign campaign = dao.readCampaign(context, key.getParent());
      if(campaign == null) {
        // FIXME Houston, we have a problem
        continue;
      }

      // ... and complete it.
      final CampaignPublicSummary campaignSummary = new CampaignPublicSummary();
      campaignSummary.setCampaign(campaign);
      campaignSummary.setNotifications(getNotifications(context, campaign.getKey()));
      campaignSummary.setMaster(dao.readUser(context, campaign.getMaster()));
     
      // Search the notifications. may be null.
      final List<Notification> notifications = getNotifications(context, key);
     
      final CharacterSummary summary = new CharacterSummary();
      summary.setCharacter(character);
      summary.setCampaign(campaignSummary);
      summary.setNotifications(notifications);
     
      summaries.add(summary);
    }
   
    return summaries.isEmpty() ? null : summaries;
  }
 
  /**
   * @param context execution context.
   * @return the characters summary data.
   */
  public List<CampaignSummary> getCampaignSummaries(Context context) {

    final Data.User user = context.getUser();
   
    if(user == null) {
      return null;
    }

    final List<Campaign> campaigns =
      dao.asListOfCampaigns(context, dao.addCampaignFilterOnMaster(
        dao.queryCampaign(), FilterOperator.EQUAL, user.getKey()), null);

    if(campaigns == null || campaigns.isEmpty()) {
      return null;
    }
   
    final List<CampaignSummary> summaries = new ArrayList<CampaignSummary>();
    for(Campaign campaign : campaigns) {
      final CampaignSummary summary = new CampaignSummary();
      summary.setCampaign(campaign);
      summary.setMaster(user);
      summary.setNotifications(getNotifications(context, campaign.getKey()));
      summary.setCharacters(dao.getCampaignPlayableCharacters(context, campaign.getKey()));
      summaries.add(summary);
    }
   
    return summaries.isEmpty() ? null : summaries;
  }
 
  /**
   * Registers a user not yet registered.
   * @param nickname nickname to set to the user.
   * @return the updated user or null when error occurs.
   */
  public Data.User register(Context context, String nickname) {
   
    final User user = context.getUser();
   
    if(user.getNickname() != null) {
      return null;
    }

    // FIXME you can do a better check ...
    if(nickname == null || "".equals(nickname.trim())) {
      return null;
    }
   
    // Check the nickname is not already used.
    final List<Data.User> users =
      dao.filterUsersOnNickname(context, null, FilterOperator.EQUAL, nickname);
   
    if(users != null && !users.isEmpty()) {
      logger.severe("try to register with '" + nickname +"' but already used");
    }
   
    // Update the user.
    user.setNickname(nickname);
    dao.save(context, user);
   
    return user;
  }
 
}
TOP

Related Classes of net.cloudcodex.server.service.HomeService

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.