package fi.otavanopisto.muikku.plugins.schooldatapyramus.schedulers; import java.util.List; import java.util.logging.Logger; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.apache.commons.lang3.math.NumberUtils; import fi.otavanopisto.muikku.model.users.UserGroupEntity; import fi.otavanopisto.muikku.plugins.schooldatapyramus.PyramusIdentifierMapper; import fi.otavanopisto.muikku.plugins.schooldatapyramus.PyramusUpdater; import fi.otavanopisto.muikku.plugins.schooldatapyramus.SchoolDataPyramusPluginDescriptor; import fi.otavanopisto.muikku.users.UserGroupEntityController; @ApplicationScoped public class PyramusSchoolDataUserGroupUsersUpdateScheduler extends PyramusDataScheduler implements PyramusUpdateScheduler { private static final int BATCH_SIZE = NumberUtils.createInteger(System.getProperty("muikku.pyramus-updater.usergroup-users.batchsize", "20")); @Inject private Logger logger; @Inject private UserGroupEntityController userGroupEntityController; @Inject private PyramusIdentifierMapper identityMapper; @Inject private PyramusUpdater pyramusUpdater; @Override public String getSchedulerName() { return "usergroup-users"; } public void synchronize() { int offset = getOffset(); int count = 0; try { logger.fine("Synchronizing Pyramus user group users"); List<UserGroupEntity> userGroupEntities = userGroupEntityController.listUserGroupEntitiesByDataSource( SchoolDataPyramusPluginDescriptor.SCHOOL_DATA_SOURCE, offset, BATCH_SIZE); if (userGroupEntities.size() == 0) { updateOffset(0); } else { for (UserGroupEntity userGroupEntity : userGroupEntities) { switch (identityMapper.getStudentGroupType(userGroupEntity.getIdentifier())) { case STUDENTGROUP: Long userGroupId = identityMapper.getPyramusStudentGroupId(userGroupEntity.getIdentifier()); count += pyramusUpdater.updateStudentGroupUsers(userGroupId); break; case STUDYPROGRAMME: Long studyProgrammeId = identityMapper.getPyramusStudyProgrammeId(userGroupEntity.getIdentifier()); count += pyramusUpdater.updateStudyProgrammeGroupUsers(studyProgrammeId); break; } } updateOffset(offset + userGroupEntities.size()); } } finally { logger.fine(String.format("Synchronized %d Pyramus user group users", count)); } } @Override public int getPriority() { return 4; } }