Package net.cloudcodex.server

Source Code of net.cloudcodex.server.InitServletImpl

package net.cloudcodex.server;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.cloudcodex.server.data.AdvancedDAO;
import net.cloudcodex.server.data.DAO;
import net.cloudcodex.server.data.Data;
import net.cloudcodex.server.data.Data.Campaign;
import net.cloudcodex.server.data.Data.CharacterNote;
import net.cloudcodex.server.data.Data.Message;
import net.cloudcodex.server.data.Data.Notification;
import net.cloudcodex.server.data.Data.Scene;
import net.cloudcodex.server.data.campaign.msg.SceneSDO;
import net.cloudcodex.server.service.CampaignService;
import net.cloudcodex.server.service.HomeService;
import net.cloudcodex.server.service.MessageService;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Transaction;

/**
* Runs when the app starts to install test data in DB.
*
* @author Thomas
*/
public class InitServletImpl extends HttpServlet {

  private HomeService homeService;

  private CampaignService campaignService;

  private MessageService messageService;

  private List<Notification> notifications = new ArrayList<Notification>();

  protected final Logger logger = Logger.getLogger(getClass().getName());
 
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
   
    final DatastoreService datastore =
      DatastoreServiceFactory.getDatastoreService();

    final AdvancedDAO dao = new AdvancedDAO(datastore);

    homeService = new HomeService(datastore);
    campaignService = new CampaignService(datastore);
    messageService = new MessageService(datastore);

   
    // remove all data from datastore
    logger.info("delete datastore");
    for(Entity entity : datastore.prepare(new Query().setKeysOnly()).asIterable()) {
      datastore.delete(entity.getKey());
    }
   
    // init
    logger.info("init datastore");
    init(datastore, dao);

