public ITradingOffice createTradingOffice(IPlayer owner, ICity city, int value) {
for (IBuilding building : city.getBuildings()) {
if (building.getOwner()==owner && building instanceof ITradingOffice){
throw new IllegalStateException("The player may only obtain one trading office per city");
}
}
IStorage storage = createStorage(owner, city);
IBalanceSheet lastWeek;
IBalanceSheet thisWeek;
ICity hometown = owner.getHometown();
if (hometown.equals(city)) {
lastWeek = interactionFactory.createInitialBalanceSheet(city, owner);
thisWeek = interactionFactory.createBalanceSheetFromPreviousWeek((BalanceSheet) lastWeek);
} else {
Optional<ITradingOffice> mainOffice = owner.findTradingOffice(hometown);
Preconditions.checkArgument(mainOffice.isPresent(), "There has to be a trading office in the hometown");
lastWeek = mainOffice.get().getBalanceLastWeek();
thisWeek = mainOffice.get().getCurrentWeek();
}
TradingOffice office = (TradingOffice) context.getBean("tradingOffice", new Object[]{owner, city, value, storage, lastWeek, thisWeek});
city.build(office);
clientServerEventBus.post(new BuildingFinished(office, owner, city));
return office;
}
}