package net.techreadiness.plugin.action.task.snapshot.remove; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; import net.techreadiness.plugin.action.task.snapshot.SnapshotTaskFlowData; import net.techreadiness.plugin.action.task.snapshot.SnapshotTaskFlowDefinition; import net.techreadiness.plugin.batch.DeleteSnapshotBatchJob; import net.techreadiness.plugin.service.object.SnapshotWindow; import net.techreadiness.service.BatchJobSchedulerService; import net.techreadiness.service.DataModificationStatus; import net.techreadiness.service.DataModificationStatus.ModificationState; import net.techreadiness.service.exception.ServiceException; import net.techreadiness.ui.tags.datagrid.DataGridState; import net.techreadiness.ui.task.BaseTaskFlowAction; import net.techreadiness.ui.util.ConversationScoped; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.quartz.JobDataMap; import com.google.common.collect.Maps; import com.opensymphony.xwork2.util.Element; import com.opensymphony.xwork2.util.Key; @Results(value = { @Result(name = "success", location = "/task/snapshot/remove/remove", type = "redirect"), @Result(name = "invalid", type = "lastAction", params={"actionName", "remove"}) }) public class SaveAction extends BaseTaskFlowAction<SnapshotTaskFlowData, SnapshotTaskFlowDefinition> { private static final long serialVersionUID = 1L; @ConversationScoped(value = "snapshotSearchGrid") private DataGridState<?> snapshotSearchGrid; @Key(Long.class) @Element(Boolean.class) private Map<Long, Boolean> snapshots = Maps.newHashMap(); @Inject BatchJobSchedulerService batchJobSchedulerService; @Inject DataModificationStatus dataModificationStatus; // @CoreSecured({ }) @Override public String execute() { int delayMinutes = 5; for (Entry<Long, Boolean> snapshot : snapshots.entrySet()) { if (snapshot.getValue().booleanValue()) { try { Long snapshotWindowId = snapshot.getKey(); snapshotSearchGrid.deSelectItem(snapshotWindowId.toString()); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("snapshotWindowId", snapshotWindowId); batchJobSchedulerService.scheduleJobWithDelay(DeleteSnapshotBatchJob.class, "DeleteSnapshot_" + snapshotWindowId.toString(), "DeleteSnapshot_" + snapshotWindowId.toString(), delayMinutes, jobDataMap); delayMinutes += 5; Iterator<SnapshotWindow> iterator = getTaskFlowData().getSnapshots().iterator(); while (iterator.hasNext()) { SnapshotWindow next = iterator.next(); if (next.getSnapshotWindowId().equals(snapshot.getKey())) { iterator.remove(); break; } } } catch (ServiceException se) { addActionError(se.getMessage()); } } } if (hasErrors()) { return "invalid"; } dataModificationStatus.setModificationState(ModificationState.SUCCESS); dataModificationStatus .setMessage("The selected Snapshots have been marked for deletion. The system will remove them shortly. They will continue to show in the system in the meantime."); return SUCCESS; } public Map<Long, Boolean> getSnapshots() { return snapshots; } public void setSnapshots(Map<Long, Boolean> snapshots) { this.snapshots = snapshots; } }