package fi.otavanopisto.muikku.schooldata.events; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import javax.annotation.PostConstruct; import javax.enterprise.event.Observes; import javax.inject.Inject; import fi.otavanopisto.muikku.grading.GradingScaleEntityController; import fi.otavanopisto.muikku.grading.GradingScaleItemEntityController; import fi.otavanopisto.muikku.model.coursemeta.CourseIdentifierEntity; import fi.otavanopisto.muikku.model.grading.GradingScaleEntity; import fi.otavanopisto.muikku.model.grading.GradingScaleItemEntity; import fi.otavanopisto.muikku.workspaces.CourseIdentifierEntityController; public class DefaultSchoolDataMetaListener { @Inject private Logger logger; @Inject private CourseIdentifierEntityController courseIdentifierEntityController; @Inject private GradingScaleEntityController gradingScaleEntityController; @Inject private GradingScaleItemEntityController gradingScaleItemEntityController; @PostConstruct public void init() { discoveredCourseIdentifiers = new HashMap<>(); discoveredGradingScales = new HashMap<>(); discoveredGradingScaleItems = new HashMap<>(); } public synchronized void onSchoolDataCourseIdentifierDiscoveredEvent(@Observes SchoolDataCourseIdentifierDiscoveredEvent event) { String discoverId = "CI-" + event.getDataSource() + "/" + event.getIdentifier(); if (discoveredCourseIdentifiers.containsKey(discoverId)) { event.setDiscoveredCourseIdentifierEntityId(discoveredCourseIdentifiers.get(discoverId)); return; } CourseIdentifierEntity entity = courseIdentifierEntityController.findCourseIdentifierEntityBySchoolDataSourceAndIdentifier(event.getDataSource(), event.getIdentifier()); if (entity == null) { entity = courseIdentifierEntityController.createCourseIdentifierEntity(event.getDataSource(), event.getIdentifier()); discoveredCourseIdentifiers.put(discoverId, entity.getId()); event.setDiscoveredCourseIdentifierEntityId(entity.getId()); } else { logger.warning("CourseIdentifierEntity " + event.getIdentifier() + "/" + event.getDataSource() + " already exists"); } } public synchronized void onSchoolDataGradingScaleDiscoveredEvent(@Observes SchoolDataGradingScaleDiscoveredEvent event) { String discoverId = "GS-" + event.getDataSource() + "/" + event.getIdentifier(); if (discoveredGradingScales.containsKey(discoverId)) { event.setDiscoveredGradingScaleEntityId(discoveredGradingScales.get(discoverId)); return; } GradingScaleEntity entity = gradingScaleEntityController.findGradingScaleEntityBySchoolDataSourceAndIdentifier(event.getDataSource(), event.getIdentifier()); if (entity == null) { entity = gradingScaleEntityController.createGradingScaleEntity(event.getDataSource(), event.getIdentifier()); discoveredGradingScales.put(discoverId, entity.getId()); event.setDiscoveredGradingScaleEntityId(entity.getId()); } else { logger.warning("GradingScaleEntity " + event.getIdentifier() + "/" + event.getDataSource() + " already exists"); } } public void onSchoolDataGradingScaleItemDiscoveredEvent(@Observes SchoolDataGradingScaleItemDiscoveredEvent event) { String discoverId = "GSI-" + event.getDataSource() + "/" + event.getIdentifier(); if (discoveredGradingScaleItems.containsKey(discoverId)) { event.setDiscoveredGradingScaleItemEntityId(discoveredGradingScaleItems.get(discoverId)); return; } GradingScaleItemEntity scaleItemEntity = gradingScaleItemEntityController.findGradingScaleItemEntityBySchoolDataSourceAndIdentifier(event.getDataSource(), event.getIdentifier()); if (scaleItemEntity == null) { GradingScaleEntity gradingScaleEntity = gradingScaleEntityController.findGradingScaleEntityBySchoolDataSourceAndIdentifier(event.getDataSource(), event.getIdentifier()); scaleItemEntity = gradingScaleItemEntityController.createGradingScaleEntity(gradingScaleEntity, event.getDataSource(), event.getIdentifier()); discoveredGradingScaleItems.put(discoverId, scaleItemEntity.getId()); event.setDiscoveredGradingScaleItemEntityId(scaleItemEntity.getId()); } else { logger.warning("GradingScaleItemEntity " + event.getIdentifier() + "/" + event.getDataSource() + " already exists"); } } private Map<String, Long> discoveredCourseIdentifiers; private Map<String, Long> discoveredGradingScales; private Map<String, Long> discoveredGradingScaleItems; }