Skip to content

Instantly share code, notes, and snippets.

@Komarev
Created October 26, 2017 18:47
Show Gist options
  • Save Komarev/439182e85d7373fc9821101e9052f2e3 to your computer and use it in GitHub Desktop.
Save Komarev/439182e85d7373fc9821101e9052f2e3 to your computer and use it in GitHub Desktop.
public void sortSchedules() {
if (mOrderSchedulesAttributes != null && mOrderSchedulesAttributes.size() > 1) {
Collections.sort(mOrderSchedulesAttributes, (o1, o2) -> o1.getId() - o2.getId());
}
}
private List<OrderSchedulesAttributes> joinDays(List<OrderSchedulesAttributes> srcList) {
List<OrderSchedulesAttributes> joinedDays = new ArrayList<>();
for (int i=0; i<srcList.size(); i++) {
if (joinedDays.size() == 0) {
joinedDays.add(srcList.get(i));
continue;
}
OrderSchedulesAttributes lastDay = joinedDays.get(joinedDays.size() - 1);
if (lastDay.getEndTime().plusMinutes(1).isAfter(srcList.get(i).getStartTime())) {
lastDay.setEndTime(srcList.get(i).getEndTime());
} else {
joinedDays.add(srcList.get(i));
}
}
return joinedDays;
}
private List<OrderSchedulesAttributes> splitDays(List<OrderSchedulesAttributes> srcList) {
List<OrderSchedulesAttributes> splittedDays = new ArrayList<>();
boolean didSplit = false;
for (int i=0; i<srcList.size(); i++) {
int day = srcList.get(i).getStartTime().getDayOfMonth();
OrderSchedulesAttributes scheduledDayViewModel = new OrderSchedulesAttributes();
scheduledDayViewModel.setStartTime(srcList.get(i).getStartTime());
scheduledDayViewModel.setEndTime(srcList.get(i).getStartTime().withTime(23, 59, 59, 999));
if (srcList.get(i).getEndTime().getDayOfMonth() == day) {
scheduledDayViewModel.setEndTime(srcList.get(i).getEndTime());
splittedDays.add(scheduledDayViewModel);
} else {
OrderSchedulesAttributes nextScheduledDay = new OrderSchedulesAttributes();
nextScheduledDay.setStartTime(srcList.get(i).getEndTime().withTimeAtStartOfDay());
nextScheduledDay.setEndTime(srcList.get(i).getEndTime());
splittedDays.addAll(insertMissingDays(scheduledDayViewModel, nextScheduledDay));
didSplit = true;
}
}
return didSplit ? splitDays(splittedDays) : srcList;
}
private List<OrderSchedulesAttributes> filterZeroDays(List<OrderSchedulesAttributes> srcList) {
List<OrderSchedulesAttributes> filtered = new ArrayList<>();
for (int i=0; i<srcList.size(); i++) {
if (!srcList.get(i).getStartTime().isEqual(srcList.get(i).getEndTime())) {
filtered.add(srcList.get(i));
}
}
return filtered;
}
private List<OrderSchedulesAttributes> insertMissingDays(OrderSchedulesAttributes first,
OrderSchedulesAttributes last) {
List<OrderSchedulesAttributes> insertedDays = new ArrayList<>();
insertedDays.add(first);
insertedDays.add(last);
long distance = last.getStartTime().getMillis() - first.getEndTime().getMillis();
distance = distance / 1000 / 60 / 60 / 24;
List<OrderSchedulesAttributes> missingDays = new ArrayList<>();
if (distance <= 0) {
return insertedDays;
}
for (int i=0; i<distance; i++) {
DateTime missingDay;
missingDay = first.getStartTime().withTimeAtStartOfDay().plusDays(i+1);
OrderSchedulesAttributes day = new OrderSchedulesAttributes();
day.setStartTime(missingDay);
day.setEndTime(missingDay.withTime(23, 59, 59, 999));
missingDays.add(day);
}
insertedDays.addAll(1, missingDays);
return insertedDays;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment