DownloaderV2.java :  » Stock » codestock2010 » com » aremaitch » codestock2010 » datadownloader » Android Open Source

Android Open Source » Stock » codestock2010 
codestock2010 » com » aremaitch » codestock2010 » datadownloader » DownloaderV2.java
/*
 * Copyright 2010-2011 Roger Heim
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.aremaitch.codestock2010.datadownloader;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;

import com.aremaitch.codestock2010.repository.ExperienceLevel;
import com.aremaitch.codestock2010.repository.Session;
import com.aremaitch.codestock2010.repository.Speaker;
import com.aremaitch.codestock2010.repository.Track;
import com.aremaitch.utils.ACLogger;

/**
 * Class for downloading data from CodeStock Version 2 API
 * @author Roger Heim, Aremaitch Consulting
 *
 */
public class DownloaderV2 {
  Context context = null;
  String roomsUrl = "";
  String speakersUrl = "";
  String sessionsUrl = "";
  
  List<Speaker> parsedSpeakers = new ArrayList<Speaker>();
  List<Track> parsedTracks = new ArrayList<Track>();
  List<Session> parsedSessions = new ArrayList<Session>();
  List<ExperienceLevel> parsedLevels = new ArrayList<ExperienceLevel>();
  
  public List<Speaker> getParsedSpeakers() {
    return parsedSpeakers;
  }
  
  public List<Track> getParsedTracks() {
    return parsedTracks;
  }
  
  public List<Session> getParsedSessions() {
    return parsedSessions;
  }
  
  public List<ExperienceLevel> getParsedLevels() {
    return parsedLevels;
  }
  
  public DownloaderV2(Context currentContext, String roomsUrl, String speakersUrl, String sessionsUrl) {
    this.context = currentContext;
    this.roomsUrl = roomsUrl;
    this.speakersUrl = speakersUrl;
    this.sessionsUrl = sessionsUrl;
  }
  
  public boolean getCodeStockData() {
    boolean result = true;
    
    //  not actually using room data
    try {
      getSpeakerData(this.speakersUrl);
      getSessionData(this.sessionsUrl);
    } catch (Exception ex) {
      result = false;
    }
    
    return result;
  }
  
  private void getSpeakerData(String speakersUrl) throws ClientProtocolException, IOException, JSONException {
    ACLogger.info("CodeStock Downloader", "getSpeakerData from " + speakersUrl);
    
    DefaultHttpClient hc = new DefaultHttpClient();
    HttpGet hg = new HttpGet(speakersUrl);
    
    HttpResponse response = hc.execute(hg);
    String queryResult = EntityUtils.toString(response.getEntity());
    JSONObject jObj;
      
    jObj = new JSONObject(queryResult);
    JSONArray dArray = jObj.getJSONArray("d");
    
    ACLogger.info("CodeStock Downloader", "Iterating over speaker array");

    for (int i = 0; i <= dArray.length() - 1; i++) {
      Speaker newSpeaker = new Speaker();
      JSONObject speakerJSON = dArray.getJSONObject(i);
      newSpeaker.setSpeakerBio(speakerJSON.getString("Bio"));
      newSpeaker.setCompany(speakerJSON.getString("Company"));
      newSpeaker.setSpeakerName(speakerJSON.getString("Name"));
      newSpeaker.setSpeakerPhotoUrl(speakerJSON.getString("PhotoUrl"));
      newSpeaker.setId(speakerJSON.getLong("SpeakerID"));
      newSpeaker.setTwitterHandle(speakerJSON.getString("TwitterID"));
      String temp = speakerJSON.getString("Website");
      if (temp.equalsIgnoreCase("http://"))
        newSpeaker.setWebSite("");
      else
        newSpeaker.setWebSite(speakerJSON.getString("Website"));
      
      parsedSpeakers.add(newSpeaker);
    }
    ACLogger.info("CodeStock Downloader", "Finished iterating over speaker array");
    
  }


