summaryrefslogtreecommitdiff
path: root/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java')
-rw-r--r--src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java b/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java
new file mode 100644
index 0000000..fa516df
--- /dev/null
+++ b/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/DisconnectFromRemoteHandler.java
@@ -0,0 +1,141 @@
+/*
+ * 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.remote.handlers;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+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.handler.IServiceHandler;
+import org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler;
+
+import com.motorola.studio.android.adt.DDMSFacade;
+import com.motorola.studio.android.adt.ISerialNumbered;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.remote.RemoteDeviceConstants;
+import com.motorola.studio.android.remote.RemoteDevicePlugin;
+import com.motorola.studio.android.remote.i18n.RemoteDeviceNLS;
+import com.motorola.studio.android.remote.instance.RemoteDeviceInstance;
+
+/**
+ * Service handler responsible for disconnecting from a remote device.
+ */
+public class DisconnectFromRemoteHandler extends ServiceHandler
+{
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler#newInstance()
+ */
+ @Override
+ public IServiceHandler newInstance()
+ {
+ return new DisconnectFromRemoteHandler();
+ }
+
+ /*
+ * (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> arguments,
+ IProgressMonitor monitor)
+ {
+ StudioLogger
+ .debug("TmL Disconnect from Remote Device Service: start disconnecting from remote device: "
+ + instance);
+
+ if (arguments != null)
+ {
+ if (((Boolean) arguments.get(RemoteDeviceConstants.DUMMY_TRANSITION)).booleanValue())
+ {
+ StudioLogger.debug("TmL Disconnect from Remote Device Service: dummy transition");
+ setSuffix(instance);
+ return Status.OK_STATUS;
+ }
+ }
+
+ IStatus status = Status.OK_STATUS;
+
+ /*
+ * Call ADB disconnect
+ */
+ Properties prop = instance.getProperties();
+ String host = prop.getProperty(RemoteDeviceInstance.PROPERTY_HOST);
+ String port = prop.getProperty(RemoteDeviceInstance.PROPERTY_PORT);
+ String timeout = prop.getProperty(RemoteDeviceInstance.PROPERTY_TIMEOUT);
+
+ try
+ {
+ status =
+ DDMSFacade.disconnectTcpIp((ISerialNumbered) instance, host, port,
+ Integer.parseInt(timeout), monitor);
+ }
+ catch (IOException e)
+ {
+ return new Status(IStatus.ERROR, RemoteDevicePlugin.PLUGIN_ID,
+ RemoteDeviceNLS.ERR_DisconnectToRemote_AdbStart);
+ }
+
+ /* ------------------------------------------------------------ */
+
+ if (status.getSeverity() == IStatus.OK)
+ {
+ setSuffix(instance);
+ }
+
+ StudioLogger
+ .debug("TmL Disconnect from Remote Device Service: finish disconnecting from remote device. status: "
+ + status.getSeverity());
+
+ 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 instance, IProgressMonitor monitor)
+ {
+ return Status.OK_STATUS;
+ }
+
+ /*
+ * Set the suffix to null - i.e. no suffix
+ *
+ * @param instance the instance from which the suffix will be removed
+ */
+ private void setSuffix(IInstance instance)
+ {
+ if (instance != null)
+ {
+ StudioLogger
+ .debug("TmL Disconnect from Remote Device Service: removing suffix from instance "
+ + instance.getName());
+ instance.setNameSuffix(null);
+ InstanceEventManager.getInstance().notifyListeners(
+ new InstanceEvent(InstanceEventType.INSTANCE_UPDATED, instance));
+ }
+ }
+
+}