Package ch.fusun.baron.player

Source Code of ch.fusun.baron.player.PlayerServiceImpl

package ch.fusun.baron.player;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.osgi.framework.Bundle;

import ch.fusun.baron.core.rmi.User;
import ch.fusun.baron.data.AbstractDataProvider;
import ch.fusun.baron.data.DataUpdate;
import ch.fusun.baron.player.api.PlayerService;
import ch.fusun.baron.player.api.PlayerUpdate;

/**
* Service for the management of {@link Player}s
*/
public class PlayerServiceImpl extends AbstractDataProvider implements
    PlayerService {

  private Map<Dynasty, User> dynasties = new HashMap<Dynasty, User>();
  private final List<String> maleNames = new ArrayList<String>();
  private final List<String> femaleNames = new ArrayList<String>();
  private int idCounter = 0;

  /**
   * Constructor
   */
  public PlayerServiceImpl() {
    loadNames("resources/names/male.txt", maleNames); //$NON-NLS-1$
    loadNames("resources/names/female.txt", femaleNames); //$NON-NLS-1$
  }

  private static void loadNames(String location, List<String> list) {
    Bundle bundle = Activator.getContext().getBundle();
    Path path = new Path(location);
    URL url = FileLocator.find(bundle, path, Collections.EMPTY_MAP);
    URL fileUrl = null;
    try {
      fileUrl = FileLocator.toFileURL(url);
    } catch (IOException e) {
      // Will happen if the file cannot be read for some reason
      e.printStackTrace();
      return;
    }

    FileInputStream in;
    try {
      in = new FileInputStream(fileUrl.getPath());
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
      String strLine;
      do {
        strLine = br.readLine();
        list.add(strLine);
      } while (strLine != null);
      in.close();
    } catch (Exception e) {
      list.add("Eveline Widmer-Schlumpf"); //$NON-NLS-1$
      e.printStackTrace();
    }
  }

  @Override
  public DataUpdate createFullUpdate() {
    return new PlayerUpdate(dynasties);
  }

  @Override
  public List<Player> getPlayers(User user) {
    List<Player> playersPerUser = new ArrayList<Player>();
    for (Dynasty dynasty : dynasties.keySet()) {
      User temp = dynasties.get(dynasty);
      if (user.equals(temp)) {
        playersPerUser.addAll(dynasty.getMembers());
      }
    }
    return playersPerUser;
  }

  @Override
  public void setDynasties(Map<Dynasty, User> dynasties) {
    this.dynasties = dynasties;
    updateAllListeners(new SetDynastiesUpdate(dynasties));
  }

  @Override
  public void setDynastyForUser(Dynasty player, User user) {
    dynasties.put(player, user);
    updateAllListeners(new SetDynastyForUserDataUpdate(player, user));
  }

  @Override
  public List<Player> getAllPlayers() {
    List<Player> result = new LinkedList<Player>();
    for (Dynasty dynasty : dynasties.keySet()) {
      result.addAll(dynasty.getMembers());
    }
    return result;
  }

  @Override
  public User getUser(Dynasty dynasty) {
    return dynasties.get(dynasty);
  }

  @Override
  public Dynasty getDynasty(User user) {
    for (Dynasty dynasty : dynasties.keySet()) {
      User temp = dynasties.get(dynasty);
      if (user.equals(temp)) {
        return dynasty;
      }
    }
    return null;
  }

  @Override
  public List<Dynasty> getAllDynasties() {
    List<Dynasty> result = new LinkedList<Dynasty>();
    result.addAll(dynasties.keySet());
    return result;
  }

  @Override
  public Dynasty getDynasty(Player player) {
    for (Dynasty dynasty : dynasties.keySet()) {
      if (dynasty.getMembers().contains(player)) {
        return dynasty;
      }
    }
    return null;
  }

  @Override
  public String generateName(Gender gender) {
    if (Gender.MALE.equals(gender)) {
      return maleNames.get((int) (Math.random() * maleNames.size()));
    }
    if (Gender.FEMALE.equals(gender)) {
      return femaleNames.get((int) (Math.random() * femaleNames.size()));
    }
    return "Christoph Blocher"; //$NON-NLS-1$
  }

  @Override
  public void addPlayerToDynasty(Dynasty dynasty, Player child) {
    for (Dynasty old : dynasties.keySet()) {
      if (old.equals(dynasty)) {
        old.addPlayer(child);
        updateAllListeners(new AddPlayerToDynastyDataUpdate(dynasty,
            child));
        return;
      }
    }
  }

  @Override
  public Player generateNewPlayer(Gender gender) {
    return new Player(idCounter++, generateName(gender), gender);
  }

  @Override
  public void updatePlayer(Player person) {
    for (Dynasty dynasty : dynasties.keySet()) {
      dynasty.updatePerson(person);
    }
    updateAllListeners(new UpdatePlayerUpdateData(person));
  }

  @Override
  public void removePlayers(List<Player> playersToRemove) {
    for (Dynasty dynasty : dynasties.keySet()) {
      for (Player player : playersToRemove) {
        dynasty.removePerson(player);
      }
    }
    updateAllListeners(new RemovePlayerUpdateData(playersToRemove));
  }
}
TOP

Related Classes of ch.fusun.baron.player.PlayerServiceImpl

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.