DataTableWaypoints.java :  » GPS » tripcomputer » pl » tripcomputer » data » tables » Android Open Source

Android Open Source » GPS » tripcomputer 
tripcomputer » pl » tripcomputer » data » tables » DataTableWaypoints.java
package pl.tripcomputer.data.tables;

import java.util.ArrayList;
import java.util.Collections;
import java.util.UUID;

import pl.tripcomputer.UserAlert;
import pl.tripcomputer.common.CommonActivity;
import pl.tripcomputer.data.common.DataField;
import pl.tripcomputer.data.common.DataRowSet;
import pl.tripcomputer.data.common.DataTable;
import pl.tripcomputer.data.common.DataTableOperation;
import pl.tripcomputer.data.common.DataValues;
import pl.tripcomputer.data.common.Database;
import pl.tripcomputer.data.items.DataItemWaypoint;
import android.database.Cursor;


public class DataTableWaypoints extends DataTable
{
  //limits
  private final static int NAME_SIZE_LIMIT = 32;
  private final static int DESC_SIZE_LIMIT = 400;
  
  
  //generic collection class
  public class RowSet extends DataRowSet<DataItemWaypoint>
  {
    public RowSet(DataTable table)
    {
      super(table);
    }
    protected DataItemWaypoint getItem(Cursor cr)
    {
      return new DataItemWaypoint(cr);
    }
  }

  protected DataRowSet<DataItemWaypoint> rows = null;
  
  
  //fields
  public final static String sTableName = "Waypoints";

  public static class field
  {
    //DataItemGeoPoint
    public static final int ID = 0;
    public static final int TrackID = 1;
    public static final int Lon = 2;
    public static final int Lat = 3;
    public static final int Altitude = 4;
    public static final int TimeUTC = 5;
    public static final int Accuracy = 6; //not used in waypoint, can be changed for future use
    public static final int Speed = 7; //not used in waypoint, can be changed for future use
    public static final int Sent = 8; //changed from Bearing in DataTableGeoPoints
    public static final int CreationTime = 9;
    //DataItemWaypoint
    public static final int Name = 10;
    public static final int Description = 11;
    public static final int Type = 12;
    public static final int Public = 13;
    public static final int UID = 14;
  };
  
  private final static DataField[] vecTableDefinition =
  {
    //DataItemGeoPoint
    new DataField(field.ID, DataTable.sID, DataField.TYPE_INT, false, true, false),
    new DataField(field.TrackID, "TrackID", DataField.TYPE_INT, false, false, false),
    new DataField(field.Lon, "Lon", DataField.TYPE_NUMERIC, false, false, true),
    new DataField(field.Lat, "Lat", DataField.TYPE_NUMERIC, false, false, true),
    new DataField(field.Altitude, "Altitude", DataField.TYPE_INT, false, false, true),
    new DataField(field.TimeUTC, "TimeUTC", DataField.TYPE_INT, false, false, false),
    new DataField(field.Accuracy, "Accuracy", DataField.TYPE_INT, true, false, false),
    new DataField(field.Speed, "Speed", DataField.TYPE_INT, true, false, false),
    new DataField(field.Sent, "Bearing", DataField.TYPE_BOOL, false, false, false),
    new DataField(field.CreationTime, "CreationTime", DataField.TYPE_INT, false, false, false),
    
    //DataItemWaypoint    
    new DataField(field.Name, "Name", DataField.TYPE_TEXT, false, false, true),
    new DataField(field.Description, "Description", DataField.TYPE_TEXT, true, false, true),
    new DataField(field.Type, "Type", DataField.TYPE_INT, false, false, true),
    new DataField(field.Public, "PhotoID", DataField.TYPE_BOOL, false, false, false), //field function changed
    new DataField(field.UID, "UID", DataField.TYPE_TEXT, false, false, false),
  };
  

  //methods
  public DataTableWaypoints(Database dataBase)
  {
    super(dataBase, sTableName, vecTableDefinition);
    rows = new RowSet(this);
  }

