DeleteGatewayTask.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.delete
019 
020 import com.oracle.bmc.apigateway.GatewayClient
021 import com.oracle.bmc.apigateway.model.Gateway
022 import com.oracle.bmc.apigateway.model.GatewaySummary
023 import com.oracle.bmc.apigateway.requests.DeleteGatewayRequest
024 import com.oracle.bmc.apigateway.requests.GetGatewayRequest
025 import com.oracle.bmc.apigateway.requests.ListGatewaysRequest
026 import groovy.transform.CompileStatic
027 import org.kordamp.gradle.plugin.oci.tasks.AbstractOCITask
028 import org.kordamp.gradle.plugin.oci.tasks.interfaces.OCITask
029 import org.kordamp.gradle.plugin.oci.tasks.traits.CompartmentIdAwareTrait
030 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalGatewayIdAwareTrait
031 import org.kordamp.gradle.plugin.oci.tasks.traits.OptionalGatewayNameAwareTrait
032 import org.kordamp.gradle.plugin.oci.tasks.traits.WaitForCompletionAwareTrait
033 import org.kordamp.jipsy.annotations.TypeProviderFor
034 
035 import static org.kordamp.gradle.util.StringUtils.isBlank
036 import static org.kordamp.gradle.util.StringUtils.isNotBlank
037 
038 /**
039  @author Andres Almiray
040  @since 0.5.0
041  */
042 @CompileStatic
043 @TypeProviderFor(OCITask)
044 class DeleteGatewayTask extends AbstractOCITask implements CompartmentIdAwareTrait,
045     OptionalGatewayIdAwareTrait,
046     OptionalGatewayNameAwareTrait,
047     WaitForCompletionAwareTrait {
048     static final String TASK_DESCRIPTION = 'Deletes a Gateway.'
049 
050     @Override
051     protected void doExecuteTask() {
052         validateGatewayId()
053 
054         if (isBlank(getResolvedGatewayId().orNull&& isBlank(getResolvedGatewayName().orNull)) {
055             throw new IllegalStateException("Missing value for either 'gatewayId' or 'gatewayName' in $path")
056         }
057 
058         GatewayClient client = createGatewayClient()
059 
060         // TODO: check if gateway exists
061         // TODO: check is gateway is in a 'deletable' state
062 
063         if (isNotBlank(getResolvedGatewayId().orNull)) {
064             Gateway gateway = client.getGateway(GetGatewayRequest.builder()
065                 .gatewayId(getResolvedGatewayId().get())
066                 .build())
067                 .gateway
068 
069             if (gateway) {
070                 setGatewayName(gateway.displayName)
071                 deleteGateway(client, gateway)
072             }
073         else {
074             validateCompartmentId()
075 
076             client.listGateways(ListGatewaysRequest.builder()
077                 .compartmentId(getResolvedCompartmentId().get())
078                 .displayName(getResolvedGatewayName().get())
079                 .build())
080                 .gatewayCollection
081                 .items.each gateway ->
082                 setGatewayId(gateway.id)
083                 deleteGateway(client, gateway)
084             }
085         }
086     }
087 
088     private void deleteGateway(GatewayClient client, Gateway gateway) {
089         println("Deleting Gateway '${gateway.displayName}' with id ${gateway.id}")
090 
091         client.deleteGateway(DeleteGatewayRequest.builder()
092             .gatewayId(gateway.id)
093             .build())
094 
095         if (getResolvedWaitForCompletion().get()) {
096             println("Waiting for Gateway to be ${state('Terminated')}")
097             client.waiters
098                 .forGateway(GetGatewayRequest.builder()
099                     .gatewayId(gateway.id).build(),
100                     Gateway.LifecycleState.Deleted)
101                 .execute()
102         }
103     }
104 
105     private void deleteGateway(GatewayClient client, GatewaySummary gateway) {
106         println("Deleting Gateway '${gateway.displayName}' with id ${gateway.id}")
107 
108         client.deleteGateway(DeleteGatewayRequest.builder()
109             .gatewayId(gateway.id)
110             .build())
111 
112         if (getResolvedWaitForCompletion().get()) {
113             println("Waiting for Gateway to be ${state('Terminated')}")
114             client.waiters
115                 .forGateway(GetGatewayRequest.builder()
116                     .gatewayId(gateway.id).build(),
117                     Gateway.LifecycleState.Deleted)
118                 .execute()
119         }
120     }
121 }