Created
October 26, 2017 18:47
-
-
Save Komarev/439182e85d7373fc9821101e9052f2e3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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