package name.abuchen.portfolio; import java.time.DayOfWeek; import java.time.LocalDate; import java.util.Random; import java.util.UUID; import name.abuchen.portfolio.model.Classification; import name.abuchen.portfolio.model.Classification.Assignment; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.model.SecurityPrice; import name.abuchen.portfolio.model.Taxonomy; import name.abuchen.portfolio.money.CurrencyUnit; public class SecurityBuilder { private Security security; public SecurityBuilder() { this(CurrencyUnit.EUR); } public SecurityBuilder(String currencyCode) { this.security = new Security(UUID.randomUUID().toString(), currencyCode); this.security.setIsin("DE0001"); //$NON-NLS-1$ this.security.setTickerSymbol("DAX.DE"); //$NON-NLS-1$ } public SecurityBuilder addPrice(String date, long price) { SecurityPrice p = new SecurityPrice(LocalDate.parse(date), price); security.addPrice(p); return this; } public SecurityBuilder assign(Taxonomy taxonomy, String id) { return assign(taxonomy, id, Classification.ONE_HUNDRED_PERCENT); } public SecurityBuilder assign(Taxonomy taxonomy, String id, int weight) { Classification classification = taxonomy.getClassificationById(id); classification.addAssignment(new Assignment(security, weight)); return this; } public SecurityBuilder generatePrices(long startPrice, LocalDate start, LocalDate end) { security.addPrice(new SecurityPrice(start, startPrice)); Random random = new Random(); LocalDate date = start; long price = startPrice; while (date.compareTo(end) < 0) { date = date.plusDays(1); if (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) continue; price = (long) ((double) price * ((random.nextDouble() * 0.2 - 0.1d) + 1)); security.addPrice(new SecurityPrice(date, price)); } return this; } public Security addTo(Client client) { client.addSecurity(security); return security; } public Security get() { return security; } }