/*
* 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 com.gallatinsystems.device;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import com.gallatinsystems.device.domain.DeviceSurveyJobQueue;
import com.gallatinsystems.framework.analytics.summarization.DataSummarizer;
import com.gallatinsystems.framework.domain.DataChangeRecord;
import com.gallatinsystems.survey.dao.DeviceSurveyJobQueueDAO;
/**
* deletes unneeded DeviceSurveyJobQueue records based on an update to SurveyAssignment
*
* @author Christopher Fagiani
*/
public class DeviceSurveyJobQueueUpdater implements DataSummarizer {
private DeviceSurveyJobQueueDAO deviceSurveyJobQueueDao;
@SuppressWarnings("unused")
private static Logger logger = Logger
.getLogger(DeviceSurveyJobQueueUpdater.class.getName());
public DeviceSurveyJobQueueUpdater() {
deviceSurveyJobQueueDao = new DeviceSurveyJobQueueDAO();
}
@Override
public String getCursor() {
// no-op
return null;
}
@Override
public boolean performSummarization(String key, String type, String value,
Integer offset, String cursor) {
DataChangeRecord change = new DataChangeRecord(value);
deleteRecords(change.getOldVal(), change.getId());
return true;
}
/**
* unpacks the packed string an deletes the necessary records from the DeviceSurveyJobQueue
* table
*
* @param packedString
* @param assignmentId
*/
private void deleteRecords(String packedString, String assignmentId) {
if (packedString != null) {
List<DeviceSurveyJobQueue> queueItems = deviceSurveyJobQueueDao
.listJobByAssignment(new Long(assignmentId));
List<DeviceSurveyJobQueue> itemsToDelete = new ArrayList<DeviceSurveyJobQueue>();
if (packedString.contains("d")) {
String deviceIds = packedString.substring(packedString
.indexOf("d") + 1, packedString.indexOf("s"));
String[] nums = {
deviceIds
};
if (deviceIds.contains("xx")) {
nums = deviceIds.split("xx");
}
for (int i = 0; i < nums.length; i++) {
if (nums[i].trim().length() > 0) {
for (DeviceSurveyJobQueue job : queueItems) {
if (job.getDevicePhoneNumber().equals(nums[i])) {
itemsToDelete.add(job);
}
}
}
}
}
if (packedString.contains("s")) {
String surveyIds = packedString.substring(packedString
.indexOf("s") + 1);
String[] ids = {
surveyIds
};
if (surveyIds.contains("xx")) {
ids = surveyIds.split("xx");
}
for (int i = 0; i < ids.length; i++) {
if (ids[i].trim().length() > 0) {
for (DeviceSurveyJobQueue job : queueItems) {
if (job.getSurveyID().toString().equals(ids[i])) {
itemsToDelete.add(job);
}
}
}
}
}
if (itemsToDelete != null && itemsToDelete.size() > 0) {
deviceSurveyJobQueueDao.delete(itemsToDelete);
}
}
}
}