  public DataValues getNewValues(boolean bForInsert)
  {
    final DataValues values = new DataValues(this);
    
    if (bForInsert)
    {      
      values.setValue(DataTableGeoPoints.field.TrackID, -1);

      values.setValue(field.Altitude, 0);
      values.setValue(field.TimeUTC, 0);
      values.setValue(field.Accuracy, 0);
      values.setValue(field.Speed, 0);
      values.setValueCurrentTime(field.CreationTime);    

      values.setValue(field.UID, UUID.randomUUID().toString());
      values.setValue(field.Public, false);
      values.setValue(field.Sent, false);
    }
    
    return values;
  }
  
  public int getTableVersion()
  {
    return 1;
  }
  
  public UserAlert.Result validateValues(DataValues values)
  {
    //check name
    final String sName = values.getString(field.Name);
    if (sName.length() > NAME_SIZE_LIMIT)
      return UserAlert.Result.NAME_TOO_LONG;

    //check desc
    final String sDescription = values.getString(field.Description);
    if (sDescription.length() > DESC_SIZE_LIMIT)
      return UserAlert.Result.DESC_TOO_LONG;

    //check location
    final double dLon = values.getDouble(field.Lon);
    final double dLat = values.getDouble(field.Lat);
          
    if ((dLon < -180) || (dLon > 180))
      return UserAlert.Result.LON_OUT_OF_RANGE;
    
    if ((dLat < -90) || (dLat > 90))
      return UserAlert.Result.LAT_OUT_OF_RANGE;            
    
    //all ok
    return null;
  }  

  public DataItemWaypoint getWaypointItem(long lWaypointId)
  {    
    final Cursor cr = getDataRecord(lWaypointId);
    if (cr != null)
    {
      DataItemWaypoint item = new DataItemWaypoint(cr);      
      cr.close();
      return item;
    }
    return null;
  }
  
  private ArrayList<Long> getVisibleWaypoints()
  {
    ArrayList<Long> list = new ArrayList<Long>(); 
    
    final String sOrderBy = getFieldName(field.CreationTime) + " desc";
    
    final ArrayList<DataItemWaypoint> items = rows.getRecords(null, sOrderBy);    
    if (items != null)
    {
      for (DataItemWaypoint dataWaypointItem : items)
      {
        list.add(dataWaypointItem.iID);
      }
    }
    
    return list;
  }
  
  public ArrayList<Long> getVisibleWaypointsRotated(long lFirstWaypointId)
  {
    final ArrayList<Long> list = getVisibleWaypoints();
    
    //get selected item position
    int iListIndex = list.indexOf(lFirstWaypointId);
    if (iListIndex != -1)
    {
      //shift items list, selected item to zero position
      Collections.rotate(list, -iListIndex);      
    }
    
    return list;
  }  
  
  public boolean deleteWaypoint(long lWaypointId)
  {
    if (dataDelete(lWaypointId))
    {
      sendOperation(lWaypointId, DataTableOperation.OP_DELETE);
      return true;
    }    
    return false;
  }

  public boolean setUploadStatus(long lWaypointId, boolean bPublic, boolean bSent)
  {
    boolean bSuccess = false;    
    final DataItemWaypoint item = getWaypointItem(lWaypointId);
    if (item != null)
    {
      DataValues values = new DataValues(this);
              
      if (bPublic)
        values.setValue(field.Public, true);
      
      values.setValue(field.Sent, bSent);
        
      bSuccess = dataUpdate(values, lWaypointId);
      
      if (bSuccess)
      {
        sendOperation(lWaypointId, DataTableOperation.OP_UPDATE);
      }           
    }
    return bSuccess;
  }
  
  public long addWaypoint(CommonActivity parent, DataItemWaypoint item)
  {
    final DataValues values = item.getDataValues(this);      
    if (values.valuesComplete())
    {
      final UserAlert.Result validationResult = this.validateValues(values);
      if (validationResult == null)
      {
        final long lRowID = this.dataInsert(values);
        if (lRowID == -1)
        {
          UserAlert.show(parent, UserAlert.Result.DATA_INSERT_ERROR);
        } else {
          return lRowID;
        }
      } else {
        UserAlert.show(parent, validationResult);
      }
    } else {
      UserAlert.show(parent, UserAlert.Result.ENTER_ALL_DATA);
    }
    return -1;
  }
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.