ModelBuilder.java

package org.microcol.model;

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

public class ModelBuilder {
	private final List<Player> players;
	private final List<Ship> ships;

	private Calendar calendar;
	private WorldMap map;

	public ModelBuilder() {
		players = new ArrayList<>();
		ships = new ArrayList<>();
	}

	public ModelBuilder setCalendar(final int startYear, final int endYear) {
		calendar = new Calendar(startYear, endYear);

		return this;
	}

	public ModelBuilder setMap(final int maxX, final int maxY) {
		map = new WorldMap(maxX, maxY);

		return this;
	}

	public ModelBuilder setMap(final String fileName) {
		map = new WorldMap(fileName);

		return this;
	}

	public ModelBuilder addPlayer(final String name, final boolean computer) {
		players.add(new Player(name, computer));

		return this;
	}

	public ModelBuilder addShip(final String ownerName, final ShipType type, final Location location) {
		ships.add(new Ship(getPlayer(ownerName), type, location));

		return this;
	}

	private Player getPlayer(final String name) {
		return players.stream()
			.filter(player -> player.getName().equals(name))
			.findAny()
			.orElse(null);
	}

	public Model build() {
		return new Model(calendar, map, players, ships);
	}
}