package com.todoroo.astrid.actfm.sync;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.actfm.sync.messages.ConstructOutstandingTableFromMasterTable;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskAttachmentOutstandingDao;
import com.todoroo.astrid.dao.TaskOutstandingDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskAttachmentOutstanding;
import com.todoroo.astrid.data.TaskOutstanding;
public class EmptyTitleOutstandingEntryMigration {
private static final String ERROR_TAG = "empty-title-migrate"; //$NON-NLS-1$
@Autowired
private TaskOutstandingDao taskOutstandingDao;
@Autowired
private TaskAttachmentDao taskAttachmentDao;
@Autowired
private TaskAttachmentOutstandingDao taskAttachmentOutstandingDao;
public EmptyTitleOutstandingEntryMigration() {
DependencyInjectionService.getInstance().inject(this);
}
public void performMigration() {
TodorooCursor<TaskOutstanding> outstandingWithTitle = null;
try {
outstandingWithTitle = taskOutstandingDao
.query(Query.select(TaskOutstanding.TASK_ID, Task.UUID)
.join(Join.left(Task.TABLE, Task.ID.eq(TaskOutstanding.TASK_ID)))
.where(Criterion.and(TaskOutstanding.COLUMN_STRING.eq(Task.TITLE.name),
Criterion.and(TaskOutstanding.VALUE_STRING.isNotNull(), TaskOutstanding.VALUE_STRING.neq("")))) //$NON-NLS-1$
.groupBy(TaskOutstanding.TASK_ID));
List<Long> ids = new ArrayList<Long>();
List<String> uuids = new ArrayList<String>();
for (outstandingWithTitle.moveToFirst(); !outstandingWithTitle.isAfterLast(); outstandingWithTitle.moveToNext()) {
try {
ids.add(outstandingWithTitle.get(TaskOutstanding.TASK_ID));
uuids.add(outstandingWithTitle.get(Task.UUID));
} catch (Exception e) {
Log.e(ERROR_TAG, "Error reading from cursor", e); //$NON-NLS-1$
}
}
taskOutstandingDao.deleteWhere(Criterion.and(TaskOutstanding.TASK_ID.in(ids.toArray(new Long[ids.size()])),
TaskOutstanding.COLUMN_STRING.eq(Task.TITLE.name),
Criterion.or(TaskOutstanding.VALUE_STRING.isNull(), TaskOutstanding.VALUE_STRING.eq("")))); //$NON-NLS-1$
new ConstructOutstandingTableFromMasterTable<TaskAttachment, TaskAttachmentOutstanding>(NameMaps.TABLE_ID_ATTACHMENTS,
taskAttachmentDao, taskAttachmentOutstandingDao, TaskAttachment.CREATED_AT).execute(TaskAttachment.TASK_UUID.in(uuids.toArray(new String[uuids.size()])));
} catch (Exception e) {
Log.e(ERROR_TAG, "Unhandled exception", e); //$NON-NLS-1$
} finally {
if (outstandingWithTitle != null)
outstandingWithTitle.close();
}
}
}