blob: 0a0d6a363f650b3d1ba46621e944e0a4b46cbdb7 [file] [log] [blame]
/*
* 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;
}
}