// Path: app/src/main/java/com/nilhcem/droidconde/data/app/SelectedSessionsMemory.java
// @Singleton
// public class SelectedSessionsMemory {
// 
//     private final Map<LocalDateTime, Integer> selectedSessions = new ConcurrentHashMap<>();
// 
//     @Inject
//     public SelectedSessionsMemory() {
//     }
// 
//     public boolean isSelected(Session session) {
//         Integer sessionId = selectedSessions.get(session.getFromTime());
//         return sessionId != null && session.getId() == sessionId;
//     }
// 
//     public void setSelectedSessions(Map<LocalDateTime, Integer> selectedSessions) {
//         this.selectedSessions.clear();
//         this.selectedSessions.putAll(selectedSessions);
//     }
// 
//     public Integer get(LocalDateTime slotTime) {
//         return selectedSessions.get(slotTime);
//     }
// 
//     public void toggleSessionState(com.nilhcem.droidconde.data.app.model.Session session, boolean insert) {
//         selectedSessions.remove(session.getFromTime());
//         if (insert) {
//             selectedSessions.put(session.getFromTime(), session.getId());
//         }
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/Room.java
// public enum Room {
// 
//     NONE(0, ""),
//     STAGE_1(1, "Stage 1"),
//     STAGE_2(2, "Stage 2"),
//     STAGE_3(3, "Stage 3"),
//     STAGE_4(4, "Stage 4"),
//     WORKSPACE(5, "Workspace");
// 
//     public final int id;
//     public final String label;
// 
//     Room(int id, String label) {
//         this.id = id;
//         this.label = label;
//     }
// 
//     public static Room getFromId(int id) {
//         for (Room room : Room.values()) {
//             if (room.id == id) {
//                 return room;
//             }
//         }
//         return NONE;
//     }
// 
//     public static Room getFromLabel(@NonNull String label) {
//         for (Room room : Room.values()) {
//             if (label.equals(room.label)) {
//                 return room;
//             }
//         }
//         return NONE;
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/ScheduleSlot.java
// @Value
// public class ScheduleSlot implements Parcelable {
// 
//     public static final Parcelable.Creator<ScheduleSlot> CREATOR = new Parcelable.Creator<ScheduleSlot>() {
//         public ScheduleSlot createFromParcel(Parcel source) {
//             return new ScheduleSlot(source);
//         }
// 
//         public ScheduleSlot[] newArray(int size) {
//             return new ScheduleSlot[size];
//         }
//     };
// 
//     LocalDateTime time;
//     List<Session> sessions;
// 
//     public ScheduleSlot(LocalDateTime time, List<Session> sessions) {
//         this.time = time;
//         this.sessions = sessions;
//     }
// 
//     protected ScheduleSlot(Parcel in) {
//         time = (LocalDateTime) in.readSerializable();
//         sessions = in.createTypedArrayList(Session.CREATOR);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeSerializable(time);
//         dest.writeTypedList(sessions);
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/Session.java
// @Value
// public class Session implements Parcelable {
// 
//     public static final Parcelable.Creator<Session> CREATOR = new Parcelable.Creator<Session>() {
//         public Session createFromParcel(Parcel source) {
//             return new Session(source);
//         }
// 
//         public Session[] newArray(int size) {
//             return new Session[size];
//         }
//     };
// 
//     int id;
//     String room;
//     List<Speaker> speakers;
//     String title;
//     String description;
//     LocalDateTime fromTime;
//     LocalDateTime toTime;
// 
//     public Session(int id, String room, List<Speaker> speakers, String title, String description, LocalDateTime fromTime, LocalDateTime toTime) {
//         this.id = id;
//         this.room = room;
//         this.speakers = speakers;
//         this.title = title;
//         this.description = description;
//         this.fromTime = fromTime;
//         this.toTime = toTime;
//     }
// 
//     protected Session(Parcel in) {
//         id = in.readInt();
//         room = in.readString();
//         speakers = in.createTypedArrayList(Speaker.CREATOR);
//         title = in.readString();
//         description = in.readString();
//         fromTime = (LocalDateTime) in.readSerializable();
//         toTime = (LocalDateTime) in.readSerializable();
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(id);
//         dest.writeString(room);
//         dest.writeTypedList(speakers);
//         dest.writeString(title);
//         dest.writeString(description);
//         dest.writeSerializable(fromTime);
//         dest.writeSerializable(toTime);
//     }
// }


import android.support.v4.util.Pair;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import com.nilhcem.droidconde.data.app.SelectedSessionsMemory;
import com.nilhcem.droidconde.data.app.model.Room;
import com.nilhcem.droidconde.data.app.model.ScheduleSlot;
import com.nilhcem.droidconde.data.app.model.Session;
import com.squareup.picasso.Picasso;
import java.util.List;
import java8.util.stream.Collectors;
import static java8.util.stream.StreamSupport.stream;
package com.nilhcem.droidconde.ui.schedule.day;






public class ScheduleDayFragmentAdapterAllSessions extends RecyclerView.Adapter<ScheduleDayEntry> {

