/* * Copyright (c) 2016 EMC * All Rights Reserved */ package com.emc.sa.service.vipr.application; import java.net.URI; import java.util.List; import org.apache.commons.lang.StringUtils; import com.emc.sa.asset.providers.BlockProviderUtils; import com.emc.sa.engine.ExecutionUtils; import com.emc.sa.engine.bind.Param; import com.emc.sa.engine.service.Service; import com.emc.sa.service.ServiceParams; import com.emc.sa.service.vipr.ViPRService; import com.emc.sa.service.vipr.application.tasks.AddVolumesToApplication; import com.emc.sa.service.vipr.block.BlockStorageUtils; import com.emc.storageos.model.DataObjectRestRep; import com.emc.vipr.client.Tasks; @Service("AddVolumesToApplication") public class AddVolumesToApplicationService extends ViPRService { @Param(ServiceParams.APPLICATION) private URI applicationId; @Param(ServiceParams.VOLUME) private List<String> volumeIds; @Param(value = ServiceParams.APPLICATION_SUB_GROUP, required = false) private String existingApplicationSubGroup; @Param(value = ServiceParams.NEW_APPLICATION_SUB_GROUP, required = false) private String newApplicationSubGroup; private String replicationGroup; @Override public void precheck() throws Exception { // if a new sub group is selected, make sure it doesn't already exist if (fieldIsPopulated(newApplicationSubGroup) && BlockProviderUtils.getApplicationReplicationGroupNames(getClient(), applicationId).contains(newApplicationSubGroup)) { ExecutionUtils.fail("failTask.AddVolumesToApplicationService.subGroupUnique.precheck", new Object[] {}); } replicationGroup = fieldIsPopulated(newApplicationSubGroup) ? newApplicationSubGroup : existingApplicationSubGroup; if (StringUtils.isEmpty(replicationGroup) && BlockStorageUtils.isVplexOrRPVolume(volumeIds.iterator().next())) { ExecutionUtils.fail("failTask.AddVolumesToApplicationService.subGroupRequired.precheck", new Object[] {}); } else if (!StringUtils.isEmpty(replicationGroup) && !BlockStorageUtils.isVplexOrRPVolume(volumeIds.iterator().next())) { ExecutionUtils.fail("failTask.AddVolumesToApplicationService.subGroupInvalid.precheck", new Object[] {}); } } @Override public void execute() throws Exception { Tasks<? extends DataObjectRestRep> tasks = execute(new AddVolumesToApplication(applicationId, uris(volumeIds), replicationGroup)); addAffectedResources(tasks); } private boolean fieldIsPopulated(String field) { return (field != null && !field.isEmpty()); } }