/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.upgrade.callbacks;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.VirtualNAS;
import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback;
import com.emc.storageos.db.client.util.NullColumnValueGetter;
import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException;
public class VirtualNASMultipleProjectsAssociationMigration extends
BaseCustomMigrationCallback {
private static final Logger logger = LoggerFactory
.getLogger(VirtualNASMultipleProjectsAssociationMigration.class);
@Override
public void process() throws MigrationCallbackException {
logger.info("Migration started.");
DbClient dbClient = getDbClient();
List<VirtualNAS> vNASList = new ArrayList<VirtualNAS>();
try {
List<URI> virtualNASUris = dbClient.queryByType(VirtualNAS.class,
true);
Iterator<VirtualNAS> virtualNASIterator = dbClient
.queryIterativeObjects(VirtualNAS.class, virtualNASUris,
true);
logger.info("Processing virtual NASs to set the associated project into a set.");
while (virtualNASIterator.hasNext()) {
VirtualNAS virtualNAS = virtualNASIterator.next();
URI projectURI = virtualNAS.getProject();
if (!NullColumnValueGetter.isNullURI(projectURI)) {
virtualNAS.associateProject(projectURI.toString());
vNASList.add(virtualNAS);
}
}
if (!vNASList.isEmpty()) {
logger.debug("Calling updateObject() to update virtual NAS is DB.");
dbClient.updateObject(vNASList);
}
} catch (Exception ex) {
logger.error("Exception occured while associating project to virtual NAS.");
logger.error(ex.getMessage(), ex);
}
logger.info("Migration completed successfully");
}
}