package ua.kpi.ecampus.model.dao;
import ua.kpi.ecampus.model.pojo.Bulletin;
import ua.kpi.ecampus.model.pojo.Item;
import ua.kpi.ecampus.model.pojo.User;
import ua.kpi.ecampus.util.DateUtil;
import static ua.kpi.ecampus.util.BulletinPredicates.filterBulletins;
import static ua.kpi.ecampus.util.BulletinPredicates.getIdsCollection;
import static ua.kpi.ecampus.util.BulletinPredicates.isDeleted;
import static ua.kpi.ecampus.util.BulletinPredicates.isMatchesProfile;
import static ua.kpi.ecampus.util.BulletinPredicates.isMatchesSubdivision;
import static ua.kpi.ecampus.util.BulletinPredicates.isNotExpired;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import ua.kpi.ecampus.util.BulletinPredicates;
/**
* Created by Administrator on 28.03.2016.
*/
public class BulletinModeratorDao implements IDataAccessObject<Bulletin> {
/**
* All unique bulletins where user is creator
*/
private Set<Bulletin> mAll = new LinkedHashSet<>();
/**
* Bulletins that are not expired
*/
private Set<Bulletin> mNotExpired = new LinkedHashSet<>();
/**
* Bulletins filtered by user profile
*/
private Set<Bulletin> mByProfile = new LinkedHashSet<>();
/**
* Bulletins filtered by user subdivision
*/
private Set<Bulletin> mBySubdiv = new LinkedHashSet<>();
/**
* Bulletins that are deleted
*/
private Set<Bulletin> mDeleted = 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);
mBySubdiv.addAll(filterBulletins(data, isMatchesSubdivision(ids)));
}
mNotExpired.addAll(filterBulletins(data, isNotExpired(DateUtil
.getCurrentDate())));
mDeleted.addAll(filterBulletins(data, isDeleted()));
}
@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]);
}
public Collection<Bulletin> getFilteredByProfile() {
return mByProfile;
}
public Collection<Bulletin> getFilteredBySubdiv() {
return mBySubdiv;
}
public Collection<Bulletin> getNotExpired() {
return mNotExpired;
}
public Collection<Bulletin> getDeleted() {
return mDeleted;
}
}