Search in sources :

Example 1 with AbstractDataStorageItem

use of com.epam.pipeline.entity.datastorage.AbstractDataStorageItem in project cloud-pipeline by epam.

the class NFSStorageProviderTest method testCreateFileFolderAndList.

@Test
public void testCreateFileFolderAndList() {
    NFSDataStorage dataStorage = new NFSDataStorage(0L, TEST_STORAGE_NAME, TEST_PATH + 2 + ":/test");
    nfsProvider.createStorage(dataStorage);
    String testFileName = "testFile.txt";
    nfsProvider.createFile(dataStorage, testFileName, "testContent".getBytes());
    File dataStorageRoot = new File(testMountPoint, TEST_PATH + 2 + "/test");
    File testFile = new File(dataStorageRoot, testFileName);
    Assert.assertTrue(testFile.exists());
    String testFolderName = "testFolder";
    nfsProvider.createFolder(dataStorage, testFolderName);
    File testFolder = new File(dataStorageRoot, testFolderName);
    Assert.assertTrue(testFolder.exists());
    DataStorageListing listing = nfsProvider.getItems(dataStorage, null, false, DEFAULT_PAGE_SIZE, null);
    Assert.assertFalse(listing.getResults().isEmpty());
    Optional<AbstractDataStorageItem> loadedFile = listing.getResults().stream().filter(i -> i.getType() == DataStorageItemType.File).findFirst();
    Assert.assertTrue(loadedFile.isPresent());
    Assert.assertEquals(testFileName, loadedFile.get().getName());
    Assert.assertEquals(testFileName, loadedFile.get().getPath());
    Assert.assertNotNull(((DataStorageFile) loadedFile.get()).getChanged());
    Optional<AbstractDataStorageItem> loadedFolder = listing.getResults().stream().filter(i -> i.getType() == DataStorageItemType.Folder).findFirst();
    Assert.assertTrue(loadedFolder.isPresent());
    Assert.assertEquals(testFolderName, loadedFolder.get().getName());
    Assert.assertEquals(testFolderName + "/", loadedFolder.get().getPath());
    Assert.assertNull(listing.getNextPageMarker());
    listing = nfsProvider.getItems(dataStorage, null, false, 1, null);
    Assert.assertEquals("2", listing.getNextPageMarker());
    listing = nfsProvider.getItems(dataStorage, null, false, 1, listing.getNextPageMarker());
    Assert.assertNull(listing.getNextPageMarker());
    Assert.assertFalse(listing.getResults().isEmpty());
}
Also used : DataStorageListing(com.epam.pipeline.entity.datastorage.DataStorageListing) BeforeClass(org.junit.BeforeClass) DataStorageDao(com.epam.pipeline.dao.datastorage.DataStorageDao) Mock(org.mockito.Mock) Autowired(org.springframework.beans.factory.annotation.Autowired) AbstractSpringTest(com.epam.pipeline.AbstractSpringTest) Matchers.anyString(org.mockito.Matchers.anyString) DataStorageFolder(com.epam.pipeline.entity.datastorage.DataStorageFolder) MockitoAnnotations(org.mockito.MockitoAnnotations) Propagation(org.springframework.transaction.annotation.Propagation) DataStorageListing(com.epam.pipeline.entity.datastorage.DataStorageListing) Before(org.junit.Before) AfterClass(org.junit.AfterClass) DataStorageItemType(com.epam.pipeline.entity.datastorage.DataStorageItemType) FileUtils(org.apache.commons.io.FileUtils) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) File(java.io.File) NFSDataStorage(com.epam.pipeline.entity.datastorage.nfs.NFSDataStorage) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) Whitebox(org.mockito.internal.util.reflection.Whitebox) Optional(java.util.Optional) CmdExecutor(com.epam.pipeline.manager.CmdExecutor) Assert(org.junit.Assert) Transactional(org.springframework.transaction.annotation.Transactional) NFSDataStorage(com.epam.pipeline.entity.datastorage.nfs.NFSDataStorage) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) Matchers.anyString(org.mockito.Matchers.anyString) File(java.io.File) DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) AbstractSpringTest(com.epam.pipeline.AbstractSpringTest) Test(org.junit.Test)

