/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.upgrade.callbacks;
import java.net.URI;
import java.util.*;
import com.emc.storageos.db.client.model.NamedURI;
import com.emc.storageos.db.client.model.uimodels.ExecutionWindow;
import com.emc.storageos.db.client.model.uimodels.Order;
import com.emc.storageos.db.client.util.ExecutionWindowHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback;
import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException;
/**
* Migration handler to convert value of type field for an export group, from
* Exclusive to Initiator.
*/
public class OrderScheduleTimeCallback extends BaseCustomMigrationCallback {
private static final Logger log = LoggerFactory
.getLogger(OrderScheduleTimeCallback.class);
@Override
public void process() throws MigrationCallbackException {
log.info("Handle Order schedule time ...");
DbClient dbClient = getDbClient();
List<URI> orders = dbClient.queryByType(Order.class, true);
for (URI uri : orders) {
Order order = dbClient.queryObject(Order.class, uri);
if (order == null)
continue;
if (order.getScheduledEventId() == null) {
if (order.getExecutionWindowId() == null ||
order.getExecutionWindowId().getURI().equals(ExecutionWindow.NEXT)) {
Calendar scheduleTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
scheduleTime.setTime(order.getLastUpdated());
order.setExecutionWindowId(new NamedURI(ExecutionWindow.NEXT, "NEXT"));
order.setScheduledTime(scheduleTime);
} else {
// For original orders, set schedule time to
// either 1) the next execution window starting time
// or 2) the current time if it is in current execution window
ExecutionWindow executionWindow = dbClient.queryObject(ExecutionWindow.class, order.getExecutionWindowId().getURI());
if (executionWindow == null)
continue;
ExecutionWindowHelper helper = new ExecutionWindowHelper(executionWindow);
order.setScheduledTime(helper.getScheduledTime());
}
dbClient.updateObject(order);
}
}
return;
}
}