/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.vipr.file.tasks; import java.net.URI; import java.util.Iterator; import java.util.List; import com.emc.sa.service.vipr.block.tasks.IngestUnexportedUnmanagedVolumes; import com.emc.sa.service.vipr.tasks.ViPRExecutionTask; import com.emc.storageos.model.NamedRelatedResourceRep; import com.emc.storageos.model.file.FileSystemIngest; import com.google.common.collect.Lists; public class IngestUnmanagedFilesystems extends ViPRExecutionTask<List<NamedRelatedResourceRep>> { private URI vpoolId; private URI projectId; private URI varrayId; private List<URI> unmanagedFilesystemIds; public IngestUnmanagedFilesystems(String vpoolId, String varrayId, String projectId, List<String> unmanagedFilesystemIds) { this(uri(vpoolId), uri(varrayId), uri(projectId), uris(unmanagedFilesystemIds)); } public IngestUnmanagedFilesystems(URI vpoolId, URI varrayId, URI projectId, List<URI> unmanagedFilesystemIds) { this.vpoolId = vpoolId; this.varrayId = varrayId; this.projectId = projectId; this.unmanagedFilesystemIds = unmanagedFilesystemIds; provideDetailArgs(vpoolId, projectId, varrayId, unmanagedFilesystemIds.size()); } @Override public List<NamedRelatedResourceRep> executeTask() throws Exception { FileSystemIngest ingest = new FileSystemIngest(); ingest.setProject(projectId); ingest.setVarray(varrayId); ingest.setVpool(vpoolId); return ingestInChunks(ingest); } private List<NamedRelatedResourceRep> ingestInChunks(FileSystemIngest ingest) { List<NamedRelatedResourceRep> results = Lists.newArrayList(); int i = 1; for (Iterator<URI> ids = unmanagedFilesystemIds.iterator(); ids.hasNext();) { i++; URI id = ids.next(); ingest.getUnManagedFileSystems().add(id); if (i == IngestUnexportedUnmanagedVolumes.INGEST_CHUNK_SIZE || !ids.hasNext()) { results.addAll(ingestFilesystems(ingest)); ingest.getUnManagedFileSystems().clear(); i = 0; } } return results; } protected List<NamedRelatedResourceRep> ingestFilesystems(FileSystemIngest ingest) { return getClient().unmanagedFileSystems().ingest(ingest); } }