package pl.com.bottega.documentmanagement.api.events; import com.google.common.collect.Sets; import pl.com.bottega.documentmanagement.api.EmployeeDetails; import pl.com.bottega.documentmanagement.api.HRSystemFacade; import pl.com.bottega.documentmanagement.api.PrintSystemFacade; import pl.com.bottega.documentmanagement.domain.Document; import pl.com.bottega.documentmanagement.domain.EmployeeId; import pl.com.bottega.documentmanagement.domain.Reader; import pl.com.bottega.documentmanagement.domain.events.DocumentListener; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; /** * Created by maciuch on 27.08.16. */ public class DocumentPrinter implements DocumentListener { private PrintSystemFacade printSystemFacade; private HRSystemFacade hrSystemFacade; public DocumentPrinter(PrintSystemFacade printSystemFacade, HRSystemFacade hrSystemFacade) { this.printSystemFacade = printSystemFacade; this.hrSystemFacade = hrSystemFacade; } @Override public void published(Document document) { Set<Reader> readers = document.readers(); //Set<EmployeeId> employeeIds = readers.stream().map(reader -> reader.employeeId()).collect(Collectors.toSet()); Set<EmployeeId> employeeIds = new HashSet<>(); for(Reader reader : readers) employeeIds.add(reader.employeeId()); Set<EmployeeDetails> employeeDetailsSet = hrSystemFacade.getEmployeeDetails(Sets.newHashSet(employeeIds)); printDocument(document, employeeDetailsSet); } private void printDocument(Document document, Set<EmployeeDetails> employeeDetailsSet) { Set<EmployeeDetails> employeesWithoutEmail = employeeDetailsSet.stream(). filter(employeeDetails -> !employeeDetails.hasEmail()).collect(Collectors.toSet()); printSystemFacade.printDocument(document, employeesWithoutEmail); } }