Android Open Source - student_travel_app Plan Generator






From Project

Back to project page student_travel_app.

License

The source code is released under:

Apache License

If you think the Android project student_travel_app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.piasy.simpletravel.model;
//  w w w  .  ja va2 s .c  o  m
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

//import com.baidu.mapapi.BMapManager;
//import com.baidu.mapapi.search.MKAddrInfo;
//import com.baidu.mapapi.search.MKBusLineResult;
//import com.baidu.mapapi.search.MKDrivingRouteResult;
//import com.baidu.mapapi.search.MKPlanNode;
//import com.baidu.mapapi.search.MKPoiResult;
//import com.baidu.mapapi.search.MKSearch;
//import com.baidu.mapapi.search.MKSearchListener;
//import com.baidu.mapapi.search.MKShareUrlResult;
//import com.baidu.mapapi.search.MKSuggestionResult;
//import com.baidu.mapapi.search.MKTransitRouteResult;
//import com.baidu.mapapi.search.MKWalkingRouteResult;
//import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.piasy.simpletravel.util.Util;

/**
 * Make a plan from a list of spots
 * */
public class PlanGenerator
{
//  BMapManager bMapManager;
//  MKSearch mSearch = new MKSearch();  //only last one is useful --> changed, it could have many instance TODO
//  String searchRouteId = "";      //TODO it will work with one mSearch
//  public PlanGenerator(BMapManager bMapManager)
//  {
//    this.bMapManager = bMapManager;
//    mSearch.init(bMapManager, new MKSearchListener()
//        {
//            @Override
//            public void onGetPoiDetailSearchResult(int type, int error) { }
//            @Override
//            public void onGetPoiResult(MKPoiResult res, int type, int error) { }
//            
//            @Override
//      public void onGetTransitRouteResult(MKTransitRouteResult res, int error)
//      {
//              boolean noresult = false;
//              
//              if (res == null || error != 0 || res.getNumPlan() == 0)
//              {
//                Log.d(Constant.LOG_LEVEL_DEBUG, "no result");
//                setNoRouteResult(searchRouteId);
//                noresult = true;
//              }
//              
//        if (!noresult)
//        {
//                int routeNum = res.getNumPlan();
//          int minTime = 24 * 3600, minIndex = 0;
//          ArrayList<String> others = new ArrayList<String>();
//            for (int i = 0; i < routeNum; i ++)
//            {
//              others.add(Util.routePlan2Json(res.getPlan(i)).toString());
//              if (res.getPlan(i).getTime() < minTime)
//              {
//                minTime = res.getPlan(i).getTime();
//                minIndex = i;
//              }
//            }
//            
//            others.remove(minIndex);
//            
//            String id = res.getStart().name + "||" + res.getEnd().name;
//            synchronized (routes)
//          {
//            for (int i = 0; i < routes.size(); i ++)
//            {
//              if (routes.get(i).containsKey(id))
//              {
//                RouteEntry route = routes.get(i).get(id);
//                route.route = res.getPlan(minIndex);
//                route.others = new JSONArray(others);
////                routes.get(i).put(id, route);
//                
//                synchronized (status)
//                {
//                  status.get(i).put(id, Boolean.valueOf(true));
//                }
//                break;
//              }
//            }
//          }
//            
//            Log.d(Constant.LOG_LEVEL_DEBUG, "get route " + minIndex + " : " 
//            + res.getStart().name + " -> " + res.getEnd().name + ", " + res.getPlan(minIndex).getTime() + " sec");
//        }
//        
//          if (genThread != null)
//          {
//            synchronized (genThread)
//          {
//              requestTask.cancel();
//              genThread.notify();
//          }
//          }
//      }
//      
//      @Override
//      public void onGetAddrResult(MKAddrInfo arg0, int arg1) {}
//      @Override
//      public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {}
//      @Override
//      public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {}
//      @Override
//      public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) {}
//      @Override
//      public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {}
//      @Override
//      public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}
//        });
//    mSearch.setPoiPageCapacity(Constant.POI_SEARCH_PAGE_CAPACITY);
//  }
//  
//  protected void setNoRouteResult(String id)
//  {
//    synchronized (routes)
//    {
//      for (int i = 0; i < routes.size(); i ++)
//      {
//        if (routes.get(i).containsKey(id))
//        {
//          RouteEntry route = routes.get(i).get(id);
//          route.route = null;
//          route.others = new JSONArray();
//          
//          synchronized (status)
//          {
//            status.get(i).put(id, Boolean.valueOf(true));
//          }
//          break;
//        }
//      }
//    }
//  }
//  
//  /**
//   * spot/hotel:
//   * {
//   * "name" : name,  //string
//   * "city" : city,  //string
//   * "latitude" : latitude,  //int
//   * "longitude" : longitude  //int
//   * }
//   * 
//   * */
//  ArrayList<JSONObject> chosedSpots = new ArrayList<JSONObject>();
//  ArrayList<ArrayList<JSONObject>> planedSpots = new ArrayList<ArrayList<JSONObject>>();
//  public boolean addSpot(JSONObject spot)
//  {
//    boolean ret = true;
//    synchronized (chosedSpots)
//    {
//      for (int i = 0; i < chosedSpots.size(); i ++)
//      {
//        try
//        {
//          if (chosedSpots.get(i).getString("name").equals(spot.getString("name"))
//           && chosedSpots.get(i).getString("city").equals(spot.getString("city")))
//          {
//            ret = false;
//            break;
//          }
//        }
//        catch (JSONException e)
//        {
//          if (e.getMessage() == null)
//              {
//            Log.e(Constant.LOG_LEVEL_ERROR, "PlanGenerator addSpot : JSONException");
//              }
//              else
//              {
//                Log.e(Constant.LOG_LEVEL_ERROR, "PlanGenerator addSpot : " + e.getMessage());
//          }
//        }
//      }
//      
//      if (ret)
//      {
//        chosedSpots.add(spot);
//      }
//    }
//    
//    return ret;
//  }
//  
//  int planDays = 2;
//  public void setPlanDays(int planDays)
//  {
//    this.planDays = planDays;
//  }
//  
//  JSONObject hotel = null;
//  boolean hasAddHotel = false;
//  public boolean setHotel(JSONObject hotel)
//  {
//    boolean ret = false;
//    
//    this.hotel = hotel;
//    
//    synchronized (planedSpots)
//    {
//      if (!hasAddHotel)
//      {
//        if (planedSpots.size() != 0)
//        {
//          hasAddHotel = true;
//          for (int i = 0; i < planedSpots.size(); i ++)
//          {
//            planedSpots.get(i).add(0, hotel);
//          }
//        }
//      }
//      else
//      {
//        for (int i = 0; i < planedSpots.size(); i ++)
//        {
//          planedSpots.get(i).set(0, hotel);
//        }
//      }
//      
//      ret = true;
//    }
//    
//    return ret;
//  }
//  
//  public ArrayList<ArrayList<JSONObject>> adjust(int prevDay, int index, int day)
//  {
//    if ((0 <= prevDay) && (prevDay < planDays)
//     && (0 <= day) && (prevDay < day))
//    {
//      synchronized (planedSpots)
//      {
//        ArrayList<JSONObject> oneday = planedSpots.get(prevDay);
//        if ((0 <= index) && (index < oneday.size()))
//        {
//          planedSpots.get(day).add(oneday.remove(index));
//        }
//      }
//    }
//    
//    return getPlan();
//  }
//  
//  public ArrayList<ArrayList<JSONObject>> getPlan()
//  {
//    synchronized (planedSpots)
//    {
//      if (planedSpots.size() == 0)
//      {
//        synchronized (chosedSpots)
//        {
//          int size = (int) Math.ceil((double) chosedSpots.size() / (double) planDays), pos = 0;
//          Log.d(Constant.LOG_LEVEL_DEBUG, "chosedSpots size = " + chosedSpots.size());
//          Log.d(Constant.LOG_LEVEL_DEBUG, "size = " + size);
//          
//          for (int i = 0; i < planDays; i ++)
//          {            
//            if (chosedSpots.size() <= pos)
//            {
//              break;
//            }
//          
//            ArrayList<JSONObject> oneday = new ArrayList<JSONObject>();
//            if (hotel != null)
//            {
//              oneday.add(hotel);
//              hasAddHotel = true;
//            }
//            for (int j = 0; j < size; j ++)
//            {
//              if (chosedSpots.size() <= pos)
//              {
//                break;
//              }
//              
//              oneday.add(chosedSpots.get(pos));
//              pos ++;
//            }
//            
//            
//            planedSpots.add(oneday);
//          }
//        }
//      }
//      return planedSpots;
//    }
//  }
//  
//  boolean suggested = false;
//  public ArrayList<ArrayList<JSONObject>> getSugPlan()
//  {
//    if (!suggested)
//    {
//      synchronized (planedSpots)
//      {
//        genThread.genSugPlan();
//      }
//      
//      suggested = true;
//    }
//    
//    return planedSpots;
//  }
//  
//  ArrayList<HashMap<String, RouteEntry>> routes = new ArrayList<HashMap<String,RouteEntry>>();
//  public ArrayList<HashMap<String, RouteEntry>> getRoutes()
//  {
//    return routes;
//  }
//  
//  ArrayList<HashMap<String, Boolean>> status = new ArrayList<HashMap<String,Boolean>>();
//  GenThread genThread;
//  public boolean genPlan()
//  {
//    boolean ret = false;
//    if (hotel != null)
//    {
//      genThread = new GenThread();
//      genThread.start();
//      
//      ret = true;
//    }
//    
//    return ret;
//    
////    MKPlanNode srcNode = new MKPlanNode();
////    srcNode.name = "?????";
////    srcNode.pt = new GeoPoint(39944504, 116346224);
////    
////    MKPlanNode destNode = new MKPlanNode();
////    destNode.name = "??????";
////    destNode.pt = new GeoPoint(40007792, 116214848);
////    mSearch.transitSearch("??", srcNode, destNode);
//  }
//
//  int finishedCount = 0;
//  public float finishPercentage()
//  {
//    finishedCount = 0;
//    synchronized (status)
//    {
//      for (int i = 0; i < status.size(); i ++)
//      {
//        for (String key : status.get(i).keySet())
//        {
//          if (status.get(i).get(key).booleanValue())
//          {
//            finishedCount ++;
//          }
//        }          
//      }
//    }
//        
//    return (float) finishedCount / (float) routeCount;
//  }
//    
//  Timer requestTimer = new Timer();
//  
//  class ReRequestTask extends TimerTask
//  {
//    RouteEntry route;
//    public ReRequestTask(RouteEntry route)
//    {
//      this.route = route;
//    }
//    
//    @Override
//    public void run()
//    {
//      mSearch.transitSearch(route.city, route.srcNode, route.destNode);
//      
//      Log.d(Constant.LOG_LEVEL_DEBUG, "resend transit search request : "
//          + route.srcNode.name + " -> " + route.destNode.name);
//    }
//    
//  }
//  
//  ReRequestTask requestTask;
//  
//  int routeCount = 0;
//  /**
//   * */
//  class GenThread extends Thread
//  {
//    
//    boolean finished = false;
//    @Override
//    public void run()
//    {
//      synchronized (this)
//      {
//        synchronized (planedSpots)
//        {
//          Log.d(Constant.LOG_LEVEL_DEBUG, "planedSpots size = " + planedSpots.size());
//          for (int i = 0; i < planedSpots.size(); i ++)
//          {
//            HashMap<String, RouteEntry> onedayRoute = new HashMap<String, RouteEntry>();
//            ArrayList<JSONObject> oneday = planedSpots.get(i);
//            HashMap<String, Boolean> onedayStatus = new HashMap<String, Boolean>();
//            Log.d(Constant.LOG_LEVEL_DEBUG, "oneday size = " + oneday.size());
//            for (int j = 0; j < oneday.size(); j ++)
//            {
//              for (int k = 0; k < oneday.size(); k ++)
//              {
//                if (k == j)
//                {
//                  continue;
//                }
//                
//                try
//                {
//                  JSONObject src = oneday.get(j);
//                  JSONObject dest = oneday.get(k);
//                  
//                  MKPlanNode srcNode = new MKPlanNode();
//                  srcNode.name = src.getString("name");
//                  srcNode.pt = new GeoPoint(src.getInt("latitude"), src.getInt("longitude"));
//                  
//                  MKPlanNode destNode = new MKPlanNode();
//                  destNode.name = dest.getString("name");
//                  destNode.pt = new GeoPoint(dest.getInt("latitude"), dest.getInt("longitude"));
//                  
//                  onedayStatus.put(srcNode.name + "||" + destNode.name, 
//                      Boolean.valueOf(false));
//                  
//                  RouteEntry route = new RouteEntry(srcNode, destNode, src.getString("city"));
//                  onedayRoute.put(srcNode.name + "||" + destNode.name, route);
//                  
//                  Log.d(Constant.LOG_LEVEL_DEBUG, "route : " + srcNode.name + "||" + destNode.name);
//                  routeCount ++;
//                }
//                catch (JSONException e)
//                {
//                  if (e.getMessage() == null)
//                      {
//                        Log.e(Constant.LOG_LEVEL_ERROR, "Controller GenThread : JSONException");
//                      }
//                      else
//                      {
//                        Log.e(Constant.LOG_LEVEL_ERROR, "Controller GenThread : " + e.getMessage());
//                  }
//                }
//              }
//            }
//            synchronized (status)
//            {
//              status.add(onedayStatus);
//            }
//            synchronized (routes)
//            {
//              routes.add(onedayRoute);
//            }
//          }
//          
//          Log.d(Constant.LOG_LEVEL_DEBUG, "routes size = " + routes.size());
//          Log.d(Constant.LOG_LEVEL_DEBUG, "routeCount = " + routeCount);
//          
//          for (int i = 0; i < routes.size(); i ++)
//          {
//            HashMap<String, RouteEntry> onedayRoute = routes.get(i);
//            for (String id : onedayRoute.keySet())
//            {
//              RouteEntry route = onedayRoute.get(id);
//              searchRouteId = id;
//              mSearch.transitSearch(route.city, route.srcNode, route.destNode);
//              Log.d(Constant.LOG_LEVEL_DEBUG, "send transit search request : " + id);
//              
//              requestTask = new ReRequestTask(route);
//              requestTimer.schedule(requestTask, Constant.ROUTE_REQUESR_TIMEOUT, Constant.ROUTE_REQUESR_INTERVAL);
//              try
//              {
//                this.wait();
//              }
//              catch (InterruptedException e)
//              {
//                e.printStackTrace();
//              }
//            }
//          }
//          
//          genSugPlan();
//        }
//      }
//    }
//    
//    public void genSugPlan()
//    {
//      for (int i = 0; i < planedSpots.size(); i ++)
//      {
//        planDFS(planedSpots.get(i), 1, planedSpots.get(i).size() - 1, i);
//        ArrayList<JSONObject> tmp = new ArrayList<JSONObject>(shortest);
//        planedSpots.set(i, tmp);
//        shortest.clear();
//        minTime = 999999999;
//      }
//    }
//    
//    ArrayList<JSONObject> shortest = new ArrayList<JSONObject>();
//    int minTime = 999999999;
//    protected void planDFS(ArrayList<JSONObject> oneday, int begin, int end, int day)
//    {
//      if (begin == end)
//      {
//        int time = 0;
//        HashMap<String, RouteEntry> onedayRoute = routes.get(day);
//        try
//        {
//          for (int i = 1; i < oneday.size(); i ++)
//          {
//            String id = oneday.get(i - 1).getString("name") + "||" 
//                  + oneday.get(i).getString("name");
//            if (onedayRoute.get(id).route != null)
//            {
//              time += onedayRoute.get(id).route.getTime();
//            }
//          }
//          
//          String id = oneday.get(oneday.size() - 1).getString("name") + "||" 
//                + oneday.get(0).getString("name");
//          if (onedayRoute.get(id).route != null)
//          {
//            time += onedayRoute.get(id).route.getTime();
//          }
//          
//          if (time < minTime)
//          {
//            shortest.clear();
//            shortest.addAll(oneday);
//            minTime = time;
//          }
//        }
//        catch (JSONException e)
//        {
//          if (e.getMessage() == null)
//              {
//                Log.e(Constant.LOG_LEVEL_ERROR, "Controller planDFS : JSONException");
//              }
//              else
//              {
//                Log.e(Constant.LOG_LEVEL_ERROR, "Controller planDFS : " + e.getMessage());
//          }
//        }
//      }
//      else
//      {
//        for (int i = begin; i <= end; i ++)
//        {
//          swap(oneday, begin, i);
//          
//          planDFS(oneday, begin + 1, end, day);
//          
//          swap(oneday, i, begin);
//        }
//      }
//    }
//    
//    protected void swap(ArrayList<JSONObject> oneday, int i, int j)
//    {
//      JSONObject tmp = oneday.get(i);
//      oneday.set(i, oneday.get(j));
//      oneday.set(j, tmp);
//    }
//  }
}




