/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.server.upgrade.util.callbacks;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.StringMap;
import com.emc.storageos.db.server.upgrade.util.BaseTestCustomMigrationCallback;
import com.emc.storageos.db.server.upgrade.util.models.updated.Resource2;
import com.emc.storageos.db.server.upgrade.util.models.updated.Resource1;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
/**
* Callback for populating Resource3 reference on Resource 2
*/
public class Resource3RefPopulator extends BaseTestCustomMigrationCallback {
List<URI> expected = new ArrayList<URI>();
@Override
public void process() {
DbClient dbClient = getDbClient();
List<URI> res2Keys = dbClient.queryByType(Resource2.class, false);
Iterator<Resource2> res2Objs =
dbClient.queryIterativeObjects(Resource2.class, res2Keys);
while (res2Objs.hasNext()) {
Resource2 res2 = res2Objs.next();
if (res2.getRes1() != null) {
Resource1 res1 = dbClient.queryObject(
Resource1.class, res2.getRes1().getURI());
if (res1 != null) {
StringMap map = res1.getRes3Map();
Set<String> keys = map.keySet();
URI res3Id = URI.create((String) keys.toArray()[0]);
res2.setRes3(res3Id);
dbClient.persistObject(res2);
expected.add(res3Id);
}
}
}
}
@Override
public void verify() {
DbClient dbClient = getDbClient();
List<URI> res2Keys = dbClient.queryByType(Resource2.class, false);
Iterator<Resource2> res2Objs =
dbClient.queryIterativeObjects(Resource2.class, res2Keys);
Assert.assertNotNull(res2Objs);
while (res2Objs.hasNext()) {
Resource2 res2 = res2Objs.next();
Assert.assertNotNull(res2.getRes1());
Resource1 res1 = dbClient.queryObject(
Resource1.class, res2.getRes1().getURI());
Assert.assertNotNull(res1);
Assert.assertTrue(expected.contains(res2.getRes3()));
}
}
}