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