| /* |
| * 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.device.init; |
| |
| import static com.motorola.studio.android.common.log.StudioLogger.info; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.sequoyah.device.framework.events.InstanceEvent; |
| import org.eclipse.sequoyah.device.framework.events.InstanceEvent.InstanceEventType; |
| import org.eclipse.sequoyah.device.framework.events.InstanceEventManager; |
| import org.eclipse.sequoyah.device.framework.model.IInstance; |
| import org.eclipse.sequoyah.device.framework.model.IService; |
| import org.eclipse.sequoyah.device.framework.model.handler.IServiceHandler; |
| |
| import com.motorola.studio.android.emulator.EmulatorPlugin; |
| import com.motorola.studio.android.emulator.logic.IAndroidLogicInstance; |
| |
| /** |
| * DESCRIPTION: |
| * This class plugs the init procedure to a TmL service. This service implements the |
| * interface directly, because it causes the instance to have a particular behavior |
| * at the state machine. |
| * |
| * RESPONSIBILITY: |
| * Provide the initialization procedure to apply to every instance that |
| * is loaded at TmL device framework |
| * |
| * COLABORATORS: |
| * None. |
| * |
| * USAGE: |
| * This class is intended to be used by Eclipse only |
| */ |
| public class InitServiceHandler implements IServiceHandler |
| { |
| /** |
| * The parent service handler |
| */ |
| private IServiceHandler parent; |
| |
| /** |
| * The service that launches the handler |
| */ |
| private IService service; |
| |
| /** |
| * @see IServiceHandler#run(IInstance) |
| */ |
| public void run(IInstance instance) |
| { |
| if (instance instanceof IAndroidLogicInstance) |
| { |
| // The service definition defined (by convention) that |
| // stopped-dirty is the success state, and not available |
| // is the failure state. The exception is being thrown for |
| // the framework to set the state correctly. |
| instance.setStatus(EmulatorPlugin.STATUS_NOT_AVAILABLE); |
| InstanceEventManager.getInstance().notifyListeners( |
| new InstanceEvent(InstanceEventType.INSTANCE_TRANSITIONED, instance)); |
| } |
| |
| } |
| |
| /** |
| * @see IServiceHandler#newInstance() |
| */ |
| public IServiceHandler newInstance() |
| { |
| return new InitServiceHandler(); |
| } |
| |
| /** |
| * @see IServiceHandler#setParent(IServiceHandler) |
| */ |
| public void setParent(IServiceHandler handler) |
| { |
| this.parent = handler; |
| } |
| |
| /** |
| * @see IServiceHandler#setService(IService) |
| */ |
| public void setService(IService service) |
| { |
| this.service = service; |
| } |
| |
| /** |
| * @see IServiceHandler#updatingService(IInstance) |
| */ |
| public void updatingService(IInstance instance) |
| { |
| info("Updating init emulator service"); |
| } |
| |
| /** |
| * @see IServiceHandler#clone() |
| * @see Cloneable#clone() |
| */ |
| @Override |
| public Object clone() |
| { |
| IServiceHandler newHandler = newInstance(); |
| newHandler.setParent(parent); |
| newHandler.setService(service); |
| return newHandler; |
| } |
| |
| /** |
| * @see IServiceHandler#getParent() |
| */ |
| public IServiceHandler getParent() |
| { |
| return parent; |
| } |
| |
| /** |
| * @see IServiceHandler#getService() |
| */ |
| public IService getService() |
| { |
| return service; |
| } |
| |
| public IStatus singleInit(List<IInstance> instances) |
| { |
| return Status.OK_STATUS; |
| } |
| } |