package com.sjriley.zappit.models;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import com.google.gson.Gson;
import com.sjriley.zappit.PreferencesActivity;
import com.sjriley.zappit.services.UploadService;
import com.sjriley.zappit.vo.Campaign;
import com.sjriley.zappit.vo.CampaignRequest;
import com.sjriley.zappit.vo.CampaignResponse;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.util.Log;
import android.widget.Toast;
public class CampaignModel extends BaseModel
{
private static final String TAG = CampaignModel.class.getSimpleName();
public CampaignModel(Context context)
{
super(context);
}
public boolean downloadCampaigns(String userid) {
HttpPost request = new HttpPost("http://zappit.co/service/campaigns");
List<NameValuePair> nvp = new ArrayList<NameValuePair>();
Location location = getLocation();
CampaignRequest params = new CampaignRequest("Ma24sq2th", userid, location.getLatitude(),location.getLongitude());
Gson gson = new Gson();
nvp.add(new BasicNameValuePair("info", gson.toJson(params)));
nvp.add(new BasicNameValuePair("submit", "send"));
try
{
request.setEntity(new UrlEncodedFormEntity(nvp, HTTP.UTF_8));
HttpResponse response = httpClient.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
//Save file here
FileOutputStream fos;
try {
Log.d(TAG,"saving json file");
fos = context.openFileOutput(PreferencesActivity.CAMPAIGN_FILENAME, Context.MODE_PRIVATE);
fos.write(EntityUtils.toByteArray(response.getEntity()));
fos.close();
Log.d(TAG,"finished saving json file");
return true;
}
catch (Exception e){
Log.e(TAG, "could not save json file", e);
return false;
}
}
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
} catch (ClientProtocolException e)
{
e.printStackTrace();
} catch (IOException e)
{
Log.d(TAG, "could not download code - network connection");
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
private CampaignResponse getCampaigns(Context context) {
Log.d(TAG,"Getting Campaigns from file");
CampaignResponse result = new CampaignResponse();
//return null if we don't have the campaigns file
try
{
Log.d(TAG,"opening file");
FileInputStream fis = context.openFileInput(PreferencesActivity.CAMPAIGN_FILENAME);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
Gson gson = new Gson();
Log.d(TAG,"parsing with gson");
result = gson.fromJson(reader, CampaignResponse.class);
Log.d(TAG,"result returned from json");
Log.d(TAG,"status" + result.getStatus());
Log.d(TAG,"message" + result.getMessage());
fis.close();
return result;
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* Get the campaign for the given code
* @param context
* @param code
* @return
*/
public Campaign getCampaign(Context context, String code) {
CampaignResponse response = getCampaigns(context);
if (response == null) {
return null;
}
List<Campaign> campaigns = response.getCampaigns();
for (Campaign campaign : campaigns)
{
if(campaign != null & campaign.getCodes() != null) {
for (String string : campaign.getCodes())
{
Log.d(TAG, string);
}
if(campaign.getCodes().contains(code)) {
return campaign;
}
}
}
return null;
}
}