From e66b58b65f0501898f58022d055ae25e4def5144 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 10 Dec 2013 10:52:19 -0800 Subject: [PATCH] Separate AttachIso and DetachIso to use different response views. --- .../admin/iso/AttachIsoCmdByAdmin.java | 53 +++++++++++++++++++ .../admin/iso/DetachIsoCmdByAdmin.java | 47 ++++++++++++++++ .../api/command/user/iso/AttachIsoCmd.java | 4 +- .../api/command/user/iso/DetachIsoCmd.java | 2 +- 4 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java create mode 100644 api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java new file mode 100644 index 00000000000..7c3db62d1af --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/iso/AttachIsoCmdByAdmin.java @@ -0,0 +1,53 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.iso; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.user.iso.AttachIsoCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.context.CallContext; + +import com.cloud.uservm.UserVm; + +@APICommand(name = "attachIso", description = "Attaches an ISO to a virtual machine.", responseObject = UserVmResponse.class, responseView = ResponseView.Full) +public class AttachIsoCmdByAdmin extends AttachIsoCmd { + public static final Logger s_logger = Logger.getLogger(AttachIsoCmdByAdmin.class.getName()); + + @Override + public void execute(){ + CallContext.current().setEventDetails("Vm Id: " +getVirtualMachineId()+ " ISO Id: "+getId()); + boolean result = _templateService.attachIso(id, virtualMachineId); + if (result) { + UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId); + if (userVm != null) { + UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Full, "virtualmachine", userVm).get(0); + response.setResponseName(DeployVMCmd.getResultObjectName()); + setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); + } + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java new file mode 100644 index 00000000000..144e3f98663 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/iso/DetachIsoCmdByAdmin.java @@ -0,0 +1,47 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.iso; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.user.iso.DetachIsoCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.response.UserVmResponse; + +import com.cloud.uservm.UserVm; + +@APICommand(name = "detachIso", description = "Detaches any ISO file (if any) currently attached to a virtual machine.", responseObject = UserVmResponse.class, responseView = ResponseView.Full) +public class DetachIsoCmdByAdmin extends DetachIsoCmd { + public static final Logger s_logger = Logger.getLogger(DetachIsoCmdByAdmin.class.getName()); + + @Override + public void execute(){ + boolean result = _templateService.detachIso(virtualMachineId); + if (result) { + UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); + UserVmResponse response = _responseGenerator.createUserVmResponse(ResponseView.Full, "virtualmachine", userVm).get(0); + response.setResponseName(DeployVMCmd.getResultObjectName()); + setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to detach iso"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index d021350a964..b5f28e83555 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -46,11 +46,11 @@ public class AttachIsoCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, required=true, description="the ID of the ISO file") - private Long id; + protected Long id; @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, required=true, description="the ID of the virtual machine") - private Long virtualMachineId; + protected Long virtualMachineId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index 00aebb2e9ad..5acaeb0fe23 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -44,7 +44,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, required=true, description="The ID of the virtual machine") - private Long virtualMachineId; + protected Long virtualMachineId; ///////////////////////////////////////////////////// /////////////////// Accessors ///////////////////////