package com.constellio.app.ui.pages.home;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.joda.time.LocalDateTime;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.search.SPEQueryResponse;
import com.constellio.model.services.search.query.ResultsProjection;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
public class SortRecordsUsingIdsAndApplyViewDateResultsProjection implements ResultsProjection {
Map<String, LocalDateTime> eventsViewDateTimes;
List<String> recordIds;
public SortRecordsUsingIdsAndApplyViewDateResultsProjection(List<String> recordIds,
Map<String, LocalDateTime> eventsViewDateTimes) {
this.recordIds = recordIds;
this.eventsViewDateTimes = eventsViewDateTimes;
}
@Override
public SPEQueryResponse project(LogicalSearchQuery query, SPEQueryResponse originalResponse) {
final List<Record> records = new ArrayList<>(originalResponse.getRecords());
for (Record record : records) {
LocalDateTime view = eventsViewDateTimes.get(record.getId());
record.set(Schemas.MODIFIED_ON, view);
}
Collections.sort(records, new Comparator<Record>() {
@Override
public int compare(Record r1, Record r2) {
int r1Index = recordIds.indexOf(r1.getId());
int r2Index = recordIds.indexOf(r2.getId());
return new Integer(r1Index).compareTo(r2Index);
}
});
return new SPEQueryResponse(records, new HashMap<Record, Map<Record, Double>>());
}
}