package models;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import play.data.format.Formats.DateTime;
import play.libs.F.Option;
import play.mvc.QueryStringBindable;
public class DocumentFilter implements QueryStringBindable<DocumentFilter> {
public Document.Status status;
public Long user;
public Long watchedtarget;
public String service;
public List<String> fastSubjects = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
@DateTime(pattern="dd-MM-yyyy")
public Date startdate;
@DateTime(pattern="dd-MM-yyyy")
public Date enddate;
public DocumentFilter() {
status = Document.Status.NEW;
}
public DocumentFilter(Long userId) {
status = Document.Status.NEW;
this.user = userId;
}
public DocumentFilter(DocumentFilter documentFilter) {
status = documentFilter.status;
user = documentFilter.user;
watchedtarget = documentFilter.watchedtarget;
service = documentFilter.service;
fastSubjects = documentFilter.fastSubjects;
startdate = documentFilter.startdate;
enddate = documentFilter.enddate;
}
public DocumentFilter withWatchedTarget(Long watchedTargetId) {
DocumentFilter documentFilter = new DocumentFilter(this);
documentFilter.watchedtarget = watchedTargetId;
documentFilter.user = WatchedTarget.find.byId(watchedTargetId).target.authorUser.id;
return documentFilter;
}
public DocumentFilter withStatus(Document.Status status) {
DocumentFilter documentFilter = new DocumentFilter(this);
documentFilter.status = status;
return documentFilter;
}
@Override
public Option<DocumentFilter> bind(String key, Map<String, String[]> data) {
if (data.containsKey("status"))
status = Document.Status.valueOf(data.get("status")[0]);
if (data.containsKey("user") && !data.get("user")[0].isEmpty()) {
user = Long.parseLong(data.get("user")[0]);
}
if (data.containsKey("watchedtarget") && !data.get("watchedtarget")[0].isEmpty()) {
watchedtarget = Long.parseLong(data.get("watchedtarget")[0]);
}
if (data.containsKey("service") && !data.get("service")[0].equals("All"))
service = data.get("service")[0];
for (FastSubject fastSubject : FastSubject.find.all())
if (data.containsKey(fastSubject.fastId))
fastSubjects.add(fastSubject.fastId);
if (data.containsKey("startdate"))
try {
startdate = dateFormat.parse(data.get("startdate")[0]);
} catch (ParseException e) {}
if (data.containsKey("enddate"))
try {
enddate = dateFormat.parse(data.get("enddate")[0]);
} catch (ParseException e) {}
return Option.Some(this);
}
@Override
public String unbind(String key) {
String result = "status=" + status.toString();
if (user != null) result += "&user=" + user;
if (watchedtarget != null) result += "&watchedtarget=" + watchedtarget;
if (service != null) result += "&service=" + service;
for (String fastSubject : fastSubjects)
result += "&" + fastSubject + "=true";
if (startdate != null) result += "&startdate=" + dateFormat.format(startdate);
if (enddate != null) result += "&enddate=" + dateFormat.format(enddate);
return result;
}
@Override
public String javascriptUnbind() {
return null;
}
}