package com.yanp.way.route;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.yanp.way.DoubleArrayList;
import com.yanp.way.route.downloaded.DirectionsResponse;
import com.yanp.way.route.downloaded.Legs;
import com.yanp.way.route.downloaded.Step;
public class Route implements Parcelable,Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private ArrayList<DirectionsResponse> listSegment;
private String name;
private boolean save;
private boolean validate;
private DoubleArrayList<Double> pointsWhoDrawsPolyline;
private DoubleArrayList<Double> listLatLngMarkers; //List des points concernant les markers
private String dateCreation;
private String dateLastModification;
private int idHash;
private int indexCollection;
public Route(ArrayList<DirectionsResponse> listSegment,
String name,
boolean save,
ArrayList<LatLng> pointsWhoDrawPolyline,
ArrayList<LatLng> listLatLngMarkers,
boolean validate,
String dateCreation,
String dateLastModification,
int idHash,
int indexCollection){
this.listSegment=listSegment;
this.name=name;
this.save=save;
this.pointsWhoDrawsPolyline=new DoubleArrayList<Double>();
for(int i=0;i<pointsWhoDrawPolyline.size();i++){
this.pointsWhoDrawsPolyline.add(pointsWhoDrawPolyline.get(i).latitude,pointsWhoDrawPolyline.get(i).longitude);
}
this.listLatLngMarkers=new DoubleArrayList<Double>();
for(int i=0;i<listLatLngMarkers.size();i++){
this.listLatLngMarkers.add(listLatLngMarkers.get(i).latitude,listLatLngMarkers.get(i).longitude);
}
this.validate=validate;
this.dateCreation=dateCreation;
this.dateLastModification=dateLastModification;
this.idHash=idHash;
this.indexCollection=indexCollection;
}
public Route(String name, boolean save, boolean validate,String dateCreation) {
this.name = name;
this.save = save;
this.validate=validate;
this.listSegment = new ArrayList<DirectionsResponse>();
this.pointsWhoDrawsPolyline=new DoubleArrayList<Double>();
this.listLatLngMarkers=new DoubleArrayList<Double>();
this.dateCreation=dateCreation;
this.dateLastModification=dateCreation;
this.idHash=System.identityHashCode(this);
}
public Route(Parcel in){
this.listSegment = new ArrayList<DirectionsResponse>();
in.readList(this.listSegment, getClass().getClassLoader());
this.name = in.readString();
boolean[] bool = new boolean[2];
in.readBooleanArray(bool);
this.save = bool[0];
this.validate = bool[1];
this.pointsWhoDrawsPolyline=in.readParcelable(getClass().getClassLoader());
this.listLatLngMarkers=in.readParcelable(getClass().getClassLoader());
this.dateCreation=in.readString();
this.dateLastModification=in.readString();
this.idHash=in.readInt();
this.indexCollection=in.readInt();
}
public ArrayList<DirectionsResponse> getListSegment() {
return listSegment;
}
public void setListSegment(ArrayList<DirectionsResponse> listSegment) {
this.listSegment = listSegment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDateDerModif() {
return dateLastModification;
}
public void setDateDerModif(String dateDerModif) {
this.dateLastModification = dateDerModif;
}
public String getDateCreation() {
return dateCreation;
}
public void setDateCreation(String dateCreation) {
this.dateCreation = dateCreation;
}
public boolean isSave() {
return save;
}
public void setSave(boolean s) {
Date aujourdhui = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
this.dateCreation=shortDateFormat.format(aujourdhui);
this.save = s;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean v) {
this.validate = v;
}
public DoubleArrayList<Double> getPointsWhoDrawsPolyline() {
return pointsWhoDrawsPolyline;
}
public void setPointsWhoDrawsPolyline(
DoubleArrayList<Double> pointsWhoDrawsPolyline) {
this.pointsWhoDrawsPolyline = pointsWhoDrawsPolyline;
}
public ArrayList<LatLng> getPointsWhoDrawsPolylineLatLng() {
ArrayList<LatLng> lp = new ArrayList<LatLng>();
ArrayList<Double> ld = new ArrayList<Double>();
for(int i=0;i<this.pointsWhoDrawsPolyline.size();i++){
ld=this.pointsWhoDrawsPolyline.get(i);
LatLng tmp = new LatLng(ld.get(0), ld.get(1));
lp.add(tmp);
}
return lp;
}
public void setPointsWhoDrawsPolylineLatLng(ArrayList<LatLng> pwho) {
this.pointsWhoDrawsPolyline.clear();
Double lat,lng;
for(int i=0;i<pwho.size();i++){
lat = pwho.get(i).latitude;
lng = pwho.get(i).longitude;
this.pointsWhoDrawsPolyline.add(lat,lng);
}
}
public DoubleArrayList<Double> getListMarkers() {
return listLatLngMarkers;
}
public void setListMarkers(DoubleArrayList<Double> listMarkers) {
this.listLatLngMarkers = listMarkers;
}
public void setListMarkersMk(ArrayList<Marker> lm){
this.listLatLngMarkers.clear();
for(int i=0;i<lm.size();i++){
this.listLatLngMarkers.add(lm.get(i).getPosition().latitude, lm.get(i).getPosition().longitude);
}
}
public ArrayList<LatLng> getListMarkersLatLng() {
ArrayList<LatLng> lp = new ArrayList<LatLng>();
ArrayList<Double> ld = new ArrayList<Double>();
for(int i=0;i<this.listLatLngMarkers.size();i++){
ld=this.listLatLngMarkers.get(i);
LatLng tmp = new LatLng(ld.get(0), ld.get(1));
lp.add(tmp);
}
return lp;
}
public void setListMarkersLatLng(ArrayList<LatLng> lm) {
this.listLatLngMarkers.clear();
Double lat,lng;
for(int i=0;i<lm.size();i++){
lat = lm.get(i).latitude;
lng = lm.get(i).longitude;
this.listLatLngMarkers.add(lat,lng);
}
}
public int getIdHash() {
return idHash;
}
public void setIdHash(int idHash) {
this.idHash = idHash;
}
public int getIndexCollection() {
return indexCollection;
}
public void setIndexCollection(int indexCollection) {
this.indexCollection = indexCollection;
}
public static final Parcelable.Creator<Route> CREATOR = new Parcelable.Creator<Route>() {
@Override
public Route createFromParcel(Parcel source) {
return new Route(source);
}
@Override
public Route[] newArray(int size) {
return new Route[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.listSegment);
dest.writeString(this.name);
boolean[] arrayBool = { this.save,this.validate };
dest.writeBooleanArray(arrayBool);
dest.writeParcelable(this.pointsWhoDrawsPolyline,0);
dest.writeParcelable(this.listLatLngMarkers,0);
dest.writeString(this.dateCreation);
dest.writeString(this.dateLastModification);
dest.writeInt(this.idHash);
dest.writeInt(this.indexCollection);
}
public ArrayList<Step> getListSteps(){
ArrayList<Step> listSteps = new ArrayList<Step>();
List<Legs> listLegs = this.listSegment.get(0).getRoutes().get(0).getLegs();
for(int i=0;i<listLegs.size();i++){
listSteps.addAll(listLegs.get(i).getSteps());
}
return listSteps;
}
public int getDistTotal(){
int distTotal=0;
if(this.listSegment.size()>0){
List<Legs> listLegs = this.listSegment.get(0).getRoutes().get(0).getLegs();
for(int i=0;i<listLegs.size();i++){
distTotal+=listLegs.get(i).getDistance().getValue();
}
}
return distTotal;
}
public int getDureeTotal(){
int dureeTotal=0;
List<Legs> listLegs = this.listSegment.get(0).getRoutes().get(0).getLegs();
for(int i=0;i<listLegs.size();i++){
dureeTotal+=listLegs.get(i).getDuration().getValue();
}
return dureeTotal;
}
public String getStartAddress(){
return this.listSegment.get(0).getRoutes().get(0).getLegs().get(0).getStart_address();
}
public String getEndAddress(){
List<Legs> listLegs = this.listSegment.get(0).getRoutes().get(0).getLegs();
return listLegs.get(listLegs.size()-1).getEnd_address();
}
public void removeLastDR(){
this.listSegment.remove(this.listSegment.size()-1);
}
}