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; } }