ListObjectsTask.groovy
001 /*
002  * SPDX-License-Identifier: Apache-2.0
003  *
004  * Copyright 2019-2022 Andres Almiray.
005  *
006  * Licensed under the Apache License, Version 2.0 (the "License");
007  * you may not use this file except in compliance with the License.
008  * You may obtain a copy of the License at
009  *
010  *     http://www.apache.org/licenses/LICENSE-2.0
011  *
012  * Unless required by applicable law or agreed to in writing, software
013  * distributed under the License is distributed on an "AS IS" BASIS,
014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015  * See the License for the specific language governing permissions and
016  * limitations under the License.
017  */
018 package org.kordamp.gradle.plugin.oci.tasks.list
019 
020 import com.oracle.bmc.objectstorage.ObjectStorageClient
021 import com.oracle.bmc.objectstorage.model.ObjectSummary
022 import com.oracle.bmc.objectstorage.requests.ListObjectsRequest
023 import com.oracle.bmc.objectstorage.responses.ListObjectsResponse
024 import groovy.transform.CompileStatic
025 import org.kordamp.gradle.plugin.oci.tasks.AbstractOCITask
026 import org.kordamp.gradle.plugin.oci.tasks.interfaces.OCITask
027 import org.kordamp.gradle.plugin.oci.tasks.traits.BucketNameAwareTrait
028 import org.kordamp.gradle.plugin.oci.tasks.traits.NamespaceNameAwareTrait
029 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalDelimiterAwareTrait
030 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalEndAwareTrait
031 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalFieldsAwareTrait
032 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalLimitAwareTrait
033 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalPrefixAwareTrait
034 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalStartAwareTrait
035 import org.kordamp.gradle.plugin.oci.tasks.traits.VerboseAwareTrait
036 import org.kordamp.jipsy.annotations.TypeProviderFor
037 
038 import static org.kordamp.gradle.util.StringUtils.isNotBlank
039 import static org.kordamp.gradle.plugin.oci.tasks.printers.ObjectSummaryPrinter.printObjectSummary
040 
041 /**
042  @author Andres Almiray
043  @since 0.3.0
044  */
045 @CompileStatic
046 @TypeProviderFor(OCITask)
047 class ListObjectsTask extends AbstractOCITask implements NamespaceNameAwareTrait,
048     BucketNameAwareTrait,
049     OptionalPrefixAwareTrait,
050     OptionalDelimiterAwareTrait,
051     OptionalStartAwareTrait,
052     OptionalEndAwareTrait,
053     OptionalLimitAwareTrait,
054     OptionalFieldsAwareTrait,
055     VerboseAwareTrait {
056     static final String TASK_DESCRIPTION = 'Lists available Objects in a Bucket.'
057 
058     @Override
059     protected void doExecuteTask() {
060         validateNamespaceName()
061         validateBucketName()
062 
063         ObjectStorageClient client = createObjectStorageClient()
064         ListObjectsRequest.Builder builder = ListObjectsRequest.builder()
065             .namespaceName(getResolvedNamespaceName().get())
066             .bucketName(getResolvedBucketName().get())
067 
068         Integer limit = getResolvedLimit().get() ?: 1000
069         if (null != limit) {
070             builder = builder.limit(limit)
071         }
072 
073         String s = getResolvedPrefix().orNull
074         if (isNotBlank(s)) {
075             builder = builder.prefix(s)
076         }
077         s = getResolvedDelimiter().orNull
078         if (isNotBlank(s)) {
079             builder = builder.delimiter(s)
080         }
081         s = getResolvedStart().orNull
082         if (isNotBlank(s)) {
083             builder = builder.start(s)
084         }
085         s = getResolvedEnd().orNull
086         if (isNotBlank(s)) {
087             builder = builder.end(s)
088         }
089         s = getResolvedFields().orNull
090         if (isNotBlank(s)) {
091             builder = builder.fields(s)
092         }
093 
094         ListObjectsResponse response = client.listObjects(builder.build())
095 
096         println('Total Objects: ' + console.cyan(response.listObjects.objects.size().toString()))
097         println(' ')
098         for (ObjectSummary objectSummary : response.listObjects.objects) {
099             println(objectSummary.name + (getResolvedVerbose().get() ':' ''))
100             if (getResolvedVerbose().get()) {
101                 printObjectSummary(this, objectSummary, 0)
102             }
103         }
104     }
105 }