package com.jobmineplus.mobile.activities.jbmnpls;
import java.util.Date;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import com.jobmineplus.mobile.R;
import com.jobmineplus.mobile.widgets.JbmnplsAdapterBase.Formatter;
import com.jobmineplus.mobile.widgets.JbmnplsAdapterBase.HIGHLIGHTING;
import com.jobmineplus.mobile.widgets.JbmnplsHttpClient;
import com.jobmineplus.mobile.widgets.Job;
import com.jobmineplus.mobile.widgets.Job.HEADER;
import com.jobmineplus.mobile.widgets.Job.STATUS;
import com.jobmineplus.mobile.widgets.TutorialHelper;
import com.jobmineplus.mobile.widgets.table.TableParser;
import com.jobmineplus.mobile.widgets.table.TableParserOutline;
public class Applications extends JbmnplsPageListActivityBase implements TableParser.OnTableParseListener{
//======================
// Declaration Objects
//======================
public final static String PAGE_NAME = Applications.class.getName();
public final static String ACTIVE_TABLE_ID = "UW_CO_STU_APPSV$scroll$0";
public final static String ALL_TABLE_ID = "UW_CO_APPS_VW2$scrolli$0";
public final static class LISTS {
final public static String ALL_JOBS = "All";
final public static String ACTIVE_JOBS = "Active";
final public static String REJECTED_JOBS = "Rejected";
}
public final static HEADER[] SORT_HEADERS = {
HEADER.JOB_TITLE,
HEADER.EMPLOYER,
HEADER.APP_STATUS
};
protected final static String DATE_FORMAT = "d-MMM-yyyy";
private final TableParser parser = new TableParser();
public static final TableParserOutline[] ACTIVE_OUTLINES = {
// 10 Columns
new TableParserOutline(ACTIVE_TABLE_ID,
HEADER.JOB_ID, HEADER.JOB_TITLE, HEADER.EMPLOYER, HEADER.UNIT, HEADER.TERM,
HEADER.JOB_STATUS, HEADER.APP_STATUS, HEADER.VIEW_DETAILS, HEADER.LAST_DAY_TO_APPLY, HEADER.NUM_APPS),
// 9 Columns
new TableParserOutline(ACTIVE_TABLE_ID,
HEADER.JOB_ID, HEADER.JOB_TITLE, HEADER.EMPLOYER, HEADER.UNIT, HEADER.TERM,
HEADER.JOB_STATUS, HEADER.VIEW_DETAILS, HEADER.LAST_DAY_TO_APPLY, HEADER.NUM_APPS),
// 9 Columns with App Status
new TableParserOutline(ACTIVE_TABLE_ID,
HEADER.JOB_ID, HEADER.JOB_TITLE, HEADER.EMPLOYER, HEADER.UNIT, HEADER.TERM,
HEADER.JOB_STATUS, HEADER.APP_STATUS, HEADER.VIEW_DETAILS, HEADER.NUM_APPS, HEADER.LAST_DAY_TO_APPLY)
};
public static final TableParserOutline ALL_OUTLINE = new TableParserOutline(ALL_TABLE_ID,
HEADER.JOB_ID, HEADER.JOB_TITLE, HEADER.EMPLOYER, HEADER.UNIT, HEADER.TERM,
HEADER.JOB_STATUS, HEADER.APP_STATUS, HEADER.VIEW_DETAILS, HEADER.LAST_DAY_TO_APPLY, HEADER.NUM_APPS);
protected static final int[] WIDGET_RESOURCE_LIST = {
R.id.job_title, R.id.job_employer, R.id.location,
R.id.job_status_first_line, R.id.job_status_second_line,
R.id.job_last_day};
//============================
// Static Public Methods
//============================
public static Job parseRowTableOutline(TableParserOutline outline, Object... jobData) {
int id = (Integer) jobData[0];
if (outline == ACTIVE_OUTLINES[0] || outline == ALL_OUTLINE) {
Job.STATUS status = (Job.STATUS)jobData[6];
return new Job( id, (String) jobData[1],
(String) jobData[2], (String) jobData[4],
(Job.STATE) jobData[5], status,
(Date) jobData[8], (Integer) jobData[9]);
} else if (outline == ACTIVE_OUTLINES[1]) {
return new Job( id, (String) jobData[1],
(String) jobData[2], (String) jobData[4],
(Job.STATE) jobData[5], STATUS.getDefault(),
(Date) jobData[7], (Integer) jobData[8]);
} else { // ACTIVE_OUTLINES[2]
Job.STATUS status = (Job.STATUS)jobData[6];
return new Job( id, (String) jobData[1],
(String) jobData[2], (String) jobData[4],
(Job.STATE) jobData[5], status,
(Date) jobData[9], (Integer) jobData[8]);
}
}
//====================
// Override Methods
//====================
@Override
public void onCreate(Bundle savedInstanceState) {
// Create the tutorial and set the content of this activity
// new TutorialHelper(this, R.layout.tabs,
// R.layout.tutorial_sorting, R.string.pref_seen_sorting_tutorial);
super.onCreate(savedInstanceState);
parser.setOnTableRowParse(this);
createTab(LISTS.ACTIVE_JOBS);
createTab(LISTS.REJECTED_JOBS);
createTab(LISTS.ALL_JOBS);
}
@Override
public String getPageName() {
return PAGE_NAME;
}
@Override
public String getUrl() {
return JbmnplsHttpClient.GET_LINKS.APPLICATIONS;
}
@Override
public HEADER[] getTableHeaders() {
return SORT_HEADERS;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if (arg2 < getCurrentList().size()) {
int jobId = getCurrentList().get(arg2).getId();
goToDescription(jobId);
}
}
@Override
protected void parseWebpage(String html) {
clearAllLists();
parser.execute(ACTIVE_OUTLINES, html);
parser.execute(ALL_OUTLINE, html);
}
@Override
public void onRowParse(TableParserOutline outline, Object... jobData) {
Job job = parseRowTableOutline(outline, jobData);
Job.STATUS status = job.getStatus();
if (outline.equals(ALL_OUTLINE)) {
if (!listContainsId(LISTS.ACTIVE_JOBS, job.getId())) {
if (status == Job.STATUS.EMPLOYED) {
addJobToListByTabId(LISTS.ACTIVE_JOBS, job);
} else {
// If this job id is not contained inside Active, then we can
// put it in rejected
addJobToListByTabId(LISTS.REJECTED_JOBS, job);
}
}
addJob(job);
addJobToListByTabId(LISTS.ALL_JOBS, job);
} else {
addJobToListByTabId(LISTS.ACTIVE_JOBS, job);
}
addJob(job);
}
@Override
public int[] getJobListItemResources() {
return WIDGET_RESOURCE_LIST;
}
//=================
// List Adapter
//=================
@Override
protected HIGHLIGHTING formatJobListItem(int position, Job job,
View[] elements, View layout) {
String status = job.getDisplayStatus();
// Set the text fields
Formatter.setText((TextView)elements[0], job.getTitle());
Formatter.setText((TextView)elements[1], job.getEmployer(), true);
Formatter.hide(elements[2]);
Formatter.setText((TextView)elements[3], (TextView)elements[4], status, true);
// Show the closing date if hasnt passed yet
Date closingDate = job.getLastDateToApply();
if (closingDate.after(new Date())) {
Formatter.setDate((TextView)elements[5], job.getLastDateToApply(), "Closes by");
} else {
Formatter.hide(elements[5]);
}
// Do the highlighting
if (isOneOf(status, "Selected", "Scheduled", "Employed") || status == "Ranking Completed"
&& listContainsId(LISTS.ACTIVE_JOBS, job.getId())) {
return HIGHLIGHTING.GREAT;
} else if (isOneOf(status, "Unfilled", "Ranking Completed", "Not Ranked", "Sign Off")) {
return HIGHLIGHTING.BAD;
} else if (isOneOf(status, "Not Selected", "Cancelled")) {
return HIGHLIGHTING.WORSE;
} else {
return HIGHLIGHTING.NORMAL;
}
}
}