Example 2 with AbstractDataStorageItem

use of com.epam.pipeline.entity.datastorage.AbstractDataStorageItem in project cloud-pipeline by epam.

the class DataStorageManager method updateDataStorageItems.

public List<AbstractDataStorageItem> updateDataStorageItems(final Long dataStorageId, List<UpdateDataStorageItemVO> list) throws DataStorageException {
    AbstractDataStorage dataStorage = load(dataStorageId);
    List<AbstractDataStorageItem> updatedItems = new ArrayList<>();
    for (UpdateDataStorageItemVO item : list) {
        updatedItems.add(updateDataStorageItem(dataStorage, item));
    }
    return updatedItems;
}
Also used : AbstractDataStorage(com.epam.pipeline.entity.datastorage.AbstractDataStorage) UpdateDataStorageItemVO(com.epam.pipeline.controller.vo.data.storage.UpdateDataStorageItemVO) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) ArrayList(java.util.ArrayList)

Example 3 with AbstractDataStorageItem

use of com.epam.pipeline.entity.datastorage.AbstractDataStorageItem in project cloud-pipeline by epam.

the class NFSStorageProvider method getItems.

@Override
public DataStorageListing getItems(NFSDataStorage dataStorage, String path, Boolean showVersion, Integer pageSize, String marker) {
    File dataStorageRoot = mount(dataStorage);
    File dir = path != null ? new File(dataStorageRoot, path) : dataStorageRoot;
    long offset = StringUtils.isNumeric(marker) ? Long.parseLong(marker) : 1;
    try (Stream<Path> dirStream = Files.walk(dir.toPath(), 1)) {
        List<AbstractDataStorageItem> dataStorageItems = dirStream.sorted().skip(// First element is a directory itself
        offset).limit(pageSize).map(p -> {
            File file = p.toFile();
            AbstractDataStorageItem item;
            if (file.isDirectory()) {
                item = new DataStorageFolder();
            } else {
                // set size if it's a file
                DataStorageFile dataStorageFile = new DataStorageFile();
                dataStorageFile.setSize(file.length());
                dataStorageFile.setChanged(S3Constants.getAwsDateFormat().format(new Date(file.lastModified())));
                item = dataStorageFile;
            }
            item.setName(file.getName());
            item.setPath(dataStorageRoot.toURI().relativize(file.toURI()).getPath());
            return item;
        }).collect(Collectors.toList());
        DataStorageListing listing = new DataStorageListing();
        listing.setResults(dataStorageItems);
        Long nextOffset = offset + pageSize;
        try (Stream<Path> nextStream = Files.walk(dir.toPath(), 1)) {
            if (nextStream.skip(nextOffset).findFirst().isPresent()) {
                listing.setNextPageMarker(nextOffset.toString());
            }
        }
        return listing;
    } catch (IOException e) {
        throw new DataStorageException(e);
    }
}
Also used : Path(java.nio.file.Path) Arrays(java.util.Arrays) Date(java.util.Date) S3Constants(com.epam.pipeline.manager.datastorage.providers.aws.s3.S3Constants) LoggerFactory(org.slf4j.LoggerFactory) SystemPreferences(com.epam.pipeline.manager.preference.SystemPreferences) Autowired(org.springframework.beans.factory.annotation.Autowired) StringUtils(org.apache.commons.lang3.StringUtils) Matcher(java.util.regex.Matcher) MessageHelper(com.epam.pipeline.common.MessageHelper) ByteArrayInputStream(java.io.ByteArrayInputStream) Map(java.util.Map) DataStorageItemContent(com.epam.pipeline.entity.datastorage.DataStorageItemContent) DataStorageListing(com.epam.pipeline.entity.datastorage.DataStorageListing) Path(java.nio.file.Path) PosixFilePermission(java.nio.file.attribute.PosixFilePermission) DataStorageDownloadFileUrl(com.epam.pipeline.entity.datastorage.DataStorageDownloadFileUrl) Set(java.util.Set) Collectors(java.util.stream.Collectors) FileNotFoundException(java.io.FileNotFoundException) DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) Stream(java.util.stream.Stream) CmdExecutionException(com.epam.pipeline.exception.CmdExecutionException) DataStorageStreamingContent(com.epam.pipeline.entity.datastorage.DataStorageStreamingContent) CmdExecutor(com.epam.pipeline.manager.CmdExecutor) Pattern(java.util.regex.Pattern) FileContentUtils(com.epam.pipeline.utils.FileContentUtils) DataStorageDao(com.epam.pipeline.dao.datastorage.DataStorageDao) MessageConstants(com.epam.pipeline.common.MessageConstants) DataStorageFolder(com.epam.pipeline.entity.datastorage.DataStorageFolder) BufferedOutputStream(java.io.BufferedOutputStream) Value(org.springframework.beans.factory.annotation.Value) Service(org.springframework.stereotype.Service) DataStorageException(com.epam.pipeline.entity.datastorage.DataStorageException) PreferenceManager(com.epam.pipeline.manager.preference.PreferenceManager) Logger(org.slf4j.Logger) Files(java.nio.file.Files) SystemUtils(org.apache.commons.lang3.SystemUtils) FileOutputStream(java.io.FileOutputStream) AbstractDataStorage(com.epam.pipeline.entity.datastorage.AbstractDataStorage) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) DataStorageType(com.epam.pipeline.entity.datastorage.DataStorageType) FileInputStream(java.io.FileInputStream) NFSDataStorage(com.epam.pipeline.entity.datastorage.nfs.NFSDataStorage) File(java.io.File) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) Paths(java.nio.file.Paths) Collections(java.util.Collections) Assert(org.springframework.util.Assert) InputStream(java.io.InputStream) DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) IOException(java.io.IOException) Date(java.util.Date) DataStorageFolder(com.epam.pipeline.entity.datastorage.DataStorageFolder) DataStorageListing(com.epam.pipeline.entity.datastorage.DataStorageListing) DataStorageException(com.epam.pipeline.entity.datastorage.DataStorageException) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) File(java.io.File)

