summaryrefslogtreecommitdiff
path: root/src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java')
-rw-r--r--src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java b/src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java
new file mode 100644
index 0000000..6fe0c4d
--- /dev/null
+++ b/src/plugins/db.devices/src/com/motorolamobility/studio/android/db/devices/model/ApplicationNode.java
@@ -0,0 +1,196 @@
+/*
+* 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.motorolamobility.studio.android.db.devices.model;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+import com.motorola.studio.android.adt.DDMSUtils;
+import com.motorolamobility.studio.android.db.core.CanRefreshStatus;
+import com.motorolamobility.studio.android.db.core.exception.MotodevDbException;
+import com.motorolamobility.studio.android.db.core.model.TableModel;
+import com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode;
+import com.motorolamobility.studio.android.db.core.ui.IDbNode;
+import com.motorolamobility.studio.android.db.core.ui.ITreeNode;
+import com.motorolamobility.studio.android.db.core.ui.action.IDbCreatorNode;
+import com.motorolamobility.studio.android.db.devices.DbDevicesPlugin;
+import com.motorolamobility.studio.android.db.devices.i18n.DbDevicesNLS;
+import com.motorolamobility.studio.android.db.devices.utils.DeviceDbUtils;
+
+/**
+ * This class represents a tree node for an application installed on a device.
+ */
+public class ApplicationNode extends AbstractTreeNode implements IDbCreatorNode
+{
+
+ private String appName;
+
+ private String serialNumber;
+
+ @SuppressWarnings("unused")
+ private ApplicationNode()
+ {
+ //Forcing user to use a proper constructor
+ }
+
+ /**
+ * Creates a new Application node for the app
+ * @param appName the application name
+ * @param parent this node parent
+ */
+ public ApplicationNode(String appName, DeviceNode parent)
+ {
+ super(parent);
+ serialNumber = parent.getSerialNumber();
+ this.appName = appName;
+ setId(appName);
+ setName(appName);
+ ImageDescriptor icon =
+ AbstractUIPlugin.imageDescriptorFromPlugin("com.android.ide.eclipse.adt", //$NON-NLS-1$
+ "icons/android.png"); //$NON-NLS-1$
+ setIcon(icon);
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode#canRefresh()
+ */
+ @Override
+ public IStatus canRefresh()
+ {
+ IStatus status = null;
+ boolean hasConnectedDb = false;
+
+ //Search for connected dbs
+ for (ITreeNode treeNode : getChildren())
+ {
+ if (treeNode instanceof DeviceDbNode)
+ {
+ DeviceDbNode dbNode = (DeviceDbNode) treeNode;
+ hasConnectedDb = dbNode.isConnected();
+ break;
+ }
+ }
+
+ if (hasConnectedDb)
+ {
+ status =
+ new CanRefreshStatus(CanRefreshStatus.ASK_USER, DbDevicesPlugin.PLUGIN_ID,
+ NLS.bind(
+ DbDevicesNLS.ApplicationNode_ConnectedDbs_Refresh_Message, getName()));
+ }
+
+ return status != null ? status : Status.OK_STATUS;
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.andkroid.db.core.ui.AbstractTreeNode#refresh()
+ */
+ @Override
+ public void refresh()
+ {
+ clear();
+ try
+ {
+ List<String> applicationDatabases =
+ DDMSUtils.getApplicationDatabases(serialNumber, appName);
+
+ List<ITreeNode> dbNodes = new ArrayList<ITreeNode>(applicationDatabases.size());
+
+ for (String dbLocation : applicationDatabases)
+ {
+ IPath dbPath = DeviceDbUtils.getRemoteDbPath(appName, dbLocation);
+ DeviceDbNode deviceDbNode = new DeviceDbNode(dbPath, serialNumber, this);
+ dbNodes.add(deviceDbNode);
+ }
+
+ putChildren(dbNodes);
+ setNodeStatus(Status.OK_STATUS);
+ }
+ catch (IOException e)
+ {
+ setNodeStatus(new Status(IStatus.ERROR, DbDevicesPlugin.PLUGIN_ID, e.getMessage()));
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.android.db.core.ui.action.IDbCreatorNode#createDb(java.lang.String)
+ */
+ public IStatus createDb(String dbName)
+ {
+ return createDb(dbName, null);
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.android.db.core.ui.action.IDbCreatorNode#createDb(java.lang.String, java.util.List)
+ */
+ public IStatus createDb(String dbName, List<TableModel> tables)
+ {
+ IStatus status = null;
+
+ IPath remoteDbPath = DeviceDbUtils.getRemoteDbPath(appName, dbName);
+ try
+ {
+ DeviceDbNode dbNode = new DeviceDbNode(remoteDbPath, serialNumber, this, true);
+ if (tables != null)
+ {
+ dbNode.createTables(tables);
+ }
+ putChild(dbNode);
+ }
+ catch (MotodevDbException e)
+ {
+ status =
+ new Status(IStatus.ERROR, DbDevicesPlugin.PLUGIN_ID, NLS.bind(
+ DbDevicesNLS.ApplicationNode_Could_Not_Create_Database,
+ remoteDbPath.toString(), serialNumber));
+ }
+
+ return status != null ? status : Status.OK_STATUS;
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode#isLeaf()
+ */
+ @Override
+ public boolean isLeaf()
+ {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorolamobility.studio.android.db.core.ui.action.IDbCreatorNode#deleteDb(com.motorolamobility.studio.android.db.core.ui.IDbNode)
+ */
+ public IStatus deleteDb(IDbNode dbNode)
+ {
+ IStatus status = dbNode.deleteDb();
+
+ if (status.isOK())
+ {
+ removeChild(dbNode);
+ }
+
+ return status;
+ }
+
+}