SetupTimetableActivity.java :  » UnTagged » s00083451-s00083031-y4 » com » itsm » Android Open Source

Android Open Source » UnTagged » s00083451 s00083031 y4 
s00083451 s00083031 y4 » com » itsm » SetupTimetableActivity.java
package com.itsm;

import java.util.ArrayList;
import java.util.List;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.itsm.R.string;
import com.itsm.dao.CourseDao;
import com.itsm.dao.DepartmentDao;
import com.itsm.dao.PersonDao;
import com.itsm.dao.RoomDao;
import com.itsm.dao.SettingsDao;
import com.itsm.dao.TimetableDao;
import com.itsm.entities.Course;
import com.itsm.entities.Person;
import com.itsm.entities.PersonType;
import com.itsm.entities.Timetable;
import com.itsm.helper.Helper;

public class SetupTimetableActivity extends Activity {

  private ProgressDialog pDialog;
  private String flagError = "";
  private TimetableDao timetableDao;
  private Boolean isFinished = false;
  private Boolean result = false;
  private final String CONVERT_TO_TIME = ":00";


  // web service
  final String NAMESPACE = "http://aspspider.org/dereksmyth/";
  final String METHOD_NAME = "GetStudentTimetable";
  final String SOAP_ACTION = "http://aspspider.org/dereksmyth/GetStudentTimetable";
  final String URL = "http://aspspider.org/dereksmyth/StudentTimetable.asmx";

  private class ProcessTimetable extends Thread {

    boolean isUpdate = false;

    @Override
    public void run() {

      SettingsDao settingsDao = new SettingsDao();
      int accountId = settingsDao.getSettings().getAccountId();

      isUpdate = getIntent().getBooleanExtra(Helper.IS_USER_TIMETABLE,
          false);

      timetableDao = new TimetableDao();

      if (getIntent().getStringExtra(Helper.SAVE_TIMETABLE)
          .equalsIgnoreCase(Helper.SAVE_TIMETABLE_YES)) {
        // insert blank database
        timetableDao.insertBlankTimetableWeek(accountId);
      }

      if (isUpdate) {
        timetableDao.resetTimeTable(accountId);
        result = createTimetable(false);
        
      } else {
        timetableDao.resetTempTable();
        result = createTimetable(true);
      }

      isFinished = true;
      handler.sendEmptyMessage(0);
    }