Java Source Code List

com.piasy.simpletravel.AllPlanActivity.java
com.piasy.simpletravel.HotelDetailActivity.java
com.piasy.simpletravel.LaunchActivity.java
com.piasy.simpletravel.MapViewActivity.java
com.piasy.simpletravel.MyListViewAdapter.java
com.piasy.simpletravel.PopMenu.java
com.piasy.simpletravel.ScrollRefreshListView.java
com.piasy.simpletravel.SearchActivity.java
com.piasy.simpletravel.SettingActivity.java
com.piasy.simpletravel.SignupActivity.java
com.piasy.simpletravel.SimpleTravelApplication.java
com.piasy.simpletravel.SingledayPlanActivity.java
com.piasy.simpletravel.SpotDetailActivity.java
com.piasy.simpletravel.controller.Controller.java
com.piasy.simpletravel.dao.DBHelper.java
com.piasy.simpletravel.dao.DBManager.java
com.piasy.simpletravel.model.CommitModule.java
com.piasy.simpletravel.model.Constant.java
com.piasy.simpletravel.model.Flag.java
com.piasy.simpletravel.model.HotelSeacher.java
com.piasy.simpletravel.model.ListViewItems.java
com.piasy.simpletravel.model.LocationModule.java
com.piasy.simpletravel.model.PlanGenerator.java
com.piasy.simpletravel.model.RouteEntry.java
com.piasy.simpletravel.model.Setting.java
com.piasy.simpletravel.model.SignupModule.java
com.piasy.simpletravel.model.SpotsSeacher.java
com.piasy.simpletravel.model.VerifyModule.java
com.piasy.simpletravel.util.Util.java
dao.DBManager.java
driver.Driver.java
model.CommitHandler.java
model.Constant.java
model.QueryHandler.java
model.Setting.java
model.SignupHandler.java
model.VerifyHandler.java
parser.Driver.java
parser.HotelSeacher.java
util.Util.java