org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorTargetType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorTargetType.java Thu Jul 29 10:00:34 2010 -0700
@@ -0,0 +1,196 @@
+/**
+ * Copyright (c) 2010 Symbian Foundation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Symbian Foundation - initial contribution.
+ * Contributors:
+ * Description:
+ * Overview:
+ * Details:
+ * Platforms/Drives/Compatibility:
+ * Assumptions/Requirement/Pre-requisites:
+ * Failures and causes:
+ */
+package org.symbian.tools.wrttools.core.deploy.emulator;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.symbian.tools.mtw.core.projects.IMTWProject;
+import org.symbian.tools.mtw.ui.deployment.IDeploymentTarget;
+import org.symbian.tools.mtw.ui.deployment.IDeploymentTargetType;
+import org.symbian.tools.wrttools.core.IWRTConstants;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public final class EmulatorTargetType implements IDeploymentTargetType {
+ /**
+ * Map containing of the SDKS with the corresponding paths.
+ */
+ private Map<String, Emulator> listofEmulators;
+
+ public EmulatorTargetType() {
+ discoverTargets(new NullProgressMonitor());
+ }
+
+ public IDeploymentTarget[] getTargets(IMTWProject project) {
+ Collection<Emulator> values = listofEmulators.values();
+ return values.toArray(new Emulator[values.size()]);
+ }
+
+ public void discoverTargets(IProgressMonitor monitor) {
+ if (listofEmulators == null) {
+ listofEmulators = new HashMap<String, Emulator>();
+ }
+ listofEmulators.clear();
+ initialize();
+ }
+
+ public IDeploymentTarget findTarget(IMTWProject project, String id) {
+ return listofEmulators.get(id);
+ }
+
+ public boolean targetsDiscovered() {
+ return true;
+ }
+
+ public ISchedulingRule getSchedulingRule(IDeploymentTarget target) {
+ return null;
+ }
+
+ // helper methods
+
+ /**
+ * This will parse the xml and create the nodes to be displayed on the table
+ * viewer. The information will be used by content & label provider to get
+ * the contents and display accordingly in the list of the projects in the view.
+ */
+ public Map<String, Emulator> initialize() {
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ // Parse the devices.xml and retrieve the list of the emulators from it
+ // and build the list to be displayed in the view.
+
+ try {
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ File file = new File(IWRTConstants.DEVICES_XML_PATH);
+ if (!file.exists()) {
+ IPath otherPath = new Path(System.getProperty("user.home"))
+ .append(IWRTConstants.DEVICES_VISTA_XML_PATH);
+ file = otherPath.toFile();
+ }
+ if (file.exists()) {
+ FileInputStream fin = new FileInputStream(file);
+ Document document = builder.parse(fin);
+ NodeList childNodes = document.getChildNodes();
+
+ for (int i = 0; i < childNodes.getLength(); i++) {
+
+ Node node = childNodes.item(i);
+ String nodeName = node.getNodeName();
+ // If the node name is "devices" it is the root node of the xml.
+ if (nodeName.equals(IWRTConstants.DEVICES_TAG)) {
+ // once we have the root node get the child information to
+ // build the devices list.
+ createDevicesList(node);
+
+ }
+ }
+ }
+ } catch (ParserConfigurationException e) {
+ // WidgetUtils.getView().getLogger().severe(e.getMessage());
+ } catch (SAXException e) {
+ // WidgetUtils.getView().getLogger().severe(e.getMessage());
+ } catch (IOException e) {
+ // WidgetUtils.getView().getLogger().severe(e.getMessage());
+ }
+ return listofEmulators;
+ }
+
+ /**
+ * Creates the devices nodes in the table.
+ * @param parentNode
+ */
+ private void createDevicesList(Node parentNode) {
+ NodeList list = getChildNodes(parentNode);
+ for (int i = 0; i < list.getLength(); i++) {
+ Node node = list.item(i);
+ String nodeName = node.getNodeName();
+ if (nodeName.equals(IWRTConstants.DEVICE_TAG)) {
+ createDeviceChildNode(node);
+ }
+ }
+ }
+
+ /**
+ * Gets the EPOC ROOT node and than finally the list of devices.
+ * @param parentNode
+ */
+ private void createDeviceChildNode(Node parentNode) {
+ NodeList list = getChildNodes(parentNode);
+ for (int i = 0; i < list.getLength(); i++) {
+ Node node = list.item(i);
+ String nodeName = node.getNodeName();
+ if (nodeName.equals(IWRTConstants.EPOC_ROOT_TAG)) {
+ addProject(node, parentNode);
+ }
+ }
+ }
+
+ /**
+ * Adds the devices to the list to be displayed.
+ * @param deviceNode the device node
+ * @param epocNode the epoc root node.
+ */
+ private void addProject(Node epocNode, Node deviceNode) {
+ NodeList list = getChildNodes(epocNode);
+ NamedNodeMap attributes = deviceNode.getAttributes();
+ String sdkId = "";
+ String sdkName = "";
+ for (int i = 0; i < attributes.getLength(); i++) {
+ Node item = attributes.item(i);
+ if (item.getNodeName().equals(IWRTConstants.NAME_ATTR)) {
+ sdkName = item.getNodeValue();
+ }
+ if (item.getNodeName().equals(IWRTConstants.ID_ATTR)) {
+ sdkId = item.getNodeValue();
+ }
+ }
+ for (int i = 0; i < list.getLength(); i++) {
+ Node node = list.item(i);
+ if (sdkName.equals(IWRTConstants.EMULATOR_NAME)) {
+ listofEmulators.put(sdkId, new Emulator(sdkId, node.getNodeValue()));
+ }
+ }
+ }
+
+ /**
+ * Returns the child list of the particular Node.
+ * @param parentNode
+ */
+ private static NodeList getChildNodes(Node parentNode) {
+ return parentNode.getChildNodes();
+ }
+
+}