package org.droidplanner.android.proxy.mission;
import org.droidplanner.android.proxy.mission.item.MissionItemProxy;
import java.util.ArrayList;
import java.util.List;
public class MissionSelection {
/**
* Classes interested in getting selection update should implement this
* interface.
*/
public interface OnSelectionUpdateListener {
void onSelectionUpdate(List<MissionItemProxy> selected);
}
/**
* Stores the selected mission items renders.
*/
public final List<MissionItemProxy> mSelectedItems = new ArrayList<>();
/**
* Stores the list of selection update listeners.
*/
public List<MissionSelection.OnSelectionUpdateListener> mSelectionsListeners = new ArrayList<>();
/**
* Removes the given mission item render from the selected list.
*
* @param item
* mission item render to remove from the selected list
*/
public void removeItemFromSelection(MissionItemProxy item) {
mSelectedItems.remove(item);
notifySelectionUpdate();
}
/**
* Removes the mission items in the given list from the selected list.
* @param itemList list of mission items to remove from the selected list.
*/
public void removeItemsFromSelection(List<MissionItemProxy> itemList){
if(itemList == null || itemList.isEmpty()){
return;
}
for(MissionItemProxy item : itemList){
mSelectedItems.remove(item);
}
notifySelectionUpdate();
}
/**
* Selects only the given mission items renders. TODO: check the mission
* items renders belong to this mission render
*
* @param items
* list of mission items renders to select.
*/
public void setSelectionTo(List<MissionItemProxy> items) {
mSelectedItems.clear();
mSelectedItems.addAll(items);
notifySelectionUpdate();
}
/**
* Selects only the given mission item render. TODO: check the mission item
* render belongs to this mission render
*
* @param item
* mission item render to select.
*/
public void setSelectionTo(MissionItemProxy item) {
mSelectedItems.clear();
mSelectedItems.add(item);
notifySelectionUpdate();
}
/**
* Adds the given mission item render to the selected list. TODO: check the
* mission item render belongs to this mission render
*
* @param item
* mission item render to add to the selected list.
*/
public void addToSelection(MissionItemProxy item) {
mSelectedItems.add(item);
notifySelectionUpdate();
}
/**
* Selects the given list of mission items renders TODO: check if the given
* mission items renders belong to this mission render
*
* @param items
* list of mission items renders to select.
*/
public void addToSelection(List<MissionItemProxy> items) {
mSelectedItems.addAll(items);
notifySelectionUpdate();
}
/**
* Checks if the passed mission item render is selected.
*
* @param item
* mission item render to check for selection
* @return true if selected
*/
public boolean selectionContains(MissionItemProxy item) {
return mSelectedItems.contains(item);
}
/**
* @return the list of selected mission items renders
*/
public List<MissionItemProxy> getSelected() {
return mSelectedItems;
}
/**
* Deselects all mission items renders
*/
public void clearSelection() {
if(!mSelectedItems.isEmpty()) {
mSelectedItems.clear();
notifySelectionUpdate();
}
}
public void notifySelectionUpdate() {
for (MissionSelection.OnSelectionUpdateListener listener : mSelectionsListeners)
listener.onSelectionUpdate(mSelectedItems);
}
/**
* Adds given argument to the list of selection update listeners.
*
* @param listener
*/
public void addSelectionUpdateListener(OnSelectionUpdateListener listener) {
mSelectionsListeners.add(listener);
}
/**
* Removes given argument from the list of selection update listeners.
*
* @param listener
*/
public void removeSelectionUpdateListener(MissionSelection.OnSelectionUpdateListener listener) {
mSelectionsListeners.remove(listener);
}
}