Example 4 with AbstractDataStorageItem

use of com.epam.pipeline.entity.datastorage.AbstractDataStorageItem in project cloud-pipeline by epam.

the class S3Helper method listVersions.

private DataStorageListing listVersions(AmazonS3 client, String bucket, String requestPath, Integer pageSize, String marker) {
    ListVersionsRequest request = new ListVersionsRequest().withBucketName(bucket).withPrefix(requestPath).withDelimiter(S3Constants.DELIMITER);
    if (StringUtils.hasValue(marker)) {
        request.setKeyMarker(marker);
    }
    if (pageSize != null) {
        request.setMaxResults(pageSize);
    }
    VersionListing versionListing;
    List<AbstractDataStorageItem> items = new ArrayList<>();
    Map<String, DataStorageFile> itemKeys = new HashMap<>();
    String previous = null;
    do {
        versionListing = client.listVersions(request);
        for (String commonPrefix : versionListing.getCommonPrefixes()) {
            if (checkListingSize(pageSize, items, itemKeys)) {
                items.addAll(itemKeys.values());
                return new DataStorageListing(previous, items);
            }
            previous = getPreviousKey(previous, commonPrefix);
            AbstractDataStorageItem folder = parseFolder(requestPath, commonPrefix);
            items.add(folder);
        }
        for (S3VersionSummary versionSummary : versionListing.getVersionSummaries()) {
            if (!pathMatch(requestPath, versionSummary.getKey())) {
                continue;
            }
            DataStorageFile file = AbstractS3ObjectWrapper.getWrapper(versionSummary).convertToStorageFile(requestPath);
            if (file == null) {
                continue;
            }
            if (!itemKeys.containsKey(file.getName())) {
                if (checkListingSize(pageSize, items, itemKeys)) {
                    items.addAll(itemKeys.values());
                    return new DataStorageListing(previous, items);
                }
                previous = getPreviousKey(previous, versionSummary.getKey());
                Map<String, AbstractDataStorageItem> versions = new LinkedHashMap<>();
                versions.put(file.getVersion(), file.copy(file));
                file.setVersions(versions);
                itemKeys.put(file.getName(), file);
            } else {
                DataStorageFile item = itemKeys.get(file.getName());
                Map<String, AbstractDataStorageItem> versions = item.getVersions();
                versions.put(file.getVersion(), file.copy(file));
                if (isLaterVersion(file.getChanged(), item.getChanged())) {
                    file.setVersions(versions);
                    itemKeys.put(file.getName(), file);
                }
            }
        }
        request.setKeyMarker(versionListing.getNextKeyMarker());
        request.setVersionIdMarker(versionListing.getNextVersionIdMarker());
    } while (versionListing.isTruncated());
    items.addAll(itemKeys.values());
    String returnToken = versionListing.isTruncated() ? previous : null;
    return new DataStorageListing(returnToken, items);
}
Also used : DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) VersionListing(com.amazonaws.services.s3.model.VersionListing) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) DataStorageListing(com.epam.pipeline.entity.datastorage.DataStorageListing) S3VersionSummary(com.amazonaws.services.s3.model.S3VersionSummary) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem) ListVersionsRequest(com.amazonaws.services.s3.model.ListVersionsRequest)

