/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.block.taskcompleter; import java.net.URI; import java.util.List; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.ExportGroup; import com.emc.storageos.db.client.model.ExportMask; import com.emc.storageos.db.client.model.Initiator; import com.emc.storageos.db.client.model.Operation; import com.emc.storageos.exceptions.DeviceControllerException; import com.emc.storageos.svcs.errorhandling.model.ServiceCoded; public class ExportMaskAddPathsCompleter extends ExportTaskCompleter{ private static final org.slf4j.Logger _log = LoggerFactory.getLogger(ExportMaskAddPathsCompleter.class); private List<URI> newTargets; private List<URI> newInitiators; public ExportMaskAddPathsCompleter(URI id, URI emURI, String opId) { super(ExportGroup.class, id, emURI, opId); } public void setNewStoragePorts(List<URI> ports) { newTargets = ports; } public void setNewInitiators(List<URI> initiators) { newInitiators = initiators; } @Override protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException { try { if (status == Operation.Status.ready) { ExportMask exportMask = dbClient.queryObject(ExportMask.class, getMask()); if (newTargets != null && !newTargets.isEmpty()) { for (URI target : newTargets) { exportMask.addTarget(target); } } if(newInitiators != null && !newInitiators.isEmpty()) { for (URI initiatorURI : newInitiators) { Initiator initiator = dbClient.queryObject(Initiator.class, initiatorURI); if (initiator != null && !initiator.getInactive()) { exportMask.addInitiator(initiator); exportMask.addToUserCreatedInitiators(initiator); } } } dbClient.updateObject(exportMask); } } catch (Exception e) { _log.error(String.format( "Failed updating status for ExportMaskAddPaths - Id: %s, OpId: %s", getId().toString(), getOpId()), e); } finally { super.complete(dbClient, status, coded); } } }