/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.dlect.provider.helper; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.dlect.immutable.model.ImmutableLecture; import org.dlect.immutable.model.ImmutableSemester; import org.dlect.immutable.model.ImmutableStream; import org.dlect.immutable.model.ImmutableSubject; import org.dlect.model.Database; import org.dlect.model.Semester; import org.dlect.model.Subject; import org.dlect.provider.WrappedProvider; import org.dlect.provider.objects.ImmutableSubjectData; import static org.dlect.provider.helper.WrappedProviderLectureHelper.creatingMapping; /** * * @author lee */ public class WrappedProviderSubjectHelper { private static final Multimap<ImmutableLecture, ImmutableStream> EMPTY_LECTURE_STREAM_MAP = ImmutableMultimap.of(); public static void insertSemestersIntoDatabase(Database d, Multimap<ImmutableSemester, ImmutableSubject> subjects) { Map<Semester, Semester> semMap = creatingMapping(d.getSemesters()); Set<Semester> semesters = Sets.newHashSet(); for (Entry<ImmutableSemester, Collection<ImmutableSubject>> entry : subjects.asMap().entrySet()) { ImmutableSemester sem = entry.getKey(); Collection<ImmutableSubject> collection = entry.getValue(); Semester s = sem.copyToNew(); Semester existing = semMap.get(s); if (existing == null) { existing = s; } else { sem.copyTo(existing); } semesters.add(existing); insertSubjectsIntoSemester(existing, collection); } d.setSemesters(semesters); } private static void insertSubjectsIntoSemester(Semester sem, Collection<ImmutableSubject> imSub) { Map<Subject, Subject> subMap = creatingMapping(sem.getSubjects()); Set<Subject> subjects = Sets.newHashSet(); for (ImmutableSubject is : imSub) { Subject s = is.copyToNew(); Subject existing = subMap.get(s); if (existing == null) { existing = s; } else { is.copyTo(existing); } subjects.add(existing); if (!is.getLectures().isEmpty() || !is.getStreams().isEmpty()) { WrappedProviderLectureHelper.mergeSubjectData(existing, new ImmutableSubjectData(EMPTY_LECTURE_STREAM_MAP, is.getLectures(), is.getStreams())); } } sem.setSubjects(subjects); } }