/* * Copyright (C) 2012 The Android Open Source Project * * Licensed 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 com.motorola.studio.android.emulator.service.repair; import static com.motorola.studio.android.common.log.StudioLogger.error; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.sequoyah.device.framework.model.IInstance; import org.eclipse.sequoyah.device.framework.model.handler.IServiceHandler; import org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler; import com.android.sdklib.internal.avd.AvdInfo; import com.android.sdklib.internal.avd.AvdInfo.AvdStatus; import com.motorola.studio.android.adt.SdkUtils; import com.motorola.studio.android.emulator.EmulatorPlugin; import com.motorola.studio.android.emulator.device.instance.AndroidDeviceInstance; import com.motorola.studio.android.emulator.device.refresh.InstancesListRefresh; import com.motorola.studio.android.emulator.i18n.EmulatorNLS; /** * This is responsible for repair damaged avds. */ public class RepairAvdHandler extends ServiceHandler { /* (non-Javadoc) * @see org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler#newInstance() */ @Override public IServiceHandler newInstance() { return new RepairAvdHandler(); } /* (non-Javadoc) * @see org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler#runService(org.eclipse.sequoyah.device.framework.model.IInstance, java.util.Map, org.eclipse.core.runtime.IProgressMonitor) */ @Override public IStatus runService(IInstance instance, Map<Object, Object> argumentos, IProgressMonitor monitor) { IStatus status = Status.OK_STATUS; if (!(instance instanceof AndroidDeviceInstance)) { error(EmulatorNLS.RepairAvdHandler_Not_Android_Instance); status = new Status(IStatus.ERROR, EmulatorPlugin.PLUGIN_ID, EmulatorNLS.ERR_StopEmulatorHandler_NotAnAndroidEmulator); } else { AndroidDeviceInstance androidDeviceInstance = (AndroidDeviceInstance) instance; AvdInfo avdInfo = SdkUtils.getVm(androidDeviceInstance.getName()); if ((avdInfo != null) && isAvdRepairable(avdInfo.getStatus())) { status = SdkUtils.repairAvd(avdInfo); if (status.getSeverity() != IStatus.OK) { error(getClass(), "IOException ocurred during repairAvd operation"); //$NON-NLS-1$ } } else { status = new Status(IStatus.ERROR, EmulatorPlugin.PLUGIN_ID, EmulatorNLS.RepairAvdHandler_AVD_NOT_REPAIRABLE); } } if (status.getSeverity() == IStatus.OK) { InstancesListRefresh.refresh(); } return status; } /* (non-Javadoc) * @see org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler#updatingService(org.eclipse.sequoyah.device.framework.model.IInstance, org.eclipse.core.runtime.IProgressMonitor) */ @Override public IStatus updatingService(IInstance arg0, IProgressMonitor arg1) { return Status.OK_STATUS; } private boolean isAvdRepairable(AvdStatus avdStatus) { return avdStatus == AvdStatus.ERROR_IMAGE_DIR; } }