package se.bjurr.prnfb.settings; import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.collect.Lists.newArrayList; import static se.bjurr.prnfb.settings.PrnfbSettingsDataBuilder.prnfbSettingsDataBuilder; import java.util.ArrayList; import java.util.List; public class PrnfbSettingsBuilder { public static PrnfbSettingsBuilder prnfbSettingsBuilder() { return new PrnfbSettingsBuilder(); } public static PrnfbSettingsBuilder prnfbSettingsBuilder(PrnfbSettings settings) { return new PrnfbSettingsBuilder(settings); } private List<PrnfbButton> buttons; private List<PrnfbNotification> notifications; private PrnfbSettingsData prnfbSettingsData; private PrnfbSettingsBuilder() { this.notifications = newArrayList(); this.buttons = newArrayList(); this.prnfbSettingsData = prnfbSettingsDataBuilder() // .build(); } private PrnfbSettingsBuilder(PrnfbSettings settings) { this.notifications = firstNonNull(settings.getNotifications(), new ArrayList<PrnfbNotification>()); this.buttons = firstNonNull(settings.getButtons(), new ArrayList<PrnfbButton>()); this.prnfbSettingsData = settings.getPrnfbSettingsData(); } public PrnfbSettings build() { return new PrnfbSettings(this); } public List<PrnfbButton> getButtons() { return this.buttons; } public List<PrnfbNotification> getNotifications() { return this.notifications; } public PrnfbSettingsData getPrnfbSettingsData() { return this.prnfbSettingsData; } public PrnfbSettingsBuilder setButtons(List<PrnfbButton> buttons) { this.buttons = buttons; return this; } public PrnfbSettingsBuilder setNotifications(List<PrnfbNotification> notifications) { this.notifications = notifications; return this; } public PrnfbSettingsBuilder setPrnfbSettingsData(PrnfbSettingsData prnfbSettingsData) { this.prnfbSettingsData = prnfbSettingsData; return this; } public PrnfbSettingsBuilder withButton(PrnfbButton prnfbButton) { this.buttons.add(prnfbButton); return this; } public PrnfbSettingsBuilder withNotification(PrnfbNotification notification) { this.notifications.add(notification); return this; } }