package org.openlmis.core.view.viewmodel; import android.text.SpannableStringBuilder; import org.openlmis.core.LMISApp; import org.openlmis.core.model.StockCard; import org.openlmis.core.model.StockMovementItem; import org.openlmis.core.utils.DateUtil; import org.openlmis.core.utils.TextStyleUtil; import org.roboguice.shaded.goole.common.base.Function; import org.roboguice.shaded.goole.common.base.Predicate; import org.roboguice.shaded.goole.common.collect.FluentIterable; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; import lombok.Data; @Data public class StockHistoryViewModel { StockCard stockCard; List<StockHistoryMovementItemViewModel> filteredMovementItemViewModelList = new ArrayList<>(); List<StockHistoryMovementItemViewModel> allMovementItemViewModelList = new ArrayList<>(); private SpannableStringBuilder styledProductName; private SpannableStringBuilder styledProductUnit; public StockHistoryViewModel(StockCard stockCard) { this.stockCard = stockCard; allMovementItemViewModelList.addAll(FluentIterable.from(stockCard.getStockMovementItemsWrapper()).transform(new Function<StockMovementItem, StockHistoryMovementItemViewModel>() { @Override public StockHistoryMovementItemViewModel apply(StockMovementItem stockMovementItem) { return new StockHistoryMovementItemViewModel(stockMovementItem); } }).toSortedList(new Comparator<StockHistoryMovementItemViewModel>() { @Override public int compare(StockHistoryMovementItemViewModel lhs, StockHistoryMovementItemViewModel rhs) { int compareResult = lhs.getStockMovementItem().getMovementDate().compareTo(rhs.getStockMovementItem().getMovementDate()); if (compareResult == 0) { return lhs.getStockMovementItem().getId() < rhs.getStockMovementItem().getId() ? -1 : 1; } return compareResult; } }).asList()); } public List<StockHistoryMovementItemViewModel> filter(final int days) { filteredMovementItemViewModelList.clear(); filteredMovementItemViewModelList.addAll(FluentIterable.from(allMovementItemViewModelList).filter(new Predicate<StockHistoryMovementItemViewModel>() { @Override public boolean apply(StockHistoryMovementItemViewModel stockHistoryMovementItemViewModel) { return !(stockHistoryMovementItemViewModel.getStockMovementItem().getMovementDate()).before(DateUtil.minusDayOfMonth(new Date(LMISApp.getInstance().getCurrentTimeMillis()), days)); } }).toList()); return filteredMovementItemViewModelList; } public SpannableStringBuilder getStyledProductName() { if (styledProductName == null) { styledProductName = TextStyleUtil.formatStyledProductName(stockCard.getProduct()); } return styledProductName; } public SpannableStringBuilder getStyledProductUnit() { if (styledProductUnit == null) { styledProductUnit = TextStyleUtil.formatStyledProductUnit(stockCard.getProduct()); } return styledProductUnit; } }