package service.servlet;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.Message;
import service.NearbyPhoto;
import service.NearbyPhotoDetail;
import service.utils.LocationUtil;
public class NearByPhotoServlet extends CommonServlet
{
@Override
protected void execute(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
List<NearbyPhoto> nearPhotos = new ArrayList<NearbyPhoto>();
try
{
double latitude = Double.parseDouble(request.getParameter("latitude"));
double longitude = Double.parseDouble(request.getParameter("longitude"));
PreparedStatement preparedStatement = null;
String sql = "select p.*, u.*, RAND() as Random from t_kx_photos p " +
"left join t_kx_users u on u.id = p.user_id " +
"where p.latitude > ? -1 and " +
"p.latitude < ? +1 and " +
"p.longitude > ? -1 and " +
"p.longitude < ? +1 and " +
"u.email <> ? " +
"order by Random, ACOS(SIN((? * 3.1415) / 180 ) *SIN((p.latitude * 3.1415) / 180 ) +COS((? * 3.1415) / 180 ) * COS((p.latitude * 3.1415) / 180 ) *COS((? * 3.1415) / 180 - (p.longitude * 3.1415) / 180 ) ) * 6380 asc limit 50";
preparedStatement = mConnection
.prepareStatement(sql);
preparedStatement.setDouble(1, latitude);
preparedStatement.setDouble(2, latitude);
preparedStatement.setDouble(3, longitude);
preparedStatement.setDouble(4, longitude);
preparedStatement.setString(5, mUsername);
preparedStatement.setDouble(6, latitude);
preparedStatement.setDouble(7, latitude);
preparedStatement.setDouble(8, longitude);
ResultSet rs = preparedStatement.executeQuery();
String address = "";
List<NearbyPhotoDetail> photos = null;
NearbyPhoto nearPhoto = null;
while (rs.next())
{
if(address.equals(rs.getString("location"))){
nearPhoto = nearPhotos.get(nearPhotos.size() - 1);
photos = nearPhotos.get(nearPhotos.size() - 1).getImages();
NearbyPhotoDetail photo = new NearbyPhotoDetail();
photo.setImage(rs.getString("photo_filename"));
photo.setOwners_avatar(rs.getString("u.avatar"));
photo.setLike_count(rs.getInt("like_count"));
photo.setComment_count(rs.getInt("comment_count"));
photo.setOwners_name(rs.getString("u.name"));
photo.setOwners_uid(rs.getString("u.id"));
photos.add(photo);
nearPhoto.setImages(photos);
nearPhoto.setCount(nearPhoto.getCount() + 1);
nearPhotos.set(nearPhotos.size() - 1, nearPhoto);
}else{
nearPhoto = new NearbyPhoto();
photos = new ArrayList<NearbyPhotoDetail>();
NearbyPhotoDetail photo = new NearbyPhotoDetail();
photo.setImage(rs.getString("photo_filename"));
photo.setOwners_avatar(rs.getString("u.avatar"));
photo.setLike_count(rs.getInt("like_count"));
photo.setComment_count(rs.getInt("comment_count"));
photo.setOwners_name(rs.getString("u.name"));
photo.setOwners_uid(rs.getString("u.id"));
photos.add(photo);
nearPhoto.setPid(rs.getString("p.id"));
nearPhoto.setImage(rs.getString("photo_filename"));
nearPhoto.setLocation(rs.getString("p.location"));
nearPhoto.setImages(photos);
nearPhoto.setCount(nearPhoto.getCount() + 1);
double distance = LocationUtil.getDistance(longitude, latitude, rs.getDouble("p.longitude"), rs.getDouble("p.latitude"));
nearPhoto.setDistance(distance);
nearPhotos.add(nearPhoto);
address = rs.getString("location");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
sendJSON(nearPhotos, response);
// sendObject(diaries, response);
}
}