in Android/app/src/main/java/com/harvard/studyappmodule/SurveyActivitiesFragment.java [921:1486]
private void metadataProcess() {
for (int i = 0; i < arrayList.size(); i++) {}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
SimpleDateFormat dateSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat timezoneSimpleDateFormat = new SimpleDateFormat("Z");
Date date;
ArrayList<String> activityIds = new ArrayList<>();
ArrayList<String> runIds = new ArrayList<>();
if (activityListData != null) {
for (int i = 0; i < activityListData.getActivities().size(); i++) {
if (activityListData.getActivities().get(i).getSchedulingType() != null) {
if (activityListData
.getActivities()
.get(i)
.getSchedulingType()
.equalsIgnoreCase("AnchorDate")) {
for (int j = 0; j < arrayList.size(); j++) {
if (activityListData
.getActivities()
.get(i)
.getActivityId()
.equalsIgnoreCase(arrayList.get(j).getTargetActivityId())) {
if (arrayList.get(j).getAnchorDate() != null
&& !arrayList.get(j).getAnchorDate().equalsIgnoreCase("")) {
String startTime = "";
String endTime = "";
if (activityListData.getActivities().get(i).getAnchorDate() != null
&& activityListData.getActivities().get(i).getAnchorDate().getStart()
!= null) {
if (!activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getTime()
.equalsIgnoreCase("")) {
startTime =
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getTime();
} else {
startTime = "00:00:00";
}
}
if (activityListData.getActivities().get(i).getAnchorDate() != null
&& activityListData.getActivities().get(i).getAnchorDate().getEnd() != null) {
if (!activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getTime()
.equalsIgnoreCase("")) {
endTime =
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getTime();
} else {
endTime = "23:59:59";
}
}
// to do run calculation and expecting source question has answered
RealmResults<ActivityRun> runs =
dbServiceSubscriber.getAllActivityRunFromDB(
activityListData.getStudyId(),
activityListData.getActivities().get(i).getActivityId(),
realm);
if (runs == null || runs.size() == 0) {
activityUpdated = true;
activityIds.add(activityListData.getActivities().get(i).getActivityId());
runIds.add("-1");
}
if (activityListData
.getActivities()
.get(i)
.getFrequency()
.getType()
.equalsIgnoreCase("One Time")) {
Calendar calendar;
if (activityListData.getActivities().get(i).getAnchorDate() != null
&& activityListData.getActivities().get(i).getAnchorDate().getStart()
!= null) {
calendar = Calendar.getInstance();
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
calendar.setTime(date);
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getAnchorDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.setStartTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ startTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
if (activityListData.getActivities().get(i).getAnchorDate() != null
&& activityListData.getActivities().get(i).getAnchorDate().getEnd()
!= null) {
calendar = Calendar.getInstance();
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
calendar.setTime(date);
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getAnchorDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.setEndTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ endTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
} else if (activityListData
.getActivities()
.get(i)
.getFrequency()
.getType()
.equalsIgnoreCase("Daily")) {
if (activityListData
.getActivities()
.get(i)
.getStartTime()
.equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
calendar.setTime(date);
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getAnchorDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.setStartTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ startTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
if (activityListData.getActivities().get(i).getEndTime().equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(
simpleDateFormat.parse(
activityListData.getActivities().get(i).getStartTime()));
} catch (ParseException e) {
Logger.log(e);
}
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getRepeatInterval());
activityListData
.getActivities()
.get(i)
.setEndTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ endTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
} else if (activityListData
.getActivities()
.get(i)
.getFrequency()
.getType()
.equalsIgnoreCase("Weekly")) {
if (activityListData
.getActivities()
.get(i)
.getStartTime()
.equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
calendar.setTime(date);
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getAnchorDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.setStartTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ startTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
if (activityListData.getActivities().get(i).getEndTime().equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(
simpleDateFormat.parse(
activityListData.getActivities().get(i).getStartTime()));
} catch (ParseException e) {
Logger.log(e);
}
calendar.add(
Calendar.WEEK_OF_YEAR,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getRepeatInterval());
activityListData
.getActivities()
.get(i)
.setEndTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ endTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
} else if (activityListData
.getActivities()
.get(i)
.getFrequency()
.getType()
.equalsIgnoreCase("Monthly")) {
if (activityListData
.getActivities()
.get(i)
.getStartTime()
.equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
calendar.setTime(date);
calendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getStart()
.getAnchorDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.setStartTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ startTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
if (activityListData.getActivities().get(i).getEndTime().equalsIgnoreCase("")) {
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(
simpleDateFormat.parse(
activityListData.getActivities().get(i).getStartTime()));
} catch (ParseException e) {
Logger.log(e);
}
calendar.add(
Calendar.MONTH,
activityListData
.getActivities()
.get(i)
.getAnchorDate()
.getEnd()
.getRepeatInterval());
activityListData
.getActivities()
.get(i)
.setEndTime(
dateSimpleDateFormat.format(calendar.getTime())
+ "T"
+ endTime
+ ".000"
+ timezoneSimpleDateFormat.format(calendar.getTime()));
}
} else {
// custom runs
if (activityListData.getActivities().get(i).getStartTime().equalsIgnoreCase("")
&& activityListData
.getActivities()
.get(i)
.getEndTime()
.equalsIgnoreCase("")) {
Calendar startCalendar;
Calendar endCalendar;
for (int k = 0;
k
< activityListData
.getActivities()
.get(i)
.getFrequency()
.getAnchorRuns()
.size();
k++) {
startCalendar = Calendar.getInstance();
endCalendar = Calendar.getInstance();
// start runs
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
startCalendar.setTime(date);
startCalendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getFrequency()
.getAnchorRuns()
.get(k)
.getStartDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.getFrequency()
.getRuns()
.get(k)
.setStartTime(
dateSimpleDateFormat.format(startCalendar.getTime())
+ "T"
+ activityListData
.getActivities()
.get(i)
.getFrequency()
.getAnchorRuns()
.get(k)
.getStartTime()
+ ".000"
+ timezoneSimpleDateFormat.format(startCalendar.getTime()));
// end runs
try {
date = simpleDateFormat.parse(arrayList.get(j).getAnchorDate());
endCalendar.setTime(date);
endCalendar.add(
Calendar.DATE,
activityListData
.getActivities()
.get(i)
.getFrequency()
.getAnchorRuns()
.get(k)
.getEndDays());
} catch (ParseException e) {
Logger.log(e);
}
activityListData
.getActivities()
.get(i)
.getFrequency()
.getRuns()
.get(k)
.setEndTime(
dateSimpleDateFormat.format(endCalendar.getTime())
+ "T"
+ activityListData
.getActivities()
.get(i)
.getFrequency()
.getAnchorRuns()
.get(k)
.getEndTime()
+ ".000"
+ timezoneSimpleDateFormat.format(endCalendar.getTime()));
activityListData
.getActivities()
.get(i)
.setStartTime(
activityListData
.getActivities()
.get(i)
.getFrequency()
.getRuns()
.get(0)
.getStartTime());
activityListData
.getActivities()
.get(i)
.setEndTime(
activityListData
.getActivities()
.get(i)
.getFrequency()
.getRuns()
.get(k)
.getEndTime());
}
}
}
}
}
}
}
}
}
}
// If any activities available in Db we take from Db otherwise from Webservice
// find any updates on available activity
if (activityDataDB != null && activityListData != null) {
for (int j = 0; j < activityListData.getActivities().size(); j++) {
boolean activityAvailable = false;
for (int i = 0; i < activityDataDB.getActivities().size(); i++) {
if (activityDataDB
.getActivities()
.get(i)
.getActivityId()
.equalsIgnoreCase(activityListData.getActivities().get(j).getActivityId())) {
activityAvailable = true;
if (!activityDataDB
.getActivities()
.get(i)
.getActivityVersion()
.equalsIgnoreCase(activityListData.getActivities().get(j).getActivityVersion())) {
activityUpdated = true;
// update ActivityWS DB with new version
dbServiceSubscriber.updateActivitiesWsVersion(
activityListData.getActivities().get(j).getActivityId(),
activityListData.getStudyId(),
realm,
activityListData.getActivities().get(j).getActivityVersion());
dbServiceSubscriber.updateActivityPreferenceVersion(
context,
activityListData.getActivities().get(j).getActivityVersion(),
activityDataDB.getActivities().get(i));
if (activityIds.contains(activityDataDB.getActivities().get(i).getActivityId())) {
// change on 15/10/2019
runIds.set(
activityIds.indexOf(activityDataDB.getActivities().get(i).getActivityId()),
activityDataDB.getActivities().get(i).getActivityRunId());
} else {
// change on 15/10/2019
activityIds.add(activityDataDB.getActivities().get(i).getActivityId());
runIds.add(activityDataDB.getActivities().get(i).getActivityRunId());
}
}
break;
}
}
// change on 16/10/2019
if (!activityAvailable) {
ActivitiesWS activitiesWS =
dbServiceSubscriber.getActivityObj(
activityListData.getActivities().get(j).getActivityId(),
activityListData.getStudyId(),
realm);
if (activitiesWS != null
&& !activitiesWS
.getActivityVersion()
.equalsIgnoreCase(activityListData.getActivities().get(j).getActivityVersion())) {
activityUpdated = true;
// update ActivityWS DB with new version
dbServiceSubscriber.updateActivitiesWsVersion(
activityListData.getActivities().get(j).getActivityId(),
activityListData.getStudyId(),
realm,
activityListData.getActivities().get(j).getActivityVersion());
if (!activityIds.contains(activityListData.getActivities().get(j).getActivityId())) {
activityIds.add(activityListData.getActivities().get(j).getActivityId());
runIds.add("-1");
}
}
}
}
} else if (activityDataDB == null && activityListData != null) {
for (int j = 0; j < activityListData.getActivities().size(); j++) {
ActivitiesWS activitiesWS =
dbServiceSubscriber.getActivityObj(
activityListData.getActivities().get(j).getActivityId(),
activityListData.getStudyId(),
realm);
if (activitiesWS != null
&& !activitiesWS
.getActivityVersion()
.equalsIgnoreCase(activityListData.getActivities().get(j).getActivityVersion())) {
activityUpdated = true;
// update ActivityWS DB with new version
dbServiceSubscriber.updateActivitiesWsVersion(
activityListData.getActivities().get(j).getActivityId(),
activityListData.getStudyId(),
realm,
activityListData.getActivities().get(j).getActivityVersion());
if (!activityIds.contains(activityListData.getActivities().get(j).getActivityId())) {
activityIds.add(activityListData.getActivities().get(j).getActivityId());
runIds.add("-1");
}
}
}
}
displayData(activityListData, activityIds, runIds, null);
}