package org.pyneo.tabulae.track;
import android.database.sqlite.SQLiteDatabase;
import org.pyneo.thinstore.StoreObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.mapsforge.core.model.LatLong;
import static org.pyneo.tabulae.track.Constants.*;
public class TrackItem extends StoreObject {
static public final int CATEGORY_IMPORTED = 32122;
static public final int CATEGORY_RECORDED = 52813;
static public final int CATEGORY_TRAFFIC = 12910;
String name; // @Unique @NotNull
String description;
String comment;
Date timestamp;
boolean visible = true;
int pointcount = -1;
long duration = -1;
long distance = -1;
int categoryid = -1;
int activityid = -1;
int cropto = -1;
int cropfrom = -1;
volatile List<TrackPointItem> trackPointItems;
public TrackItem() {
}
public TrackItem(String name, String description) {
this.name = name;
this.description = description;
trackPointItems = null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public void add(SQLiteDatabase db, TrackPointItem trackPointItem) throws Exception {
//trackPointItem.track = this;
getTrackPointItems(db).add(trackPointItem);
if (getId() >= 0) {
trackPointItem.trackId = getId();
if (db != null) {
trackPointItem.insert(db);
}
}
}
public List<TrackPointItem> getTrackPointItems(SQLiteDatabase db) throws Exception {
if (trackPointItems == null) {
if (getId() >= 0) {
trackPointItems = (List)query(db, TrackPointItem.class).where("trackId").equal(getId()).fetchAll();
}
else {
trackPointItems = new ArrayList<>();
}
}
return trackPointItems;
}
public StoreObject insert(SQLiteDatabase db) throws Exception {
super.insert(db);
if (trackPointItems != null) {
for (TrackPointItem trackPointItem : getTrackPointItems(db)) {
if (trackPointItem.trackId >= 0 && trackPointItem.trackId != getId()) {
throw new Exception("assertion failed id=" + getId() + ", point.trackId=" + trackPointItem.trackId);
}
trackPointItem.trackId = getId();
trackPointItem.insert(db);
}
}
return this;
}
public List<LatLong> getTrackLatLongs(SQLiteDatabase db) throws Exception {
List<LatLong> list = new ArrayList<>();
for (TrackPointItem trackPointItem : getTrackPointItems(db)) {
list.add(new LatLongTagged(trackPointItem));
}
return list;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public int getPointcount() {
return pointcount;
}
public void setPointcount(int pointcount) {
this.pointcount = pointcount;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
public long getDistance() {
return distance;
}
public void setDistance(long distance) {
this.distance = distance;
}
public int getCategoryid() {
return categoryid;
}
public void setCategoryid(int categoryid) {
this.categoryid = categoryid;
}
public int getActivityid() {
return activityid;
}
public void setActivityid(int activityid) {
this.activityid = activityid;
}
public int getCropto() {
return cropto;
}
public void setCropto(int cropto) {
this.cropto = cropto;
}
public int getCropfrom() {
return cropfrom;
}
public void setCropfrom(int cropfrom) {
this.cropfrom = cropfrom;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public static int deleteCategory(SQLiteDatabase db, int categoryid) throws Exception {
return StoreObject.query(db, TrackItem.class)
.where("categoryid").equal(categoryid)
.delete();
}
public static class LatLongTagged extends LatLong {
public TrackPointItem trackPointItem;
public LatLongTagged(TrackPointItem trackPointItem) {
super(trackPointItem.latitude, trackPointItem.longitude);
this.trackPointItem = trackPointItem;
}
}
}