package com.todoroo.astrid.actfm.sync.messages;
import java.util.HashSet;
import java.util.Set;
import android.text.TextUtils;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.dao.TaskListMetadataOutstandingDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.TaskListMetadataOutstanding;
public class TaskListMetadataChangesHappened extends ChangesHappened<TaskListMetadata, TaskListMetadataOutstanding> {
private final TaskListMetadataDao dao;
public TaskListMetadataChangesHappened(long id, Class<TaskListMetadata> modelClass, TaskListMetadataDao modelDao, TaskListMetadataOutstandingDao outstandingDao) {
super(id, modelClass, modelDao, outstandingDao);
this.dao = modelDao;
}
@Override
protected void populateChanges() {
super.populateChanges();
// Collapses/removes redundant task list orders from the list--only send the most recent ordering
Set<Long> removedChanges = new HashSet<Long>();
boolean foundOrderChange = false;
boolean foundTagOrFilterId = false;
for (int i = changes.size() - 1; i >= 0; i--) {
TaskListMetadataOutstanding oe = changes.get(i);
String column = oe.getValue(TaskListMetadataOutstanding.COLUMN_STRING);
if (TaskListMetadata.TASK_IDS.name.equals(column)) {
if (foundOrderChange || TaskListMetadata.taskIdsIsEmpty(oe.getValue(TaskListMetadataOutstanding.VALUE_STRING))) {
changes.remove(i);
removedChanges.add(oe.getId());
} else {
foundOrderChange = true;
}
} else if (TaskListMetadata.FILTER.name.equals(column) || TaskListMetadata.TAG_UUID.name.equals(column)) {
if (RemoteModel.isUuidEmpty(oe.getValue(TaskListMetadataOutstanding.VALUE_STRING))) {
changes.remove(i);
removedChanges.add(oe.getId());
} else {
foundTagOrFilterId = true;
}
}
}
if (pushedAt == 0 && !foundTagOrFilterId) { // Try to validate message
TaskListMetadata tlm = dao.fetch(id, TaskListMetadata.FILTER, TaskListMetadata.TAG_UUID);
if (tlm != null) {
String filterId = tlm.getValue(TaskListMetadata.FILTER);
String tagUuid = tlm.getValue(TaskListMetadata.TAG_UUID);
TaskListMetadataOutstanding tlmo = new TaskListMetadataOutstanding();
boolean validChange = false;
if (!TextUtils.isEmpty(filterId)) {
validChange = true;
tlmo.setValue(TaskListMetadataOutstanding.ENTITY_ID_PROPERTY, id);
tlmo.setValue(TaskListMetadataOutstanding.COLUMN_STRING, TaskListMetadata.FILTER.name);
tlmo.setValue(TaskListMetadataOutstanding.VALUE_STRING, filterId);
tlmo.setValue(TaskListMetadataOutstanding.CREATED_AT, 0L);
} else if (!RemoteModel.isUuidEmpty(tagUuid)) {
validChange = true;
tlmo.setValue(TaskListMetadataOutstanding.ENTITY_ID_PROPERTY, id);
tlmo.setValue(TaskListMetadataOutstanding.COLUMN_STRING, TaskListMetadata.TAG_UUID.name);
tlmo.setValue(TaskListMetadataOutstanding.VALUE_STRING, tagUuid);
tlmo.setValue(TaskListMetadataOutstanding.CREATED_AT, 0L);
}
if (validChange) {
changes.add(tlmo);
}
}
}
outstandingDao.deleteWhere(TaskListMetadataOutstanding.ID.in(removedChanges.toArray(new Long[removedChanges.size()])));
}
}