Example 5 with AbstractDataStorageItem

use of com.epam.pipeline.entity.datastorage.AbstractDataStorageItem in project cloud-pipeline by epam.

the class DataStorageManager method getDataStorageItemWithTags.

public AbstractDataStorageItem getDataStorageItemWithTags(final Long dataStorageId, final String path, Boolean showVersion) {
    List<AbstractDataStorageItem> dataStorageItems = getDataStorageItems(dataStorageId, path, showVersion, null, null).getResults();
    if (CollectionUtils.isEmpty(dataStorageItems)) {
        return null;
    }
    DataStorageFile dataStorageFile = (DataStorageFile) dataStorageItems.get(0);
    if (MapUtils.isEmpty(dataStorageFile.getVersions())) {
        dataStorageFile.setTags(loadDataStorageObjectTags(dataStorageId, path, null));
    } else {
        dataStorageFile.getVersions().forEach((version, item) -> item.setTags(loadDataStorageObjectTags(dataStorageId, path, version)));
    }
    return dataStorageFile;
}
Also used : DataStorageFile(com.epam.pipeline.entity.datastorage.DataStorageFile) AbstractDataStorageItem(com.epam.pipeline.entity.datastorage.AbstractDataStorageItem)

Aggregations

AbstractDataStorageItem (com.epam.pipeline.entity.datastorage.AbstractDataStorageItem)6 DataStorageFile (com.epam.pipeline.entity.datastorage.DataStorageFile)5 DataStorageListing (com.epam.pipeline.entity.datastorage.DataStorageListing)4 ArrayList (java.util.ArrayList)3 DataStorageDao (com.epam.pipeline.dao.datastorage.DataStorageDao)2 AbstractDataStorage (com.epam.pipeline.entity.datastorage.AbstractDataStorage)2 DataStorageFolder (com.epam.pipeline.entity.datastorage.DataStorageFolder)2 NFSDataStorage (com.epam.pipeline.entity.datastorage.nfs.NFSDataStorage)2 CmdExecutor (com.epam.pipeline.manager.CmdExecutor)2 File (java.io.File)2 FileUtils (org.apache.commons.io.FileUtils)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 ListObjectsV2Request (com.amazonaws.services.s3.model.ListObjectsV2Request)1 ListObjectsV2Result (com.amazonaws.services.s3.model.ListObjectsV2Result)1 ListVersionsRequest (com.amazonaws.services.s3.model.ListVersionsRequest)1 S3ObjectSummary (com.amazonaws.services.s3.model.S3ObjectSummary)1 S3VersionSummary (com.amazonaws.services.s3.model.S3VersionSummary)1 VersionListing (com.amazonaws.services.s3.model.VersionListing)1 AbstractSpringTest (com.epam.pipeline.AbstractSpringTest)1 MessageConstants (com.epam.pipeline.common.MessageConstants)1