/*
* Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation)
*
* This file is part of Akvo FLOW.
*
* Akvo FLOW is free software: you can redistribute it and modify it under the terms of
* the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
* either version 3 of the License or any later version.
*
* Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License included below for more details.
*
* The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
*/
package org.waterforpeople.mapping.app.web.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.waterforpeople.mapping.dao.QuestionAnswerStoreDao;
import org.waterforpeople.mapping.dao.SurveyInstanceDAO;
import org.waterforpeople.mapping.domain.QuestionAnswerStore;
import org.waterforpeople.mapping.domain.SurveyInstance;
public class DataFixes {
private static Logger log = Logger.getLogger(DataFixes.class.getName());
@SuppressWarnings("deprecation")
public void fixQuestionAnswerStoreCollectionDate(HttpServletRequest req,
HttpServletResponse resp) {
fixDateAfterToday();
log.log(Level.INFO, "Completed fixing collectiondates from the future");
fixExactDate();
QuestionAnswerStoreDao qasDao = new QuestionAnswerStoreDao();
SurveyInstanceDAO siDao = new SurveyInstanceDAO();
List<QuestionAnswerStore> qasList = qasDao
.listByNotNullCollectionDateBefore(new Date("1/1/1900"), "all",
500);
for (QuestionAnswerStore item : qasList) {
SurveyInstance si = null;
if (item != null && item.getSurveyInstanceId() != null) {
try {
si = siDao.getByKey(item.getSurveyInstanceId());
} catch (NullPointerException nex) {
log.log(Level.INFO,
"Caught a null pointer exception fetching "
+ item.toString()
+ " during QuestionAnswerStore cleanup will set default collectiondate");
}
if (si != null && si.getCollectionDate() != null) {
item.setCollectionDate(si.getCollectionDate());
qasDao.save(item);
log.log(Level.INFO,
"fixed: " + item.getKey()
+ " set collectionDate to: "
+ item.getCollectionDate()
+ " from surveyInstanceId: "
+ si.getKey().getId());
} else {
item.setCollectionDate(new Date("1/1/1980"));
qasDao.save(item);
log.log(Level.INFO,
"fixed: "
+ item.getKey()
+ " set collectionDate to: "
+ item.getCollectionDate()
+ " Because I couldn't find a surveyinstance or it was missing a collectionDate");
}
} else {
item.setCollectionDate(new Date("1/1/1980"));
qasDao.save(item);
log.log(Level.INFO, "fixed: " + item.getKey()
+ " set collectionDate to: " + item.getCollectionDate()
+ " SurveyInstanceId == null so setting default date");
}
}
}
private void fixExactDate() {
QuestionAnswerStoreDao qasDao = new QuestionAnswerStoreDao();
List<QuestionAnswerStore> qasList = qasDao.listByExactDateString();
List<QuestionAnswerStore> newQasList = new ArrayList<QuestionAnswerStore>();
for (QuestionAnswerStore item : qasList) {
item.setCollectionDate(item.getCreatedDateTime());
newQasList.add(item);
}
qasDao.save(newQasList);
}
private void fixDateAfterToday() {
QuestionAnswerStoreDao qasDao = new QuestionAnswerStoreDao();
List<QuestionAnswerStore> qasList = qasDao.listByNotNullCollectionDateAfter(new Date(),
null, null);
List<QuestionAnswerStore> newQasList = new ArrayList<QuestionAnswerStore>();
log.log(Level.INFO, "Found " + qasList.size() + " qas records from the future.");
for (QuestionAnswerStore item : qasList) {
item.setCollectionDate(item.getCreatedDateTime());
newQasList.add(item);
}
qasDao.save(newQasList);
log.log(Level.INFO, "Fixed " + newQasList.size() + " from the future");
}
public void generateTestData() {
for (int i = 0; i < 1000; i++) {
SurveyInstanceDAO siDao = new SurveyInstanceDAO();
SurveyInstance si = new SurveyInstance();
si.setCollectionDate(new Date());
si.setCommunity("test");
siDao.save(si);
QuestionAnswerStoreDao qasDao = new QuestionAnswerStoreDao();
QuestionAnswerStore qas = new QuestionAnswerStore();
qas.setCollectionDate(new Date("1/1/1000"));
qas.setSurveyInstanceId(si.getKey().getId());
qasDao.save(qas);
}
}
}