package ua.kpi.ecampus.model.dao; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import ua.kpi.ecampus.model.pojo.Bulletin; import ua.kpi.ecampus.model.pojo.Item; import ua.kpi.ecampus.model.pojo.User; import static ua.kpi.ecampus.util.BulletinPredicates.filterBulletins; import static ua.kpi.ecampus.util.BulletinPredicates.getIdsCollection; import static ua.kpi.ecampus.util.BulletinPredicates.isMatchesProfile; import static ua.kpi.ecampus.util.BulletinPredicates.isMatchesSubdivision; /** * Implementation of IDataAccessObject for the Bulletin data model. * <p> * Created by Administrator on 21.03.2016. */ public class BulletinDao implements IDataAccessObject<Bulletin> { /** * All unique bulletins available for current user */ private Set<Bulletin> mAll = new LinkedHashSet<>(); /** * Bulletins filtered by user profile */ private Set<Bulletin> mByProfile = new LinkedHashSet<>(); /** * Bulletins filtered by user subdivision */ private Set<Bulletin> mBySubdivision = new LinkedHashSet<>(); @Override public Collection<Bulletin> getData() { return mAll; } @Override public void setData(Collection<Bulletin> data) { if (data.isEmpty()) return; for (Bulletin b : data) { trimTime(b); mAll.add(b); } List<Item> userProfile = User.getInstance().position; List<Item> userSubdivision = User.getInstance().subdivision; if (userProfile != null && userSubdivision != null) { List<Integer> ids = getIdsCollection(userProfile); mByProfile.addAll(filterBulletins(data, isMatchesProfile(ids))); ids = getIdsCollection(userSubdivision); mBySubdivision.addAll(filterBulletins(data, isMatchesSubdivision(ids))); } } @Override public void update(Bulletin object) { } @Override public void delete(Bulletin object) { } /** * Trim time value in datetime strings in object * @param bulletin with datetime strings */ private void trimTime(Bulletin bulletin) { bulletin.setDateStart(bulletin.getDateStart().split(" ")[0]); bulletin.setDateStop(bulletin.getDateStop().split(" ")[0]); bulletin.setDateCreate(bulletin.getDateCreate().split(" ")[0]); } /** * Get Bulletins filtered by user's profile. * * @return list of bulletins. */ public Collection<Bulletin> getFilteredByProfile() { return mByProfile; } /** * Get Bulletins filtered by user's subdivision. * * @return list of bulletins. */ public Collection<Bulletin> getFilteredBySubdiv() { return mBySubdivision; } }