    private Handler handler = new Handler() {
      @Override
      public void handleMessage(Message msg) {
        pDialog.dismiss();

        if (isFinished) {
          
          if(!result){
              Toast.makeText(SetupTimetableActivity.this, getText(R.string.timetable_unavailable_str),
                  Toast.LENGTH_LONG).show();
            
              Handler handler = new Handler();
                 handler.post( new Runnable() {
                    public void run() {
                       SetupTimetableActivity.this.finish();
                    }
                 } );
              
            //startActivity(new Intent(SetupTimetableActivity.this,MainMenuActivity.class));
          }
          else
          {
            Intent intent;

            if (isUpdate) {
              if (getIntent().getStringExtra(Helper.SAVE_TIMETABLE)
                  .equalsIgnoreCase(Helper.SAVE_TIMETABLE_YES)) {
                intent = new Intent(SetupTimetableActivity.this,
                    MainMenuActivity.class);
                intent.putExtra(Helper.IS_USER_TIMETABLE, true);
                startActivity(intent);
              } else {
                intent = new Intent(SetupTimetableActivity.this,
                    ScheduleActivity.class);
                intent.putExtra(Helper.IS_USER_TIMETABLE, true);
                startActivity(intent);

              }

            } else {
              intent = new Intent(SetupTimetableActivity.this,
                  ScheduleActivity.class);
              intent.putExtra(Helper.IS_USER_TIMETABLE, false);
              startActivity(intent);

            }
            
          }
          


        }
      }
    };
  }

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.progress);
    // Creates instances of of data access classes

    setTitleBar();

    pDialog = ProgressDialog.show(this,
        getText(R.string.timetable_progress_str),
        getText(R.string.please_wait_str), true);

    ProcessTimetable process = new ProcessTimetable();
    process.start();
    

  }

  private void setTitleBar() {
    TextView subTitle = (TextView) findViewById(R.id.txtSubTitle);
    subTitle.setText(R.string.please_wait_str);
  }

  private String formatCourseUrl(String courseUrl) {

    String newCourseUrl = courseUrl;

    if (getIntent().getStringExtra(Helper.TIMETABLE_SEMESTER)
        .equalsIgnoreCase(Helper.TIMETABLE_SEMESTER_ONE)) {
      newCourseUrl = courseUrl.replace("&weeks=&", "&weeks=3&");
    } else if (getIntent().getStringExtra(Helper.TIMETABLE_SEMESTER)
        .equalsIgnoreCase(Helper.TIMETABLE_SEMESTER_TWO)) {
      newCourseUrl = courseUrl.replace("&weeks=&", "&weeks=20&");
    }

    return newCourseUrl;
  }

  /**
   * Splits Timetable Object where Duration is greater than 1
   */
  private List<Timetable> fixTimetableDurationSpan(Timetable timetable,
      int counter) {

    List<Timetable> timetableList = new ArrayList<Timetable>();

    /**
     * Add a timetable for every hour
     */

    // on first iteration
    boolean leaveStartTime = true;

    if (counter > 1) {
      Timetable temp = null;

      for (int j = 0; j < counter; j++) {
        if (leaveStartTime) {
          temp = Timetable.newInstance(timetable);
        } else
          temp = Timetable.newInstance(temp);

        int startTime = 0;
        int endTime = 0;

        startTime = Helper.getHourAsInteger(temp.getStartTime());
        endTime = Helper.getHourAsInteger(temp.getEndTime());

        if (leaveStartTime) {
          leaveStartTime = false;
        } else {
          startTime += 1;
        }

        endTime = startTime + 1;
        temp.setStartTime((startTime) + CONVERT_TO_TIME);
        temp.setEndTime(endTime + CONVERT_TO_TIME);
        timetableList.add(temp);
      }

    }

    return timetableList;
  }

  private List<Timetable> getStudentTimetableService(String departmentUrl,
      String courseName, boolean tempTimetable) {

    List<Timetable> timetableList = new ArrayList<Timetable>();
    List<Timetable> tempList = new ArrayList<Timetable>();

    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
    PropertyInfo pi = new PropertyInfo();
    pi.setName("departmentUrl");
    pi.setValue(departmentUrl);
    pi.setType(string.class);
    Request.addProperty(pi);

    PropertyInfo pi2 = new PropertyInfo();
    pi2.setName("courseName");
    pi2.setValue(courseName);
    pi2.setType(string.class);
    Request.addProperty(pi2);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(Request);

    AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(
        URL);

    try {

      androidHttpTransport.call(SOAP_ACTION, envelope);

      SoapPrimitive result = (SoapPrimitive) envelope.getResponse();

      // test string
      // String result =
      // "1$B_WD4 Software Quality Assurance$9:00$11:00$B1043$Kinsella,V$1$B_WD4 IT for Marketing$11:00$12:00$Interview Room$Ward,E$1$B_WD4 IT for Marketing$12:00$1:00$Interview Room$Ward,E$2$B_WD4 Software Quality Assurance$15:00$16:00$B2008$Kinsella,V$2$B_WD4 Advanced Content Production$16:00$18:00$B1043$Davey,C$3$B_WD4 Advanced Content Production$11:00$13:00$B1041$Davey,C$3$B_WD4 IT for Marketing$15:00$16:00$D2057$Ward,E$4$B_WD4 Software Quality Assurance$14:00$15:00$D2051$Kinsella,V";

      // to get the data
      String value = result.toString();

      if (Helper.isNotNullOrEmpty(value)) {
        String[] valueSplit = value
        .split(Helper.WEB_SERVICE_STRING_SEPARATOR);

        // Day,Subject,StartTime,EndTime,room,Lecturer
        int columns = 6;

        RoomDao roomDao = new RoomDao();
        PersonDao personDao = new PersonDao();
        SettingsDao settingsDao = new SettingsDao();

        for (int i = 0; i < valueSplit.length; i += columns) {

          String sDay = valueSplit[i];
          String sSubject = valueSplit[i + 1];
          String sStart = valueSplit[i + 2];
          String sEnd = valueSplit[i + 3];
          String sRoom = valueSplit[i + 4];
          String sLecturer = valueSplit[i + 5];

          if (!personDao.personExists(sLecturer)) {
            Person p = new Person();
            p.setAlias(sLecturer);
            p.setPersonType(PersonType.Lecturer.getValue());
            p.setIsUserCreated(0);

            if (tempTimetable)
              p.setIsTemp(1);

            personDao.insertPerson(p);
          }

          Timetable t = new Timetable();
          t.setDay(Integer.parseInt(sDay));
          t.setStartTime(sStart);
          t.setEndTime(sEnd);
          t.setSubject(sSubject);
          t.setRoomId(roomDao.getRoomByName(sRoom).getId());
          t.setLecturerId(personDao.getPersonByAlias(sLecturer,
              PersonType.Lecturer.getValue()).getId());

          int duration = Helper.getHourAsInteger(t.getEndTime())
          - Helper.getHourAsInteger(t.getStartTime());
          t.setAccount(settingsDao.getSettings().getAccountId());

          // remove any items from temp list first
          tempList.clear();
          if (duration > 1) {
            tempList = fixTimetableDurationSpan(t, duration);
          }

          if (tempList.size() > 0) {

            for (Timetable tmp : tempList) {
              tmp.setDuration(1);
              timetableList.add(tmp);
            }
          } else {
            t.setDuration(duration);
            timetableList.add(t);
          }

        }
      }

    } catch (Exception e) {
      flagError = e.getMessage();
      Log.e("TimetableFail", e.getMessage());
    }

    return timetableList;
  }

  private boolean createTimetable(boolean isTemp) {
    CourseDao courseDao = new CourseDao();

    // get Course ID That was Passed From Course Selection
    int courseId = getIntent().getIntExtra(Helper.TIMETABLE_COURSE_ID, 0);

    Course course = courseDao.getCourseById(courseId);
    DepartmentDao deptDao = new DepartmentDao();

    String courseUrl = deptDao.getDepartmentById(
        course.getCourseDepartment()).getProgrammeUrl();

    List<Timetable> timetableList = new ArrayList<Timetable>();

    try {
      timetableList = getStudentTimetableService(
          formatCourseUrl(courseUrl),
          courseDao.getCourseById(courseId).getCourseName(), isTemp);
    } catch (Exception ex) {
      Log.e("Parsing", ex.getMessage());
    }
    
    if(timetableList.size() > 0){
      if (isTemp) {
        for (int i = 0; i < timetableList.size(); i++) {
          timetableDao.updateTimetable(timetableList.get(i), true);
        }
      } else {
        for (int i = 0; i < timetableList.size(); i++) {
          timetableDao.updateTimetable(timetableList.get(i), false);
        }
      }

      
    }
    else
      return false;
    


    return true;
  }

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