package jp.primecloud.auto.api.address;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import jp.primecloud.auto.api.ApiSupport;
import jp.primecloud.auto.api.ApiValidate;
import jp.primecloud.auto.api.response.address.DeleteAwsAddressResponse;
import jp.primecloud.auto.entity.crud.AwsAddress;
import jp.primecloud.auto.entity.crud.Platform;
import jp.primecloud.auto.entity.crud.User;
import jp.primecloud.auto.exception.AutoApplicationException;
import jp.primecloud.auto.process.aws.AwsProcessClient;
import org.apache.commons.lang.BooleanUtils;
@Path("/DeleteAwsAddress")
public class DeleteAwsAddress extends ApiSupport {
@GET
@Produces(MediaType.APPLICATION_JSON)
public DeleteAwsAddressResponse deleteAwsAddress(@QueryParam(PARAM_NAME_ADDRESS_NO) String addressNo) {
// 入力チェック
ApiValidate.validateAddressNo(addressNo);
// ユーザ取得
User user = checkAndGetUser();
// アドレス情報取得
AwsAddress awsAddress = awsAddressDao.read(Long.parseLong(addressNo));
// アドレス情報が存在しない場合
if (awsAddress == null) {
throw new AutoApplicationException("EAPI-100000", "AwsAddress", PARAM_NAME_ADDRESS_NO, addressNo);
}
// 他ユーザのアドレスの場合
if (!awsAddress.getUserNo().equals(user.getUserNo())) {
throw new AutoApplicationException("EAPI-000020", "AwsAddress", PARAM_NAME_ADDRESS_NO, addressNo);
}
// プラットフォーム取得
Platform platform = platformDao.read(awsAddress.getPlatformNo());
// プラットフォームを選択できない場合
if (BooleanUtils.isNotTrue(platform.getSelectable())) {
throw new AutoApplicationException("EAPI-000020", "AwsAddress", PARAM_NAME_ADDRESS_NO, addressNo);
}
// プラットフォームを利用できない場合
if (!platformService.isUsablePlatform(user.getUserNo(), platform)) {
throw new AutoApplicationException("EAPI-000020", "AwsAddress", PARAM_NAME_ADDRESS_NO, addressNo);
}
// インスタンスに関連付けられている場合
if (awsAddress.getInstanceNo() != null) {
throw new AutoApplicationException("EAPI-100046", "AwsAddress", PARAM_NAME_ADDRESS_NO, addressNo);
}
// AWSアドレスを削除
AwsProcessClient awsProcessClient = awsProcessClientFactory.createAwsProcessClient(user.getUserNo(),
platform.getPlatformNo());
awsAddressProcess.deleteAddress(awsProcessClient, awsAddress.getAddressNo());
DeleteAwsAddressResponse response = new DeleteAwsAddressResponse();
return response;
}
}