    logger.info("datastore set up");
  }
 
  private Data.User createUser(DAO dao, String email, String nickname) {
   
    final Data.User user = homeService.createUser(null, email, nickname);

    createNotification(dao, "Welcome on CloudCodex " + nickname
        + "! You've been created on " + new Date(), user.getKey());

    return user;
  }
 
  private Data.CharacterNote createNote(DAO dao, Data.Character on, Data.Character by, String text) {
 
    final CharacterNote note = new CharacterNote(on);
    note.setAuthor(by);
    note.setContent(text);
    dao.save(null, note);
    return note;
  }
 
  private void createNotification(DAO dao, String message, Key to) {
    final Notification notification = new Notification();
    notification.setMessage(message);
    notification.setTo(to);
    notifications.add(notification);
  }
 
  private Data.Character createCharacter(DAO dao, Campaign campaign, String name, Data.User owner) {
    return createCharacter(dao, campaign, name, owner, null, null);
  }

  private Data.Character createCharacter(DAO dao,
      Campaign campaign, String name, Data.User owner, String icon, String description) {

    final Data.Character character = campaignService.createCharacter(null, campaign, name, owner, icon, description);
   
    if(owner != null) {
      createNotification(dao, "Hello " + name + ", " + character.getDate()
          + " is a good day to be born", character.getKey());
    }
   
    return character;
  }
 
  /**
   * Init a DB with some users and campaign.
   */
  private void init(DatastoreService datastore, AdvancedDAO dao) {
   
    final Context context = new Context(null);
   
    notifications.clear();
    createNotification(dao, "This is a general message, everyone see it !", null);
   
    {
      final Data.User thomas = createUser(dao, "thomas.levavasseur@gmail.com", "Thomas");
      final Data.User arnaud = createUser(dao, "arnaud@example.com", "Arnaud");
      final Data.User daniel = createUser(dao, "daniel@example.com", "Daniel");
      final Data.User xavier = createUser(dao, "xavier@example.com", "Xavier");
      final Data.User romain = createUser(dao, "krazlafas@gmail.com", "Romain");
     
      {
        final Transaction tx = datastore.beginTransaction();
        try {
          final Campaign campaign = campaignService.createCampaign(null, "Thomas's Campaign", "Some game", "Some desc", null, thomas);
         
          // Create a generic notification for all characters of the notification.
          createNotification(dao, "Please make OFF session to define your character", campaign.getKey());
         
         
          final Data.Character ulrich = createCharacter(dao, campaign, "Ulrich", xavier);
          final Data.Character olukun = createCharacter(dao, campaign, "Olukun", arnaud);
          final Data.Character hektor = createCharacter(dao, campaign, "Hektor", daniel);
          final Data.Character inigo = createCharacter(dao, campaign, "Inigo", romain);
          createNote(dao, ulrich, inigo, "I think he wants to kill me !!!");
         
          final Data.Character deBloni = createCharacter(dao, campaign, "Victor de Bloni", null);
          createNote(dao, deBloni, ulrich, "Met at Shallya's orphanage");
          createNote(dao, deBloni, hektor, "He hides something ...");
         
          final Data.Character guardChief = createCharacter(dao, campaign, "Otto Meuler", null);
          guardChief.setDescription("Faussenburg's Guard Chief");
          dao.save(null, guardChief);

          final Data.Character mayor = createCharacter(dao, campaign, "Herman Storn", null);
          mayor.setDescription("Faussenburg's Mayor");
          dao.save(null, mayor);
         
          // commit here because cannot read items ...
          tx.commit();

          /*
           * Init some scenes and messages.
           */
          Scene scene = messageService.startScene(context, "You're talking to the Guard chief", ulrich, inigo, guardChief);
          scene.setAlias(guardChief.getKey().getId() + "", "Global Alias for Guard Chief");
          scene.setAlias(ulrich.getKey().getId() + "", "Global Alias for Ulrich");
          scene.setAlias(ulrich.getKey().getId() + "-" + inigo.getKey().getId(), "My friend");
          dao.save(context, scene);
          messageService.postSpeech(context, null, ulrich, "Have you seen the mayor ?");
          messageService.postSpeech(context, null, ulrich, "Guy, I'm talking to you !");
          messageService.postSpeech(context, scene.getKey(), guardChief, "No, Not the last days. I'm worried.");
          messageService.postSpeech(context, null, inigo, "I'm sure he's gone with the town gold !");
          messageService.postSpeech(context, scene.getKey(), guardChief, "I'm going right now to check the bank !");
          scene = messageService.startScene(context, "Guard chief is gone, you're alone in the street", ulrich, inigo);
          messageService.postSpeech(context, null, inigo, "OK, wat a stupid guy ...");
          messageService.postSpeech(context, null, ulrich, "Yes, we can now deliver our friend from the jail.");
          messageService.postSpeech(context, null, inigo, "Let's go ! I'm going to search Hektor");
          scene = messageService.startScene(context, "Hektor, Inigo is coming to you at the inn", hektor, inigo);
          messageService.postSpeech(context, null, inigo, "You ! Come with me !");
          messageService.postSpeech(context, null, hektor, "Huh ?!? OK ...");
         
          // now ulrich scene
          messageService.postOFF(context, null, ulrich.getKey(), null, "Is it to late to go to the market ?");
          messageService.postOFF(context, null, null, ulrich.getKey(), "No, you can.");
          messageService.postOFF(context, null, ulrich.getKey(), null, "So I go to the market");
          messageService.postOFF(context, null, null, ulrich.getKey(), "When arriving to market, you see Olukun.");
          messageService.postOFF(context, null, ulrich.getKey(), null, "I go talk to him");
          scene = messageService.startScene(context, "Olukun, Ulrich is here.", ulrich, olukun);
          messageService.postSpeech(context, null, olukun, "Hey ! How do you do ?");
         
          // ...
          scene = messageService.startScene(context, "Everybody is here ...", ulrich, olukun, hektor, inigo);
          messageService.postSpeech(context, null, inigo, "OK Let's go to the jail !");
          messageService.postSpeech(context, null, olukun, "Huh ... wait a minute ...");
         
          {
            List<Scene> scenes = dao.asListOfScenes(null, dao.queryScene(campaign.getKey()), null);
            if(scenes != null) {
              for(Scene seq : scenes) {
                System.err.println(seq.getEntity());
                final List<Message> messages =
                  dao.asListOfMessages(null,
                    dao.queryMessage(seq.getKey()), null,
                    Message.Properties.TIMESTAMP);
                if(messages != null) {
                  for(Message msg : messages) {
                    System.err.println(msg.getEntity());
                  }
                }
              }
            }
          }
         
          {
            System.err.println("----------- Inigo messages");
            final Context context2 = new Context(romain);
            final List<SceneSDO> scenes = messageService.getMessages(context2,
                campaign.getKey().getId(),
                inigo.getKey().getId(), null, null);
           
            if(scenes != null) {
              for(SceneSDO sdo : scenes) {
                final Scene seq = sdo.getScene();
                System.err.println(seq.getEntity());
                final List<Message> messages = sdo.getMessages();
                if(messages != null) {
                  for(Message msg : messages) {
                    System.err.println(msg.getEntity());
                  }
                }
              }
            }
          }

          {
            System.err.println("----------- Ulrich messages");
            final Context context2 = new Context(xavier);
            final List<SceneSDO> scenes = messageService.getMessages(context2,
                campaign.getKey().getId(),
                ulrich.getKey().getId(), null, null);
           
            if(scenes != null) {
              for(SceneSDO sdo : scenes) {
                final Scene seq = sdo.getScene();
                System.err.println(seq.getEntity());
                final List<Message> messages = sdo.getMessages();
                if(messages != null) {
                  for(Message msg : messages) {
                    System.err.println(msg.getEntity());
                  }
                }
              }
            }
          }
         
          {
            System.err.println("----------- Olukun messages");
            final Context context2 = new Context(arnaud);
            final List<SceneSDO> scenes = messageService.getMessages(context2,
                campaign.getKey().getId(),
                olukun.getKey().getId(), null, null);
           
            if(scenes != null) {
              for(SceneSDO sdo : scenes) {
                final Scene seq = sdo.getScene();
                System.err.println(seq.getEntity());
                final List<Message> messages = sdo.getMessages();
                if(messages != null) {
                  for(Message msg : messages) {
                    System.err.println(msg.getEntity());
                  }
                }
              }
            }
          }

          {
            System.err.println("----------- Hektor messages");
            final Context context2 = new Context(daniel);
            final List<SceneSDO> scenes = messageService.getMessages(context2,
                campaign.getKey().getId(),
                hektor.getKey().getId(), null, null);
           
            if(scenes != null) {
              for(SceneSDO sdo : scenes) {
                final Scene seq = sdo.getScene();
                System.err.println(seq.getEntity());
                final List<Message> messages = sdo.getMessages();
                if(messages != null) {
                  for(Message msg : messages) {
                    System.err.println(msg.getEntity());
                  }
                }
              }
            }
          }

        } finally {
          if(tx.isActive()) {
            tx.rollback();
          }
        }
      }
      {
        final Transaction tx = datastore.beginTransaction();
        try {
          final Campaign campaign = campaignService.createCampaign(null, "another thomas' campaign", "Some game", "Some desc", null, thomas);
          campaign.setIcon("http://4.bp.blogspot.com/_SniTwfm5BwE/StS30qA7boI/AAAAAAAABpc/1kDwWjGglHI/s320/D%26D4E.jpg");
          createNotification(dao,  "this is another Notification", campaign.getKey());
          dao.save(null, campaign);
          tx.commit();
        } finally {
          if(tx.isActive()) {
            tx.rollback();
          }
        }
      }
     
      {
        final Transaction tx = datastore.beginTransaction();
        try {
          final Campaign campaign = campaignService.createCampaign(null, "Campaign 3", "Some game", "Some desc", null, daniel);
          campaign.setIcon("http://www.wizards.com/dnd/images/rhod_gallery/95863.jpg");
          createNotification(dao, "Please," + daniel.getNickname()+ " make OFF session to define your character", campaign.getKey());
         
          dao.save(null, campaign);
          tx.commit();
        } finally {
          if(tx.isActive()) {
            tx.rollback();
          }
        }
      }

     
      {
        final Transaction tx = datastore.beginTransaction();
        try {
          final Campaign campaign = campaignService.createCampaign(null, "Campaign 2", "Some game", "Some desc", null, daniel);
          campaign.setIcon("http://4.bp.blogspot.com/_SniTwfm5BwE/StS30qA7boI/AAAAAAAABpc/1kDwWjGglHI/s320/D%26D4E.jpg");
          createNotification(dao,  "this is another Notification", campaign.getKey());
         
          dao.save(null, campaign);
          tx.commit();
        } finally {
          if(tx.isActive()) {
            tx.rollback();
          }
        }
      }

     
      {
        final Transaction tx = datastore.beginTransaction();
        try {
          final Campaign campaign = campaignService.createCampaign(null, "Daniel's Campaign", "Some game", "Some desc", null, daniel);
          createNotification(dao,  "this is a Notification", campaign.getKey());
          final Data.Character joe = createCharacter(dao, campaign, "Joe", thomas);
          final Data.Character jack = createCharacter(dao, campaign, "Jack", arnaud);
          createNote(dao, jack, joe, "Why this guy is always following me ?!?");
          final Data.Character eric = createCharacter(dao, campaign, "Eric", null);
          tx.commit();
        } finally {
          if(tx.isActive()) {
            tx.rollback();
          }
        }
      }
    }

   
    /*
     * Tests for Home
     */
    {
      final Data.User user1 = createUser(dao, "user1@home.com", "User1");
      final Data.User user2 = createUser(dao, "user2@home.com", "User2");
      final Data.User user3 = createUser(dao, "user3@home.com", "User3");
     
      final Campaign campaign = campaignService.createCampaign(null, "My Home !", "Some game", "Some desc", null, user3);

      final Data.Character char1 = campaignService.createCharacter(null, campaign, "Char1", user1, null, null);
      final Data.Character char2 = campaignService.createCharacter(null, campaign, "Char2", user2, null, null);
      final Data.Character char3 = campaignService.createCharacter(null, campaign, "Char3", user3, null, null);
     
      Scene scene = messageService.startScene(context, "Intro", char1, char2, char3);
      messageService.postSpeech(context, null, char1, "Message 1");
      messageService.postSpeech(context, null, char2, "Message 2");
      messageService.postSpeech(context, null, char3, "Message 3");
    }
   

    /*
     * Must be done out of TX because they are not attached to campaigns.
     */
    for(Notification notification : notifications) {
      dao.save(null, notification);
    }
  }
}
TOP

Related Classes of net.cloudcodex.server.InitServletImpl

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.