/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.api;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import com.galaxy.meetup.client.android.content.DbLocation;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsPostsData;
import com.galaxy.meetup.client.android.network.PlusiOperation;
import com.galaxy.meetup.client.android.network.http.HttpOperation;
import com.galaxy.meetup.client.util.PrimitiveUtils;
import com.galaxy.meetup.server.client.domain.LocationResult;
import com.galaxy.meetup.server.client.domain.request.SnapToPlaceRequest;
import com.galaxy.meetup.server.client.domain.response.SnapToPlaceResponse;
import com.galaxy.meetup.server.client.v2.request.Request;
import com.galaxy.meetup.server.client.v2.response.Response;
/**
*
* @author sihai
*
*/
public class SnapToPlaceOperation extends PlusiOperation {
private DbLocation mCoarseLocation;
private DbLocation mFirstPlace;
private final boolean mIsPlaceSearch;
private final LocationQuery mLocationQuery;
private final DbLocation mOmitLocation;
private DbLocation mPreciseLocation;
private final boolean mStoreResult;
public SnapToPlaceOperation(Context context, EsAccount esaccount, Intent intent, HttpOperation.OperationListener operationlistener, LocationQuery locationquery, DbLocation dblocation, boolean flag)
{
super(context, esaccount, "snaptoplace", intent, operationlistener, SnapToPlaceResponse.class);
mLocationQuery = locationquery;
mOmitLocation = dblocation;
mStoreResult = flag;
mIsPlaceSearch = mLocationQuery.hasQueryString();
}
public final DbLocation getCoarseLocation()
{
return mCoarseLocation;
}
public final DbLocation getPlaceLocation()
{
return mFirstPlace;
}
public final DbLocation getPreciseLocation()
{
return mPreciseLocation;
}
protected final void handleResponse(Response response) throws IOException {
DbLocation dblocation = null;
ArrayList arraylist;
int i = 0;
SnapToPlaceResponse snaptoplaceresponse = (SnapToPlaceResponse)response;
if(snaptoplaceresponse.preciseLocation != null)
mPreciseLocation = new DbLocation(1, snaptoplaceresponse.preciseLocation.location);
if(snaptoplaceresponse.cityLocation != null)
mCoarseLocation = new DbLocation(2, snaptoplaceresponse.cityLocation.location);
List list = snaptoplaceresponse.localPlace;
int j;
DbLocation dblocation1;
if(list == null)
j = 0;
else
j = list.size();
if(PrimitiveUtils.safeBoolean(snaptoplaceresponse.userIsAtFirstPlace) && j > 0)
mFirstPlace = new DbLocation(3, ((LocationResult)list.get(0)).location);
if(!mStoreResult) {
return;
}
DbLocation dblocation2;
DbLocation dblocation3;
if(j > 0)
{
arraylist = new ArrayList(j);
for(; i < j; i++)
{
dblocation1 = new DbLocation(3, ((LocationResult)list.get(i)).location);
if(!dblocation1.isSamePlace(mOmitLocation))
arraylist.add(dblocation1);
}
} else
{
arraylist = null;
}
dblocation2 = mPreciseLocation;
dblocation3 = mCoarseLocation;
if(!mIsPlaceSearch) {
if(mOmitLocation != null)
{
if(mOmitLocation.isSamePlace(mPreciseLocation))
dblocation2 = null;
if(mOmitLocation.isSamePlace(mCoarseLocation))
{
dblocation = dblocation2;
dblocation3 = null;
EsPostsData.insertLocations(mContext, mAccount, mLocationQuery, dblocation, dblocation3, arraylist);
return;
}
}
dblocation = dblocation2;
} else {
dblocation3 = null;
}
EsPostsData.insertLocations(mContext, mAccount, mLocationQuery, dblocation, dblocation3, arraylist);
}
public final boolean hasCoarseLocation()
{
boolean flag;
if(mCoarseLocation != null)
flag = true;
else
flag = false;
return flag;
}
public final boolean hasPlaceLocation()
{
boolean flag;
if(mFirstPlace != null)
flag = true;
else
flag = false;
return flag;
}
public final boolean hasPreciseLocation()
{
boolean flag;
if(mPreciseLocation != null)
flag = true;
else
flag = false;
return flag;
}
protected final Request populateRequest()
{
SnapToPlaceRequest snaptoplacerequest = new SnapToPlaceRequest();
Location location = mLocationQuery.getLocation();
snaptoplacerequest.latitudeE7 = Integer.valueOf((int)(10000000D * location.getLatitude()));
snaptoplacerequest.longitudeE7 = Integer.valueOf((int)(10000000D * location.getLongitude()));
if(location.hasAccuracy())
snaptoplacerequest.precisionMeters = Double.valueOf(location.getAccuracy());
if(mLocationQuery.hasQueryString())
snaptoplacerequest.searchQuery = mLocationQuery.getQueryString();
return snaptoplacerequest;
}
}