  private void getSessionData(String sessionsUrl) throws ClientProtocolException, IOException, JSONException {
    ACLogger.info("CodeStock Downloader", "getSessionData from " + sessionsUrl);
    
    DefaultHttpClient hc = new DefaultHttpClient();
    HttpGet hg = new HttpGet(sessionsUrl);
    
    HttpResponse response = hc.execute(hg);
    String queryResult = EntityUtils.toString(response.getEntity());
    JSONObject jObj;

    jObj = new JSONObject(queryResult);
    JSONArray dArray = jObj.getJSONArray("d");

    ACLogger.info("CodeStock Downloader", "Iterating over session array");

    for (int i = 0; i <= dArray.length() - 1; i++) {
      Session newSession = new Session();
      String savedArea = "";
      
      JSONObject sessionJSON = dArray.getJSONObject(i);
      newSession.setSynopsis(sessionJSON.getString("Abstract"));

      JSONArray additionalSpeakers = sessionJSON.getJSONArray("AdditionalSpeakerIDs");
      if (additionalSpeakers != null && additionalSpeakers.length() > 0) {
        for (int j = 0; j <= additionalSpeakers.length() - 1; j++) {
          long speakerID = additionalSpeakers.getLong(j);
          Speaker addSpeaker = findParsedSpeaker(speakerID);
          newSession.addAdditionalSpeaker(addSpeaker);
        }
      }
      savedArea = sessionJSON.getString("Area");
      newSession.setEndDate(convertToCalendar(sessionJSON.getString("EndTime")));
      newSession.setGeneralExperienceLevel(findOrCreateExperienceLevel(sessionJSON.getString("LevelGeneral")));
      newSession.setSpecificExperienceLevel(findOrCreateExperienceLevel(sessionJSON.getString("LevelSpecific")));
      newSession.setRoom(sessionJSON.getString("Room"));
      newSession.setId(sessionJSON.getLong("SessionID"));
      newSession.setSpeaker(findParsedSpeaker(sessionJSON.getLong("SpeakerID")));
      newSession.setStartDate(convertToCalendar(sessionJSON.getString("StartTime")));
      newSession.setTechnologies(sessionJSON.getString("Technology"));
      newSession.setSessionTitle(sessionJSON.getString("Title"));
      newSession.setTrack(findOrCreateTrack(sessionJSON.getString("Track") + savedArea));
      newSession.setVoteRank(sessionJSON.getString("VoteRank"));
      
      parsedSessions.add(newSession);
    }
    ACLogger.info("CodeStock Downloader", "Finished iterating over session array");
    
  }
  
  private Track findOrCreateTrack(String trackName) {
    Track theTrack = null;
    for (Track t : parsedTracks) {
      if (t.getTrackTitle().equalsIgnoreCase(trackName)) {
        theTrack = t;
        break;
      }
    }
    if (theTrack == null) {
      theTrack = new Track();
      theTrack.setTrackTitle(trackName);
      parsedTracks.add(theTrack);
    }
    return theTrack;
  }
  
  private ExperienceLevel findOrCreateExperienceLevel(String levelString) {
    ExperienceLevel theLevel = null;
    for (ExperienceLevel l : parsedLevels) {
      if (l.getLevelName().equalsIgnoreCase(levelString)) {
        theLevel = l;
        break;
      }
    }
    
    if (theLevel == null) {
      theLevel = new ExperienceLevel();
      theLevel.setLevelName(levelString);
      parsedLevels.add(theLevel);
    }
      
    return theLevel;
  }
  
  
  private Calendar convertToCalendar(String dateString) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(Long.parseLong(dateString.substring(6, 19)));
    cal.setTimeZone(TimeZone.getTimeZone("GMT" + dateString.substring(19, 24)));
    return cal;
  }
  
  private Speaker findParsedSpeaker(long speakerid) {
    
    for (Speaker s : parsedSpeakers) {
      if (s.getId() == speakerid) {
        return s;
      }
    }
    return null;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.