package pt.utl.ist.scripts.runOnce.teacher; import java.io.File; import java.util.HashSet; import java.util.Set; import net.sourceforge.fenixedu.domain.CareerType; import net.sourceforge.fenixedu.domain.Person; import net.sourceforge.fenixedu.domain.Teacher; import net.sourceforge.fenixedu.domain.person.RoleType; import net.sourceforge.fenixedu.domain.research.Researcher; import net.sourceforge.fenixedu.domain.research.result.publication.ResearchResultPublication; import net.sourceforge.fenixedu.domain.teacher.Career; import org.joda.time.DateTime; import pt.utl.ist.fenix.tools.spreadsheet.SheetData; import pt.utl.ist.fenix.tools.spreadsheet.SpreadsheetBuilder; import pt.utl.ist.fenix.tools.spreadsheet.WorkbookExportFormat; import pt.utl.ist.scripts.commons.AtomicScript; public class TeacherPublicationsStatus extends AtomicScript { @Override protected void run() throws Exception { Set researchers = new HashSet(); for (Teacher teacher : rootDomainObject.getTeachersSet()) { if (teacher.isActive()) { researchers.add(teacher.getPerson()); } } for (Researcher researcher : rootDomainObject.getResearchersSet()) { if (researcher.hasPerson() && researcher.getPerson().hasRole(RoleType.RESEARCHER)) { researchers.add(researcher.getPerson()); } } SheetData data = new SheetData(researchers) { @Override protected void makeLine(Person person) { addCell("istId", person.getUsername()); addCell("Tipo", person.hasTeacher() ? "Docente" : "Investigador"); addCell("Número", person.hasTeacher() ? person.getTeacher().getPerson().getEmployee().getEmployeeNumber() : (person .hasEmployee() ? person.getEmployee().getEmployeeNumber() : "")); addCell("Nome", person.getValidatedName()); addCell("email", person.getInstitutionalOrDefaultEmailAddressValue()); addCell("Carreira Profissional", person.getCareersByType(CareerType.PROFESSIONAL).size()); addCell("Ultima Modificação da Carreira", compuleLastCareerUpdate(person)); addCell("Publicações (Criadas)", countCreatedPublications(person)); addCell("Publicações (Total)", person.getResearchResultPublications().size()); addCell("Ultima Modificação das Publicações", computeLastUpdate(person)); } private Integer countCreatedPublications(Person person) { int count = 0; for (ResearchResultPublication publication : person.getResearchResultPublications()) { if (publication.hasCreator() && publication.getCreator().equals(person)) { count++; } } return count; } private DateTime compuleLastCareerUpdate(Person person) { DateTime lastChange = null; for (Career career : person.getCareersByType(CareerType.PROFESSIONAL)) { if (lastChange == null || career.getLastModificationDateDateTime().isAfter(lastChange)) { lastChange = career.getLastModificationDateDateTime(); } } return lastChange; } private DateTime computeLastUpdate(Person person) { DateTime lastChange = null; for (ResearchResultPublication publication : person.getResearchResultPublications()) { if (lastChange == null || publication.getLastModificationDate().isAfter(lastChange)) { lastChange = publication.getLastModificationDate(); } } return lastChange; } }; new SpreadsheetBuilder().addSheet("teacherAndResearcherA3ESStatus", data).build(WorkbookExportFormat.EXCEL, EXPORT_DIR_PATH + File.separator + "teacherAndResearcherA3ESStatus.xls"); System.out.println(researchers.size()); } public static void main(String[] args) { process(new TeacherPublicationsStatus()); System.exit(0); } }