    private final List<Pair<Session, ScheduleSlot>> sessions;
    private final Picasso picasso;
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/SelectedSessionsMemory.java
// @Singleton
// public class SelectedSessionsMemory {
// 
//     private final Map<LocalDateTime, Integer> selectedSessions = new ConcurrentHashMap<>();
// 
//     @Inject
//     public SelectedSessionsMemory() {
//     }
// 
//     public boolean isSelected(Session session) {
//         Integer sessionId = selectedSessions.get(session.getFromTime());
//         return sessionId != null && session.getId() == sessionId;
//     }
// 
//     public void setSelectedSessions(Map<LocalDateTime, Integer> selectedSessions) {
//         this.selectedSessions.clear();
//         this.selectedSessions.putAll(selectedSessions);
//     }
// 
//     public Integer get(LocalDateTime slotTime) {
//         return selectedSessions.get(slotTime);
//     }
// 
//     public void toggleSessionState(com.nilhcem.droidconde.data.app.model.Session session, boolean insert) {
//         selectedSessions.remove(session.getFromTime());
//         if (insert) {
//             selectedSessions.put(session.getFromTime(), session.getId());
//         }
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/Room.java
// public enum Room {
// 
//     NONE(0, ""),
//     STAGE_1(1, "Stage 1"),
//     STAGE_2(2, "Stage 2"),
//     STAGE_3(3, "Stage 3"),
//     STAGE_4(4, "Stage 4"),
//     WORKSPACE(5, "Workspace");
// 
//     public final int id;
//     public final String label;
// 
//     Room(int id, String label) {
//         this.id = id;
//         this.label = label;
//     }
// 
//     public static Room getFromId(int id) {
//         for (Room room : Room.values()) {
//             if (room.id == id) {
//                 return room;
//             }
//         }
//         return NONE;
//     }
// 
//     public static Room getFromLabel(@NonNull String label) {
//         for (Room room : Room.values()) {
//             if (label.equals(room.label)) {
//                 return room;
//             }
//         }
//         return NONE;
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/ScheduleSlot.java
// @Value
// public class ScheduleSlot implements Parcelable {
// 
//     public static final Parcelable.Creator<ScheduleSlot> CREATOR = new Parcelable.Creator<ScheduleSlot>() {
//         public ScheduleSlot createFromParcel(Parcel source) {
//             return new ScheduleSlot(source);
//         }
// 
//         public ScheduleSlot[] newArray(int size) {
//             return new ScheduleSlot[size];
//         }
//     };
// 
//     LocalDateTime time;
//     List<Session> sessions;
// 
//     public ScheduleSlot(LocalDateTime time, List<Session> sessions) {
//         this.time = time;
//         this.sessions = sessions;
//     }
// 
//     protected ScheduleSlot(Parcel in) {
//         time = (LocalDateTime) in.readSerializable();
//         sessions = in.createTypedArrayList(Session.CREATOR);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeSerializable(time);
//         dest.writeTypedList(sessions);
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/data/app/model/Session.java
// @Value
// public class Session implements Parcelable {
// 
//     public static final Parcelable.Creator<Session> CREATOR = new Parcelable.Creator<Session>() {
//         public Session createFromParcel(Parcel source) {
//             return new Session(source);
//         }
// 
//         public Session[] newArray(int size) {
//             return new Session[size];
//         }
//     };
// 
//     int id;
//     String room;
//     List<Speaker> speakers;
//     String title;
//     String description;
//     LocalDateTime fromTime;
//     LocalDateTime toTime;
// 
//     public Session(int id, String room, List<Speaker> speakers, String title, String description, LocalDateTime fromTime, LocalDateTime toTime) {
//         this.id = id;
//         this.room = room;
//         this.speakers = speakers;
//         this.title = title;
//         this.description = description;
//         this.fromTime = fromTime;
//         this.toTime = toTime;
//     }
// 
//     protected Session(Parcel in) {
//         id = in.readInt();
//         room = in.readString();
//         speakers = in.createTypedArrayList(Speaker.CREATOR);
//         title = in.readString();
//         description = in.readString();
//         fromTime = (LocalDateTime) in.readSerializable();
//         toTime = (LocalDateTime) in.readSerializable();
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(id);
//         dest.writeString(room);
//         dest.writeTypedList(speakers);
//         dest.writeString(title);
//         dest.writeString(description);
//         dest.writeSerializable(fromTime);
//         dest.writeSerializable(toTime);
//     }
// }


// Path: app/src/main/java/com/nilhcem/droidconde/ui/schedule/day/ScheduleDayFragmentAdapterAllSessions.java
import android.support.v4.util.Pair;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import com.nilhcem.droidconde.data.app.SelectedSessionsMemory;
import com.nilhcem.droidconde.data.app.model.Room;
import com.nilhcem.droidconde.data.app.model.ScheduleSlot;
import com.nilhcem.droidconde.data.app.model.Session;
import com.squareup.picasso.Picasso;
import java.util.List;
import java8.util.stream.Collectors;
import static java8.util.stream.StreamSupport.stream;

package com.nilhcem.droidconde.ui.schedule.day;






public class ScheduleDayFragmentAdapterAllSessions extends RecyclerView.Adapter<ScheduleDayEntry> {

    private final List<Pair<Session, ScheduleSlot>> sessions;
    private final Picasso picasso;
    private final SelectedSessionsMemory selectedSessionsMemory;