com.aremaitch.codestock2010.datadownloader.DownloaderV2.java Source code

Java tutorial

Introduction

Here is the source code for com.aremaitch.codestock2010.datadownloader.DownloaderV2.java

Source

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