Merged. Added deployment. Fixed developer experience. Added about.ini, about.properties.
authortasneems@symbian.org
Mon, 15 Feb 2010 13:46:26 -0800
changeset 145 19985c154f5c
parent 144 14ab024ecb09
child 146 65c80c40a76a
child 148 e043c2193073
Merged. Added deployment. Fixed developer experience. Added about.ini, about.properties.
org.symbian.tools.wrttools.product/about.html
org.symbian.tools.wrttools.product/about.ini
org.symbian.tools.wrttools.product/about.properties
org.symbian.tools.wrttools.product/build.properties
org.symbian.tools.wrttools.product/plugin.properties
org.symbian.tools.wrttools.product/plugin.xml
org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/ApplicationActionBarAdvisor.java
org.symbian.tools.wrttools.product/wrt-ide.product
org.symbian.tools.wrttools/.classpath
org.symbian.tools.wrttools/META-INF/MANIFEST.MF
org.symbian.tools.wrttools/META-INF/MANIFEST.MF.orig
org.symbian.tools.wrttools/build.properties
org.symbian.tools.wrttools/lib/org.bluecove_2.1.1.jar
org.symbian.tools.wrttools/plugin.xml
org.symbian.tools.wrttools/plugin.xml.orig
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/Activator.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/Activator.java.orig
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/IWRTConstants.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/DeployMessages.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/DeployPreferencePage.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/PreferenceConstants.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/PreferenceInitializer.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/ProgressRunnableDialog.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/WrtDeployActionDelegate.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/WrtDeploymentSettingsActionDelegate.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/deployMessages.properties
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeployDeviceInfo.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeviceDeployer.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeviceListProvider.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/ServicesProvider.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/WrapperRemoteDevice.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorDeployer.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorListProvider.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployException.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployStatus.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployerMessages.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/IWidgetDeployer.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/IWidgetDeployerConstants.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/WidgetDeployer.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/WidgetDeployerFactory.java
org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/deployerMessages.properties
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/about.html	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body>
+This offering is powered by Eclipse technology and includes Eclipse plug-ins that can be
+installed and used with other Eclipse based offerings."
+</body>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/about.ini	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,11 @@
+# about.ini
+# Contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "they" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+#Property "aboutText" contains blurb for About dialog. (Translated)
+aboutText=%blurb
+
+#Property "featureImage" contains path to feature iamge. (32x32)
+featureImage=feature.gif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/about.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,18 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes
+# fill-ins are supplied by about.mappings
+# This file should be translated
+
+blurb=Web Runtime Toolkit\n\
+Symbian Foundation's Open Source toolkit for developing and deploying Web applications\n\
+\n\
+Version: 1.0.0\n\
+build id: {0}\n\
+\n\
+(c) Copyright 2009-2010 Symbian Foundation and/or its subsidiary(-ies). All rights reserved.\n
+Visit http://www.symbian.org\n\
+\n\
+This offering is powered by Eclipse technology and includes\n\
+Eclipse plug-ins that can be installed and used\n\
+with other Eclipse-based offerings.
\ No newline at end of file
--- a/org.symbian.tools.wrttools.product/build.properties	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools.product/build.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -3,7 +3,8 @@
                .,\
                plugin.xml,\
                plugin_customization.ini,\
-               icons/
+               icons/,\
+               about.ini
 source.. = src/
# javac 
 javacSource=1.5
 javacTarget=1.5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/plugin.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,14 @@
+pluginName=WebRuntime Toolkit IDE
+providerName=Symbian Foundation
+productName=Web Runtime Toolkit IDE 
+productBlurb=Symbian Foundation's Open Source Web Runtime Toolkit IDE based on Eclipse Platform for developing and deploying Web applications\n\
+\n\
+Version: 1.0.0\n\
+Build id: {0} \n\
+\n\
+(c) Copyright 2009-2010 Symbian Foundation and/or its subsidiary(-ies). All rights reserved.\n
+Visit http://www.symbian.org\n\
+\n\
+This offering is powered by Eclipse technology and includes\n\
+Eclipse plug-ins that can be installed and used\n\
+with other Eclipse-based offerings.
\ No newline at end of file
--- a/org.symbian.tools.wrttools.product/plugin.xml	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools.product/plugin.xml	Mon Feb 15 13:46:26 2010 -0800
@@ -131,7 +131,7 @@
          </property>
          <property
                name="aboutText"
-               value="Symbian Foundation's Open Source toolkit for developing and deploying Web applications">
+               value="%productBlurb">
          </property>
          <property
                name="aboutImage"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/ApplicationActionBarAdvisor.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,35 @@
+package org.symbian.tools.wrttools.product.actions;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+
+public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
+    
+    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
+		super(configurer);
+		// TODO Auto-generated constructor stub
+	}
+	private IWorkbenchAction aboutAction;
+    protected void makeActions(final IWorkbenchWindow window) {
+        
+	aboutAction = ActionFactory.ABOUT.create(window);
+	register(aboutAction);
+        
+    }
+    protected void fillMenuBar(IMenuManager menuBar) {
+	//Help
+	MenuManager helpMenu = new MenuManager("&Help",IWorkbenchActionConstants.M_HELP);
+	menuBar.add(helpMenu);
+	// About > Help
+	helpMenu.add(new Separator());
+	helpMenu.add(aboutAction);
+        
+    }
+}
\ No newline at end of file
--- a/org.symbian.tools.wrttools.product/wrt-ide.product	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools.product/wrt-ide.product	Mon Feb 15 13:46:26 2010 -0800
@@ -6,8 +6,7 @@
    <aboutInfo>
       <image path="icons/WRT_Wizard_banner.png"/>
       <text>
-         Symbian Foundation&apos;s Open Source toolkit for
-developing and deploying Web applications
+         %productBlurb
       </text>
    </aboutInfo>
 
--- a/org.symbian.tools.wrttools/.classpath	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools/.classpath	Mon Feb 15 13:46:26 2010 -0800
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry exported="true" kind="lib" path="lib/org.bluecove_2.1.1.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
--- a/org.symbian.tools.wrttools/META-INF/MANIFEST.MF	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools/META-INF/MANIFEST.MF	Mon Feb 15 13:46:26 2010 -0800
@@ -44,7 +44,7 @@
  org.eclipse.ui.wizards.newresource
 Bundle-ClassPath: lib/tagsoup-1.2.jar,
  .,
- lib/jtidy-8.0-20060801.131059-3.jar
-Export-Package: org.symbian.tools.wrttools,
+ lib/jtidy-8.0-20060801.131059-3.jar,
+ lib/org.bluecove_2.1.1.jar
  org.symbian.tools.wrttools.util,
  org.symbian.tools.wrttools.wizards
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/META-INF/MANIFEST.MF.orig	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,51 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Symbian Web Runtime Tools
+Bundle-SymbolicName: org.symbian.tools.wrttools;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.symbian.tools.wrttools.Activator
+Bundle-Vendor: Symbian Foundation
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.emf.ecore,
+ org.eclipse.core.databinding;bundle-version="1.2.0",
+ org.eclipse.core.databinding.beans;bundle-version="1.2.0",
+ org.eclipse.core.databinding.property;bundle-version="1.2.0",
+ org.eclipse.jface.databinding;bundle-version="1.3.0",
+ org.eclipse.wst.jsdt.ui;bundle-version="1.0.200",
+ org.eclipse.wst.jsdt.core;bundle-version="1.0.200",
+ org.eclipse.wst.css.core;bundle-version="1.1.300",
+ org.eclipse.ui.ide;bundle-version="3.5.0",
+ org.eclipse.wst.validation;bundle-version="1.2.102",
+ org.eclipse.wst.sse.core;bundle-version="1.1.400",
+ org.eclipse.wst.xml.core;bundle-version="1.1.400",
+ org.eclipse.ui.navigator;bundle-version="3.4.0",
+ org.eclipse.ui.navigator.resources;bundle-version="3.4.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Import-Package: org.apache.velocity;version="1.5.0",
+ org.apache.velocity.app;version="1.5.0",
+ org.apache.velocity.context;version="1.5.0",
+ org.apache.velocity.convert;version="1.5.0",
+ org.apache.velocity.io;version="1.5.0",
+ org.apache.velocity.runtime;version="1.5.0",
+ org.apache.velocity.util;version="1.5.0",
+ org.eclipse.emf.common.notify,
+ org.eclipse.emf.common.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.impl,
+ org.eclipse.ui.console,
+ org.eclipse.ui.dialogs,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.internal.ide,
+ org.eclipse.ui.internal.ide.dialogs,
+ org.eclipse.ui.wizards.newresource
+Bundle-ClassPath: lib/tagsoup-1.2.jar,
+ .,
+ lib/jtidy-8.0-20060801.131059-3.jar,
+ lib/org.bluecove_2.1.1.jar
+Export-Package: org.symbian.tools.wrttools,
+ org.symbian.tools.wrttools.util,
+ org.symbian.tools.wrttools.wizards
--- a/org.symbian.tools.wrttools/build.properties	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools/build.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -11,7 +11,9 @@
                lib/,\
                epl-v10.html,\
                license.html,\
-               schema/
# javac 
+               schema/,\
+               lib/org.bluecove_2.1.1.jar
+# javac 
 javacSource=1.5
 javacTarget=1.5
 javacVerbose=true
Binary file org.symbian.tools.wrttools/lib/org.bluecove_2.1.1.jar has changed
--- a/org.symbian.tools.wrttools/plugin.xml	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools/plugin.xml	Mon Feb 15 13:46:26 2010 -0800
@@ -64,11 +64,62 @@
                  <super type="org.eclipse.core.resources.problemmarker"/>
                  <persistent value ="true"/>
         </extension>
+        
+<!-- Web Runtime Preferences --> 
+ <extension
+    point="org.eclipse.core.runtime.preferences">
+    <initializer class="org.symbian.tools.wrttools.core.deploy.PreferenceInitializer"/>
+ </extension>
+ <extension
+       point="org.eclipse.ui.preferencePages">
+    <page
+          class="org.symbian.tools.wrttools.core.deploy.DeployPreferencePage"
+          id="org.symbian.tools.wrttools.core.deploy.DeployPreferencePage"
+          category="org.symbian.tools.wrttools.WrtRootPreferences"
+          name="Deployment "/>
+    <page
+          class="org.symbian.tools.wrttools.WrtRootPreferences"
+          id="org.symbian.tools.wrttools.WrtRootPreferences"
+          name="Web Runtime">
+    </page>
+ </extension>
 
 <!-- WRT Tool Integration (Package, Validate, Include, Exclude Settings)-->
         <extension	
           point="org.eclipse.ui.popupMenus">
-		   <objectContribution
+                <objectContribution
+      		objectClass="org.eclipse.core.resources.IResource" 
+            id="org.symbian.tools.wrttools.widget.wrttool.deployment.setttings">
+     	 <filter
+         	name="projectNature"
+         	value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+         <action
+               class="org.symbian.tools.wrttools.core.deploy.WrtDeploymentSettingsActionDelegate"
+               icon="icons/deploy_settings.gif"
+               id="org.symbian.tools.wrttools.core.deploy.WrtDeploymentSettingsActionDelegate"
+               label="Deployment Settings for WRT Application"
+			   menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
+         </action>
+      </objectContribution>	                 
+    
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IResource"          
+            id="org.symbian.tools.wrttools.widget.wrttool.deploy">
+     	<filter
+         	name="projectNature"
+         	value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+       
+         <action
+               class="org.symbian.tools.wrttools.core.deploy.WrtDeployActionDelegate"
+               enablesFor="+"
+               icon="icons/deploy_widget.gif"
+               id="org.symbian.tools.wrttools.widget.deploy.WrtProjectDeployActionDelegate"
+               label="Deploy WRT Application"
+               menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
+         </action>
+      </objectContribution>
+      
+	  <objectContribution
            objectClass="org.eclipse.core.resources.IResource" 
 		   adaptable="true"         
            id="org.symbian.tools.wrttools.widget.wrttool">
@@ -83,8 +134,8 @@
 	             label="Package WRT Application"
 	             menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
 	       </action>
-          </objectContribution> 
-          		<objectContribution
+      </objectContribution> 
+      <objectContribution
             objectClass="org.eclipse.core.resources.IResource"            
             id="org.symbian.tools.wrttools.widget.wrttool.packageoptions">
          <visibility>
@@ -96,17 +147,17 @@
 			   </or>
             </not>
          </visibility>
-     	<filter
+     	 <filter
          	name="projectNature"
          	value="org.symbian.tools.wrttools.WidgetProjectNature"/>           
-       <action
+         <action
              class="org.symbian.tools.wrttools.core.packager.ExcludeFileAction"
              icon="icons/exclude_archive.gif"
              id="org.symbian.tools.wrttools.widget.wrttool.packageoptions.ExcludeFileAction"
              label="Exclude From WRT Archive"
              menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker"> 
-      </action>  
-    </objectContribution>    
+         </action>  
+      </objectContribution>    
       <objectContribution
             objectClass="org.eclipse.core.resources.IResource"            
             id="org.symbian.tools.wrttools.widget.wrttool.packageoptions">
@@ -160,7 +211,8 @@
 			id="org.symbian.tools.wrttools.core.wrtwidgetwizard" name="Web Runtime Application"
 			project="true">
 			<description>
-				Creates a new Symbian WRT application project using one of the provided templates
+				Creates a new Symbian WRT application project using one of the provided
+				templates
          </description>
 		</wizard>
 		<wizard category="org.symbian.tools.wrttools.core.category"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/plugin.xml.orig	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,636 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Generic Project Builder and Project Natures  -->		
+	<extension id="PropertiesFileAuditor" name="Properties File Auditor Project Builder"
+		point="org.eclipse.core.resources.builders">
+		<builder hasNature="true">
+			<run class="org.symbian.tools.wrttools.builder.PropertiesFileAuditor">
+			</run>
+		</builder>
+	</extension>
+	<extension id="PropertiesAuditorNature" name="Properties Auditor Nature"
+		point="org.eclipse.core.resources.natures">
+		<runtime>
+			<run class="org.symbian.tools.wrttools.builder.PropertiesAuditorNature">
+			</run>
+		</runtime>
+		<requires-nature id="org.eclipse.wst.jsdt.core.jsNature" />
+		<requires-nature id="org.eclipse.pde.PluginNature" />
+		<builder id="org.symbian.tools.wrttools.PropertiesFileAuditor">
+		</builder>
+	</extension>
+ 	
+<!-- Widget Project Nature -->	
+ <extension
+       id="WidgetProjectNature"
+       point="org.eclipse.core.resources.natures">
+    <runtime>
+       <run class="org.symbian.tools.wrttools.WidgetProjectNature"/>
+    </runtime>
+ </extension> 
+ 
+<!-- Widget Project Nature Images -->
+        <extension
+              point="org.eclipse.ui.ide.projectNatureImages">
+           <image
+                 icon="icons/WRT_main_16.png"
+                 id="org.symbian.tools.wrttools.natureImage"
+                 natureId="org.symbian.tools.wrttools.WidgetProjectNature">
+           </image>
+        </extension>
+        
+<!-- WRT Validators -->		
+<!--	<extension
+			point="org.eclipse.wst.validation.validatorV2"
+			id="org.symbian.tools.wrttools.core.validator"
+			name="%VALIDATOR.Name">
+		<validator class="org.symbian.tools.wrttools.core.validator.ValidateAction">
+         	<include>
+         	     <rules>
+		               <fileext ext="plist"/>
+		         </rules>
+            </include>
+		</validator>
+    </extension> --> 
+    
+<!-- Validator Marker -->
+   
+        <extension
+           id="org.symbian.tools.wrttools.core.validator.marker"
+           name="Validator Marker"
+           point="org.eclipse.core.resources.markers">
+                 <super type="org.eclipse.core.resources.problemmarker"/>
+                 <persistent value ="true"/>
+        </extension>
+        
+<!-- Web Runtime Preferences --> 
+ <extension
+    point="org.eclipse.core.runtime.preferences">
+    <initializer class="org.symbian.tools.wrttools.core.deploy.PreferenceInitializer"/>
+ </extension>
+ <extension
+       point="org.eclipse.ui.preferencePages">
+    <page
+          class="org.symbian.tools.wrttools.core.deploy.DeployPreferencePage"
+          id="org.symbian.tools.wrttools.core.deploy.DeployPreferencePage"
+          category="org.symbian.tools.wrttools.WrtRootPreferences"
+          name="Deployment "/>
+    <page
+          class="org.symbian.tools.wrttools.WrtRootPreferences"
+          id="org.symbian.tools.wrttools.WrtRootPreferences"
+          name="Web Runtime">
+    </page>
+ </extension>
+
+<!-- WRT Tool Integration (Package, Validate, Include, Exclude Settings)-->
+        <extension	
+          point="org.eclipse.ui.popupMenus">
+                <objectContribution
+      		objectClass="org.eclipse.core.resources.IResource" 
+            id="org.symbian.tools.wrttools.widget.wrttool.deployment.setttings">
+     	 <filter
+         	name="projectNature"
+         	value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+         <action
+               class="org.symbian.tools.wrttools.core.deploy.WrtDeploymentSettingsActionDelegate"
+               icon="icons/deploy_settings.gif"
+               id="org.symbian.tools.wrttools.core.deploy.WrtDeploymentSettingsActionDelegate"
+               label="Deployment Settings for WRT Application"
+			   menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
+         </action>
+      </objectContribution>	                 
+    
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IResource"          
+            id="org.symbian.tools.wrttools.widget.wrttool.deploy">
+     	<filter
+         	name="projectNature"
+         	value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+       
+         <action
+               class="org.symbian.tools.wrttools.core.deploy.WrtDeployActionDelegate"
+               enablesFor="+"
+               icon="icons/deploy_widget.gif"
+               id="org.symbian.tools.wrttools.widget.deploy.WrtProjectDeployActionDelegate"
+               label="Deploy WRT Application"
+               menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
+         </action>
+      </objectContribution>
+      
+	  <objectContribution
+           objectClass="org.eclipse.core.resources.IResource" 
+		   adaptable="true"         
+           id="org.symbian.tools.wrttools.widget.wrttool">
+	 	   <filter
+	     	name="projectNature"
+	     	value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+	       <action
+	             class="org.symbian.tools.wrttools.core.packager.WrtPackageActionDelegate"
+	             enablesFor="+"
+	             icon="icons/package_widget.gif"
+	             id="org.symbian.tools.wrttools.widget.package.WrtPackageActionDelegate"
+	             label="Package WRT Application"
+	             menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker">
+	       </action>
+      </objectContribution> 
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IResource"            
+            id="org.symbian.tools.wrttools.widget.wrttool.packageoptions">
+         <visibility>
+            <not>
+               <or>
+               <objectState name="persistentProperty" value="org.symbian.tools.wrttools.packager.exclude"/>
+			   <objectState name="extension" value="plist"/>
+			   <objectClass name="org.eclipse.core.resources.IProject"/>
+			   </or>
+            </not>
+         </visibility>
+     	 <filter
+         	name="projectNature"
+         	value="org.symbian.tools.wrttools.WidgetProjectNature"/>           
+         <action
+             class="org.symbian.tools.wrttools.core.packager.ExcludeFileAction"
+             icon="icons/exclude_archive.gif"
+             id="org.symbian.tools.wrttools.widget.wrttool.packageoptions.ExcludeFileAction"
+             label="Exclude From WRT Archive"
+             menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker"> 
+         </action>  
+      </objectContribution>    
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IResource"            
+            id="org.symbian.tools.wrttools.widget.wrttool.packageoptions">
+      <visibility>
+        <and>
+	        <not>
+	        	<objectState name="extension" value="wgz"/>
+	        </not>
+	        <and>
+	        	<objectState name="persistentProperty" value="org.symbian.tools.wrttools.packager.exclude"/>
+	        	<objectState name="projectNature" value="org.symbian.tools.wrttools.WidgetProjectNature"/>
+	        </and>
+        </and>
+       </visibility>
+       <action
+             class="org.symbian.tools.wrttools.core.packager.IncludeFileAction"
+             icon="icons/include_archive.gif"
+             id="org.symbian.tools.wrttools.widget.wrttool.packageoptions.IncludeFileAction"
+             label="Include in WRT Archive"
+             menubarPath="org.symbian.tools.wrttools.contextMenuGroupMarker"> 
+      </action>  
+    </objectContribution>
+   </extension>  
+
+<!-- WRT Project Templates - CSS Validator -->
+	<extension-point id="projectTemplates" name="WRT application project templates" schema="schema/projectTemplates.exsd"/>
+	<extension id="org.symbian.tools.wrttools.core.cssvalidator"
+		name="CSS Validator" point="org.eclipse.wst.validation.validatorV2">
+		<validator build="true"
+			class="org.symbian.tools.wrttools.core.internal.validation.CssBuildValidator"
+			manual="true" markerId="org.symbian.tools.wrttools.core.cssValidationMarker"
+			version="0.0.1">
+			<include>
+				<rules>
+					<contentType exactMatch="false"
+						id="org.eclipse.wst.css.core.csssource">
+					</contentType>
+				</rules>
+			</include>
+		</validator>
+	</extension>
+	 
+<!-- WRT WidgetWizard and AptanaProjectImportWizard -->
+	<extension point="org.eclipse.ui.newWizards">
+		<category id="org.symbian.tools.wrttools.core.category" name="Web Runtime(WRT)">
+		</category>
+		<wizard category="org.symbian.tools.wrttools.core.category"
+			class="org.symbian.tools.wrttools.wizards.WrtWidgetWizard"
+			finalPerspective="org.symbian.tools.wrttools.mainPerspective"
+			hasPages="true" icon="icons/WRT_main_16.png"
+			id="org.symbian.tools.wrttools.core.wrtwidgetwizard" name="Web Runtime Application"
+			project="true">
+			<description>
+				Creates a new Symbian WRT application project using one of the provided
+				templates
+         </description>
+		</wizard>
+		<wizard category="org.symbian.tools.wrttools.core.category"
+			class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
+			finalPerspective="org.symbian.tools.wrttools.mainPerspective"
+			hasPages="true" icon="icons/import_aptana_project.gif"
+			id="org.symbian.tools.wrttools.newImportAptanaProject" name="Import Aptana IDE WRT Project"
+			project="true">
+		</wizard>
+	</extension>
+	
+<!-- WRT Project Templates -->
+	<extension point="org.symbian.tools.wrttools.projectTemplates">
+<!--
+      <projectTemplate
+		name="Basic Widget Project"
+        archive="projecttemplates/basic.zip"
+        default-css-name="basic"
+        default-html-name="index"
+        default-js-name="basic"
+        icon="icons/main16.gif"
+        id-pattern="com.{0}.basic.widget">
+			<description>
+				This wizard generates an empty widget project with a minimal Info.plist, html,css and js.
+         </description>
+		</projectTemplate> 
+-->
+
+      <projectTemplate
+            name="Hello Application Project with WRTKit Support"
+            archive="projecttemplates/helloWithWRTKit.zip"
+            default-css-name="HelloWithWRTKit"
+            default-html-name="index"
+            default-js-name="HelloWithWRTKit"
+            icon="icons/WRT_main_16.png"
+            id-pattern="com.{0}.helloWithWRTKit.widget"
+            wizard-page-factory="org.symbian.tools.wrttools.wizards.HelloWithWRTKitProjectDetailsWizardPage$Factory">
+         <description>
+            This wizard generates a basic Hello project with a minimal Info.plist, html,css and js along with WRTKit.
+         </description>
+         <requires-library>org.symbian.wrtkit</requires-library>
+      </projectTemplate>
+
+      <projectTemplate
+            name="Flickr Application Project"
+            archive="projecttemplates/flickr.zip"
+            default-css-name="Flickr"
+            default-html-name="index"
+            default-js-name="Flickr"
+            icon="icons/flickr.gif"
+            id-pattern="com.{0}.flickr.widget"
+            wizard-page-factory="org.symbian.tools.wrttools.wizards.FlickrProjectDetailsWizardPage$Factory">
+         <description>
+            This wizard generates an Flickr project with a minimal Info.plist, html,css and js and WRTKit.
+         </description>
+         <requires-library>org.symbian.wrtkit</requires-library>
+      </projectTemplate>
+
+      <projectTemplate
+            name="RSS Reader Application Project"
+            archive="projecttemplates/rssreader.zip"
+            default-css-name="RSSReader"
+            default-html-name="index"
+            default-js-name="RSSReader"
+            icon="icons/rss.gif"
+            id-pattern="com.{0}.rssreader.widget"
+            wizard-page-factory="org.symbian.tools.wrttools.wizards.RssReaderProjectDetailsWizardPage$Factory">
+         <description>
+            This wizard generates an RSS Reader project with a minimal Info.plist, html,css and js and WRTKit.
+         </description>
+         <requires-library>org.symbian.wrtkit</requires-library>
+      </projectTemplate>
+	</extension>
+	
+<!-- Import Wizard -->
+	<extension point="org.eclipse.ui.importWizards">
+		<category id="org.symbian.tools.wrttools.import" name="Web Runtime(WRT)">
+		</category>
+		<wizard category="org.symbian.tools.wrttools.import"
+			class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
+			icon="icons/import_aptana_project.gif" id="org.symbian.tools.wrttools.import.aptanaImport"
+			name="Aptana IDE WRT Project">
+		</wizard>
+       <wizard
+          category="org.symbian.tools.wrttools.import"
+          class="org.symbian.tools.wrttools.wizards.WgzImportWizard"
+          icon="icons/WRTImport.gif"
+          id="org.symbian.tools.wrttools.importwgz"
+          name="Import WRT Application Archive">
+       </wizard>
+    </extension>
+	
+<!-- Problem Markers -->
+	<extension id="org.symbian.tools.wrt.xmlProblem" name="XML Problem"
+		point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.core.resources.problemmarker">
+		</super>
+		<persistent value="true">
+		</persistent>
+	</extension>
+	<extension id="org.symbian.tools.wrt.jsProblem" name="JSProblem"
+		point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.core.resources.problemmarker">
+		</super>
+		<persistent value="true">
+		</persistent>
+	</extension>
+	
+<!-- WRT Content Descriptor (.plist) file -->
+	<extension point="org.eclipse.core.contenttype.contentTypes">
+		<content-type base-type="org.eclipse.core.runtime.xml"
+			file-extensions="plist" id="org.symbian.tools.wrttools.contenttype.plist"
+			name="WebRuntime Descriptor File" priority="normal">
+		</content-type>
+	</extension>
+	
+<!-- Perspective Extensions -->
+	<extension point="org.eclipse.ui.perspectiveExtensions">
+		<perspectiveExtension targetID="org.eclipse.wst.jsdt.ui.JavaPerspective">
+			<newWizardShortcut id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+			</newWizardShortcut>
+		</perspectiveExtension>
+		<perspectiveExtension targetID="org.eclipse.debug.ui.DebugPerspective">
+			<newWizardShortcut id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+			</newWizardShortcut>
+		</perspectiveExtension>
+	</extension>
+	
+<!-- Navigator Extensions -->
+	<extension point="org.eclipse.ui.views">
+		<view allowMultiple="false" category="org.symbian.tools.wrttools.views"
+			class="org.eclipse.ui.navigator.CommonNavigator" icon="icons/main16.gif"
+			id="org.symbian.tools.wrttools.wrtnavigator" name="WRT Navigator"
+			restorable="true">
+		</view>
+		<category id="org.symbian.tools.wrttools.views" name="WRT Tools">
+		</category>
+	</extension>
+	<extension point="org.eclipse.ui.navigator.viewer">
+		<viewer viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<popupMenu allowsPlatformContributions="true"
+				id="org.eclipse.ui.navigator.ProjectExplorer#PopupMenu">
+				<insertionPoint name="group.new" />
+				<insertionPoint name="group.open" separator="true" />
+				<insertionPoint name="group.openWith" />
+				<insertionPoint name="group.edit" separator="true" />
+				<insertionPoint name="group.reorganize" separator="true" />
+				<insertionPoint name="group.port" separator="true" />
+				<insertionPoint name="group.build" separator="true" />
+				<insertionPoint name="group.generate" separator="true" />
+				<insertionPoint name="group.search" separator="true" />
+				<insertionPoint name="additions" separator="true" />
+				<insertionPoint name="group.properties" separator="true" />
+			</popupMenu>
+		</viewer>
+		<viewerContentBinding viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<includes>
+				<contentExtension
+          isRoot="true"
+          pattern="org.symbian.tools.wrttools.navigatorcontent"/>
+				<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*" />
+				<contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper" />
+			</includes>
+		</viewerContentBinding>
+		<viewerActionBinding viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<includes>
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.PortingActions" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.GotoActions" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.GoIntoActions" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.NewActions" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.PropertiesActionProvider" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.WorkManagementActionProvider" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.ResourceMgmtActions" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.UndoRedoActionProvider" />
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.WorkingSetActions" />
+			</includes>
+		</viewerActionBinding>
+		<dragAssistant
+			class="org.eclipse.ui.navigator.resources.ResourceDragAdapterAssistant"
+			viewerId="org.symbian.tools.wrttools.wrtnavigator" />
+	</extension>
+	 <extension
+       point="org.eclipse.ui.navigator.navigatorContent">
+    <navigatorContent
+          activeByDefault="true"
+          contentProvider="org.symbian.tools.wrttools.navigator.WRTNavigatorContentProvider"
+          icon="icons/main16.gif"
+          id="org.symbian.tools.wrttools.navigatorcontent"
+          labelProvider="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorLabelProvider"
+          name="WRT Elements"
+          priority="high"
+          providesSaveables="false">
+       <triggerPoints>
+          <or>
+             <and>
+                <instanceof
+                      value="org.eclipse.core.resources.IResource">
+                </instanceof>
+                <adapt
+                      type="org.eclipse.core.resources.IProject">
+                   <test
+                         property="org.eclipse.core.resources.projectNature"
+                         value="org.symbian.tools.wrttools.WidgetProjectNature">
+                   </test>
+                </adapt>
+             </and>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.internal.ui.packageview.PackageFragmentRootContainer">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.ui.ProjectLibraryRoot">
+             </instanceof>
+          </or>
+       </triggerPoints>
+       <possibleChildren>
+          <or>
+             <instanceof
+                   value="org.eclipse.core.resources.IResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.ui.ProjectLibraryRoot">
+             </instanceof>
+          </or>
+       </possibleChildren>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.StandardActions">
+       </actionProvider>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorRefactorActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.RefactorActions"
+             overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions">
+          <enablement>
+             <or>
+                <adapt
+                      type="java.util.Collection">
+                   <count
+                         value="0">
+                   </count>
+                </adapt>
+                <and>
+                   <or>
+                      <instanceof
+                            value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+                      </instanceof>
+                      <instanceof
+                            value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+                      </instanceof>
+                   </or>
+                   <not>
+                      <instanceof
+                            value="org.eclipse.wst.jsdt.core.ITypeRoot">
+                      </instanceof>
+                   </not>
+                </and>
+             </or>
+          </enablement>
+       </actionProvider>
+       <actionProvider
+             class="org.symbian.tools.wrttools.navigator.RenameMoveActionProvider"
+             id="org.symbian.wrttools.navigator.MoveRename"
+             overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions">
+          <enablement>
+             <and>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <not>
+                   <instanceof
+                         value="org.eclipse.wst.jsdt.core.IType">
+                   </instanceof>
+                </not>
+             </and>
+          </enablement>
+       </actionProvider>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.PackageExplorerOpenActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.OpenActions"
+             overrides="org.eclipse.ui.navigator.resources.OpenActions">
+       </actionProvider>
+       <override
+             policy="InvokeAlwaysRegardlessOfSuppressedExt"
+             suppressedExtensionId="org.eclipse.ui.navigator.resourceContent">
+       </override>
+       <commonWizard
+             menuGroupId="group.new"
+             type="new"
+             wizardId="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <adapt
+                      type="java.util.Collection">
+                </adapt>
+             </or>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.jsdt.ui.NewJSWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="import"
+             wizardId="org.symbian.tools.wrttools.import.aptanaImport">
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <adapt
+                      type="java.util.Collection">
+                </adapt>
+             </or>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="import"
+             wizardId="org.symbian.tools.wrttools.importwgz">
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <adapt
+                      type="java.util.Collection">
+                </adapt>
+             </or>
+          </enablement>
+       </commonWizard>
+       <dropAssistant
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaDropAdapterAssistant"
+             id="org.eclipse.wst.jsdt.ui.dropAssistant">
+          <possibleDropTargets>
+             <or>
+                <instanceof
+                      value="org.eclipse.core.resources.IResource">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+                </instanceof>
+             </or>
+          </possibleDropTargets>
+       </dropAssistant>
+       <commonSorter
+             class="org.symbian.tools.wrttools.navigator.NavigatorSorter"
+             id="org.symbian.tools.wrttools.sorter">
+       </commonSorter>
+    </navigatorContent>
+ </extension>
+ <extension
+       point="org.eclipse.wst.jsdt.core.JsGlobalScopeContainerInitializer">
+    <JsGlobalScopeContainerInitializer
+       class="org.symbian.tools.wrttools.core.libraries.WrtKitLibInitializer"
+       id="org.symbian.wrtkit">
+    </JsGlobalScopeContainerInitializer>
+ </extension>
+ <extension
+        point="org.eclipse.wst.jsdt.ui.JsGlobalScopeContainerPage">
+    <JsGlobalScopeContainerPage
+            name="WRTKit"
+            class="org.symbian.tools.wrttools.wizards.WrtKitLibraryWizardPage"
+            id="org.symbian.wrtkit">
+    </JsGlobalScopeContainerPage>    
+  </extension>
+ <extension
+       id="org.symbian.tools.wrttools.core.plistvalidator"
+       name="WRT Application Descriptor Validator"
+       point="org.eclipse.wst.validation.validatorV2">
+    <validator
+          build="true"
+          class="org.symbian.tools.wrttools.core.internal.validation.WrtApplicationValidator"
+          manual="true"
+          markerId="org.symbian.tools.wrttools.core.cssValidationMarker"
+          version="0.0.1">
+       <include>
+          <rules>
+             <projectNature
+                   id="org.symbian.tools.wrttools.WidgetProjectNature">
+             </projectNature>
+          </rules>
+       </include>
+    </validator>
+ </extension>
+</plugin>
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/Activator.java	Fri Feb 12 15:58:58 2010 -0800
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/Activator.java	Mon Feb 15 13:46:26 2010 -0800
@@ -18,10 +18,16 @@
  */
 package org.symbian.tools.wrttools;
 
+import java.io.PrintStream;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
+import com.intel.bluetooth.BlueCoveImpl;
+
+import org.symbian.tools.wrttools.core.deploy.PreferenceConstants;
 import org.symbian.tools.wrttools.sdt.utils.Logging;
 
 /**
@@ -37,6 +43,8 @@
 	// The shared instance
 	private static Activator plugin;
 	
+	private static PrintStream savedSysOut;
+	
 	/**
 	 * The constructor
 	 */
@@ -50,6 +58,11 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
+		
+		// set parameters for BlueCove
+		String param = Integer.toString(65*1024);
+		System.setProperty("bluecove.obex.mtu", param);
+		BlueCoveImpl.setConfigProperty("bluecove.obex.mtu", param);
 	}
 
 	/*
@@ -60,6 +73,29 @@
 		plugin = null;
 		super.stop(context);
 	}
+	
+	public void startBluetoothOperation() {
+		IPreferenceStore prefStore = getPreferenceStore();
+		if (prefStore.getBoolean(PreferenceConstants.DEBUG_ENABLED))
+			enableBlueCoveDiagnostics(true);
+	}
+	
+	public void stopBluetoothOperation() {
+		enableBlueCoveDiagnostics(false);
+	}
+	
+	/** Toggle BlueCove logging
+	 */
+	public static void enableBlueCoveDiagnostics(boolean enable) {
+		System.setProperty("bluecove.debug", Boolean.valueOf(enable).toString());
+		BlueCoveImpl.instance().enableNativeDebug(enable);
+		if (enable) {
+			System.setOut(new PrintStream(ConsoleFactory.createStream()));
+		} else {
+			System.setOut(savedSysOut);
+		}
+	}
+
 
 	/**
 	 * Returns the shared instance
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/Activator.java.orig	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,122 @@
+/**
+ * Copyright (c) 2009 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;
+
+import java.io.PrintStream;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import com.intel.bluetooth.BlueCoveImpl;
+
+import org.symbian.tools.wrttools.core.deploy.PreferenceConstants;
+import org.symbian.tools.wrttools.sdt.utils.Logging;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.symbian.tools.wrttools";
+	
+	public static final String NAVIGATOR_ID = PLUGIN_ID + ".wrtnavigator";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	private static PrintStream savedSysOut;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+		
+		// set parameters for BlueCove
+		String param = Integer.toString(65*1024);
+		System.setProperty("bluecove.obex.mtu", param);
+		BlueCoveImpl.setConfigProperty("bluecove.obex.mtu", param);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+	
+	public void startBluetoothOperation() {
+		IPreferenceStore prefStore = getPreferenceStore();
+		if (prefStore.getBoolean(PreferenceConstants.DEBUG_ENABLED))
+			enableBlueCoveDiagnostics(true);
+	}
+	
+	public void stopBluetoothOperation() {
+		enableBlueCoveDiagnostics(false);
+	}
+	
+	/** Toggle BlueCove logging
+	 */
+	public static void enableBlueCoveDiagnostics(boolean enable) {
+		System.setProperty("bluecove.debug", Boolean.valueOf(enable).toString());
+		BlueCoveImpl.instance().enableNativeDebug(enable);
+		if (enable) {
+			System.setOut(new PrintStream(ConsoleFactory.createStream()));
+		} else {
+			System.setOut(savedSysOut);
+		}
+	}
+
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+	
+	public static void log(Exception e) {
+		log(e.getLocalizedMessage(), e);
+	}
+
+	public static void log(String message, Exception e) {
+		getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, message, e));
+	}
+	
+	public static void log(int severity, String message, Throwable x) {
+		IStatus status = new Status(severity, PLUGIN_ID, 0, message, x);
+		Logging.log(getDefault(), status);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/IWRTConstants.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2009 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;
+
+public interface IWRTConstants {
+	
+	public static final String WRT_PROJECT_FILE_NAME = "wrt.xml";
+	public static final String SYSTEM_USER_HOME = System.getProperty("user.home");
+	public static final String WRT = "wrt";
+	public static final String PATH = "path";
+	public static final String DEPLOY = "deploy";
+	public static final String PACKAGE ="package";
+	public static final String CONVERT = "Converter";
+	public static final String DEPLOY_PATH="\\epoc32\\winscw\\c\\Data\\Others";
+	public static final String DEVICES_XML_PATH = "c:/program files/common files/symbian/devices.xml";
+	public static final String DEVICES_TAG="devices";
+	public static final String DEVICE_TAG="device";
+	public static final String EPOC_ROOT_TAG="epocroot";
+	public static final String NAME_ATTR = "name";
+	public static final String ID_ATTR = "id";
+	public static final String EMULATOR_NAME="com.nokia.s60";
+	public static final String EMULATOR= "emulator";
+	public static final String DEVICE= "device";
+	public static final String DEVICE_ADDRESS= "address";
+	
+	
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/DeployMessages.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,41 @@
+/**
+ * Copyright (c) 2009 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;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class DeployMessages {
+	private static final String BUNDLE_NAME = "org.symbian.tools.wrttools.core.deploy.deployMessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private DeployMessages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/DeployPreferencePage.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,415 @@
+/**
+ * Copyright (c) 2009 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;
+
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import org.symbian.tools.wrttools.Activator;
+import org.symbian.tools.wrttools.core.IWRTConstants;
+import org.symbian.tools.wrttools.core.deploy.device.DeployDeviceInfo;
+import org.symbian.tools.wrttools.core.deploy.device.DeviceListProvider;
+import org.symbian.tools.wrttools.core.deploy.emulator.EmulatorListProvider;
+import org.symbian.tools.wrttools.core.deployer.DeployerMessages;
+
+public class DeployPreferencePage extends PreferencePage implements 
+IWorkbenchPreferencePage {     
+	
+	private Composite contents;
+	private Button deviceRadioButton;
+	private Button emulatorRadioButton;
+	private Combo selectionCombo;
+	private Button searchDevices;
+	private Text emulatorDeployerPathText;
+	private Label selectionComboLabel;
+	private Button debugButton;
+	private IRunnableWithProgress runnable;
+	
+	private Logger log = Logger.getLogger(getClass().getName());
+	
+	
+	private final HashMap<String, String> emulatorHashMap = EmulatorListProvider.populateEmulators();
+	private Set<String> emulatorKeySet = emulatorHashMap.keySet();
+	private String[] emulatorItems = (String[])emulatorKeySet.toArray(new String[emulatorKeySet.size()]);
+	private static String[] devices=null;
+
+	
+	public DeployPreferencePage() {
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+	}
+
+	//--------------------------------------------------------------------------------------//
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common GUI blocks needed to manipulate various
+	 * types of preferences. Each field editor knows how to save and restore itself.
+	 */
+	public void createFieldEditors(Composite parent) {
+		GridLayout layout = new GridLayout(4, false);
+		parent.setLayout(layout);
+		deviceRadioButton = new Button(parent, SWT.RADIO);
+		deviceRadioButton.setText("Device");
+		GridData gd = new GridData();
+		gd.horizontalSpan = 2;
+		deviceRadioButton.setLayoutData(gd);
+
+		emulatorRadioButton = new Button(parent, SWT.RADIO);
+		emulatorRadioButton.setText("Emulator"); 
+		gd = new GridData();
+		gd.horizontalSpan = 2;
+		emulatorRadioButton.setLayoutData(gd);
+
+		selectionComboLabel = new Label(parent, SWT.READ_ONLY);
+		selectionCombo = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 2;
+		selectionCombo.setLayoutData(gd);
+		selectionCombo.setSize(100,100);
+
+		searchDevices = new Button(parent,SWT.PUSH);
+		searchDevices.setVisible(false);
+		searchDevices.setText("Search");
+
+		emulatorDeployerPathText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 4;
+		gd.grabExcessHorizontalSpace = true;
+		emulatorDeployerPathText.setLayoutData(gd);
+		emulatorDeployerPathText.setVisible(false);	
+		
+		debugButton = new Button(parent, SWT.CHECK);
+		debugButton.setText("Enable diagnostic logging");
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 4;
+		debugButton.setLayoutData(gd);
+
+		//---------------------------start setting  event listener---------------------//
+		selectionCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (emulatorRadioButton != null	&& emulatorRadioButton.getSelection()) {
+					if (selectionCombo.getText().trim().equalsIgnoreCase(	"None")) { //$NON-NLS-1$
+						emulatorDeployerPathText.setText(emulatorHashMap.get(selectionCombo.getText()));
+						emulatorDeployerPathText.setText("");
+					} else {
+						emulatorDeployerPathText.setText(emulatorHashMap.get(selectionCombo.getText()).concat(IWRTConstants.DEPLOY_PATH));
+					}
+		/* TODO XXX */
+					log.info("DeployPreferencePage.addSelectionListener: Emulator Deployer Path Text: "+ emulatorDeployerPathText);
+				}
+			}
+		});
+
+		emulatorRadioButton.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				selectionCombo.removeAll();
+				selectionCombo.setItems(emulatorItems);
+				updateButtonStates();
+				contents.layout();
+			}
+		});
+
+		deviceRadioButton.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				// once the status is set the UI will be up and the scanning for the deployment devices
+				// will begin in the JOB thread so lets put the status message so that user gets the information
+				// that devices are being loaded.
+				selectionCombo.removeAll();
+				if(devices!=null && DeviceListProvider.isBloothToothConnected()){
+					selectionCombo.setItems(devices);
+				}				
+				if(DeviceListProvider.isBloothToothConnected()){
+					updateButtonStates();
+					contents.layout();
+				}
+			}
+		});	
+
+		searchDevices.addSelectionListener(new SelectionAdapter()
+		{
+			public void widgetSelected(SelectionEvent e)
+			{
+				if(DeviceListProvider.isBloothToothConnected()){
+				selectionCombo.removeAll();
+				loadDevices("");//$NON-NLS-1$
+				}
+				else{
+					Shell shell = new Shell();
+					MessageDialog.openInformation(shell,"Search Problem",DeployerMessages.getString("Deployer.bluetooth.notconnected.msg"));
+				}
+			}
+		});
+	}
+
+	//------------------------------------------------//
+	
+	public void init(IWorkbench workbench) {
+	}
+	
+	//---------------------------------------------------------------------------//
+	
+	/**
+	 * Update the state of the deploy button based on various conditions.
+	 */
+	private void updateButtonStates() {
+		if (!Platform.OS_WIN32.equals(Platform.getOS())) {			
+			emulatorRadioButton.setVisible(false);
+			emulatorRadioButton.setSelection(false);
+			deviceRadioButton.setSelection(true);	
+			deviceRadioButton.setVisible(false);
+		}	
+		if(emulatorRadioButton != null && emulatorRadioButton.getSelection()){
+			searchDevices.setVisible(false);
+			emulatorDeployerPathText.setEnabled(false);
+			emulatorDeployerPathText.setVisible(true);
+			selectionComboLabel.setText("Select Emulator:");				
+
+			String storeEmlItem=	getPreferenceStore().getString(PreferenceConstants.SELECTED_EMULATOR_NAME);
+			if(emulatorItems!=null&&emulatorItems.length>0){
+				int i=0;
+				for( String emulatorItem: emulatorItems ){						
+					if(storeEmlItem.trim().equalsIgnoreCase(emulatorItem.trim())){break;}
+					i++;						
+				}
+				selectionCombo.setItems(emulatorItems);	
+				selectionCombo.select(i);
+				emulatorDeployerPathText.setText(getPreferenceStore().getString(PreferenceConstants.SELECTED_EMULATOR_PATH));
+
+			}else{
+				emulatorDeployerPathText.setText("");
+			}	
+			
+			/* TODO XXX */
+			log.info("DeployPreferencePage.updateButtonStates: Emulator Deployer Path Text: "+ emulatorDeployerPathText);
+
+
+		} else if(deviceRadioButton != null && deviceRadioButton.getSelection()){		
+			searchDevices.setVisible(true);
+			searchDevices.setEnabled(true);
+			selectionComboLabel.setText("Select Device:");
+			emulatorDeployerPathText.setVisible(false);
+
+			if(devices!=null&&devices.length>1){
+				String storeDeviceName=	getPreferenceStore().getString(PreferenceConstants.SELECTED_DEVICE_NAME);
+				int i=0;
+				for( String devicename: devices ){						
+					if(storeDeviceName.trim().equalsIgnoreCase(devicename.trim())){break;}
+					i++;						
+				}
+				if(DeviceListProvider.isBloothToothConnected()){
+					selectionCombo.setItems(devices);	
+					selectionCombo.select(i);
+				}
+			}else{				
+				selectionCombo.add(getPreferenceStore().getString(PreferenceConstants.SELECTED_DEVICE_NAME));
+				selectionCombo.select(0);
+			}
+		}
+	}
+			
+		public Control createContents(Composite parent) {
+			initializeDialogUnits(parent);					
+			Composite result= new Composite(parent, SWT.NONE);
+			result.setFont(parent.getFont());			
+			GridLayout layout= new GridLayout();
+			layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+			layout.marginWidth= 0;
+			layout.verticalSpacing= convertVerticalDLUsToPixels(10);
+			layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+			result.setLayout(layout);
+			
+			createFieldEditors(result);	
+			contents = result;
+			initFields();	
+			
+			Dialog.applyDialogFont(result);		
+			
+			return result;
+		}
+		
+		private void initFields() {
+			performDefaults();
+		}	
+		
+		public void performDefaults() {
+			IPreferenceStore prefStore= getPreferenceStore();				
+			deviceRadioButton.setSelection(PreferenceConstants.WRT_DEPLOY_CHOICE_DEVICE.equals(prefStore.getString(PreferenceConstants.WRT_DEPLOY_CHOICE)));
+			emulatorRadioButton.setSelection(PreferenceConstants.WRT_DEPLOY_CHOICE_EMULATOR.equals(prefStore.getString(PreferenceConstants.WRT_DEPLOY_CHOICE)));
+			selectionCombo.removeAll();
+
+			if(emulatorRadioButton != null && emulatorRadioButton.getSelection()){
+				selectionCombo.setItems(emulatorItems);			
+				emulatorDeployerPathText.setText(prefStore.getString(PreferenceConstants.SELECTED_EMULATOR_PATH));
+				/* TODO XXX */
+				log.info("DeployPreferencePage.performDefaults: Emulator Deployer Path Text: "+ emulatorDeployerPathText);
+			} 
+			
+			/* TODO XXX */
+			log.info("DeployPreferencePage.performDefaults: emulatorRadioButton not selected: "+ emulatorDeployerPathText);
+
+			/*if(deviceRadioButton != null && deviceRadioButton.getSelection()){ 	
+				devices = new String[1];	
+				devices[0]	=prefStore.getString(PreferenceConstants.SELECTED_DEVICE_NAME);
+			}
+			*/
+			
+			debugButton.setSelection(prefStore.getBoolean(PreferenceConstants.DEBUG_ENABLED));
+			updateButtonStates();
+			super.performDefaults();
+		}
+	   protected void performApply() {
+	        super.performOk();
+	    }
+		public boolean performOk() {
+			boolean wantSelection = false;
+		
+			if(selectionCombo.getSelectionIndex() < 0 || (selectionCombo.getItem(selectionCombo.getSelectionIndex()).toString().equalsIgnoreCase("none"))){
+				Shell shell = new Shell();
+				wantSelection = MessageDialog.openQuestion(shell,"Widget Deployment Settings","You have not made any selection. Do you want to select device?");
+			}
+			if(!wantSelection){
+				IPreferenceStore prefOkStore = getPreferenceStore();		
+	
+				if (deviceRadioButton.getSelection()) {
+					prefOkStore.setValue(PreferenceConstants.WRT_DEPLOY_CHOICE,	PreferenceConstants.WRT_DEPLOY_CHOICE_DEVICE);
+				
+					prefOkStore.setValue(PreferenceConstants.SELECTED_DEVICE_NAME, selectionCombo.getText());
+								
+				} else if (emulatorRadioButton.getSelection()) {
+					prefOkStore.setValue(PreferenceConstants.WRT_DEPLOY_CHOICE,	PreferenceConstants.WRT_DEPLOY_CHOICE_EMULATOR);
+					prefOkStore.setValue(PreferenceConstants.SELECTED_EMULATOR_NAME, selectionCombo.getText());
+					prefOkStore.setValue(PreferenceConstants.SELECTED_EMULATOR_PATH, emulatorDeployerPathText.getText());
+				}
+	
+				boolean debugEnabled = debugButton.getSelection();
+				prefOkStore.setValue(PreferenceConstants.DEBUG_ENABLED, 
+						Boolean.valueOf(debugEnabled).toString());
+				Activator.enableBlueCoveDiagnostics(debugEnabled);
+	
+				boolean res = super.performOk();
+				return res;
+			}
+			return false;
+	}
+	    
+	    /**
+		 * Runs a thread to load the devices present for the deployment.
+		 * Does not effect the loading of the UI.
+		 * @param device the device earlier saved .
+		 */
+		private void loadDevices(final String device) {		
+			runnable = new IRunnableWithProgress(){
+				public void run(IProgressMonitor monitor)
+					throws InvocationTargetException, InterruptedException {
+				List<DeployDeviceInfo> deviceInfo = DeviceListProvider
+						.getDevices(monitor);
+				devices = new String[deviceInfo.size() + 1];
+				int i = 1;
+
+				devices[0] = DeployMessages.getString("View.none.text");//$NON-NLS-1$
+				for (DeployDeviceInfo deployDeviceInfo : deviceInfo) {
+					devices[i] = deployDeviceInfo.getDeviceName();
+					i++;
+				}
+				// refresh the devices combo in the async thread
+				deviceRadioButton.getDisplay().asyncExec(new Runnable() {
+
+					public void run() {
+						// put the devices found in the combo
+						if(DeviceListProvider.isBloothToothConnected())
+							selectionCombo.setItems(devices);
+						if (device == null || device.length() < 1) {
+							selectionCombo.setText(DeployMessages
+									.getString("View.none.text")); //$NON-NLS-1$
+						} else {
+							selectionCombo.setText(device);
+						}
+						
+						// Let the user know that the device can now be selected
+						Shell shell = new Shell();
+						MessageDialog.openInformation(shell,"Deployment Preferences: Search Completed","Device Search Completed. Make the device selection.");
+					}
+				});
+
+			}
+		};		
+			
+			// Use the progess service to execute the runnable
+
+		ProgressMonitorDialog dialog = new ProgressMonitorDialog(searchDevices.getDisplay().getActiveShell());		
+		try {
+		    	 dialog.run(true, true, runnable);
+		} catch (InvocationTargetException e) {
+		    	 Activator.log(IStatus.ERROR, "Exception loading devices", e);
+		    	
+		} catch (InterruptedException e) {
+		    	 Activator.log(IStatus.ERROR, "Exception loading devices", e);
+		}
+		
+		
+/*	
+		ProgressMonitorDialog dialogDone = new ProgressMonitorDialog(selectionCombo.getShell());
+		try {
+		dialogDone.run(true, true, new IRunnableWithProgress() {
+		public void run(IProgressMonitor monitor ) {
+		monitor.beginTask("Searching for Devices", IProgressMonitor.UNKNOWN);
+
+		monitor.setTaskName("Deployment Completed. Select the Deployment Device.");
+		monitor.done();
+		}
+		});
+		} catch (InvocationTargetException e) {
+		// TODO Auto-generated catch block
+			Activator.log(IStatus.ERROR, "Exception loading devices", e);
+		
+		} catch (InterruptedException e) {
+		// TODO Auto-generated catch block
+			Activator.log(IStatus.ERROR, "Exception loading devices", e);
+		}
+*/
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/PreferenceConstants.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2009 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;
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public class PreferenceConstants {
+
+	///-----------------keys-----------------------//
+	
+	public static final String WRT_DEPLOY_CHOICE = "wrtDeploychoicePreference";	
+	
+	public static final String DEPLOYMENT_SETTINGE_PAGE = "org.symbian.tools.wrttools.core.deploy.DeployPreferencePage";
+	
+	//---------------------values----------------------------//
+	
+	public static final String WRT_DEPLOY_CHOICE_DEVICE = "DEVICE";
+	
+	public static final String WRT_DEPLOY_CHOICE_EMULATOR = "EMULATOR";	
+	
+	
+	
+	public static final String SELECTED_EMULATOR_PATH = "org.symbian.tools.wrttools.emulator";
+	
+	public static final String SELECTED_DEVICE_NAME = "selectedDeviceName";
+	public static final String SELECTED_EMULATOR_NAME = "selectedEmulatorDeviceName";
+	
+	public static final String DEBUG_ENABLED = "debugEnabled";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/PreferenceInitializer.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2009 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;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import org.symbian.tools.wrttools.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();		
+		store.setDefault(PreferenceConstants.WRT_DEPLOY_CHOICE, PreferenceConstants.WRT_DEPLOY_CHOICE_DEVICE);
+		store.setDefault(PreferenceConstants.WRT_DEPLOY_CHOICE, PreferenceConstants.WRT_DEPLOY_CHOICE_EMULATOR);
+//		store.setDefault(PreferenceConstants.WRT_EMULATOR_PATH, "none");	
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/ProgressRunnableDialog.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2009 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;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import org.symbian.tools.wrttools.core.deploy.device.DeviceListProvider;
+
+
+/**
+ * Progress Runnable Dialog for the searching of the devices.
+ * Provides the functionality to cancel the operation.
+ * @author avraina
+ *
+ */
+public class ProgressRunnableDialog extends ProgressMonitorDialog {
+
+	private IProgressMonitor progressMonitor;
+	
+	/**
+	 * Constructor.
+	 * @param parent
+	 */
+	public ProgressRunnableDialog(Shell parent) {
+		super(parent);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	protected void configureShell(Shell shell) {	
+		super.configureShell(shell);
+		//need to uncomment
+		shell.setText(DeployMessages.getString("wrt.core.Deployer.searchdevice.dialog.title")); //$NON-NLS-1$
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#getProgressMonitor()
+	 */
+	public IProgressMonitor getProgressMonitor() {
+		progressMonitor = new IProgressMonitor(){
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int)
+			 */
+			public void beginTask(String name, int totalWork) {
+				progressMonitor.beginTask(name, totalWork);
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#done()
+			 */
+			public void done() {
+				progressMonitor.done();
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
+			 */
+			public void internalWorked(double work) {
+				progressMonitor.internalWorked(work);
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
+			 */
+			public boolean isCanceled() {
+				return progressMonitor.isCanceled();
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
+			 */
+			public void setCanceled(boolean value) {
+				if(value){
+					DeviceListProvider.cancelSearch();
+				} 				
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String)
+			 */
+			public void setTaskName(String name) {
+				progressMonitor.setTaskName(name);
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String)
+			 */
+			public void subTask(String name) {
+				progressMonitor.subTask(name);
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
+			 */
+			public void worked(int work) {		
+				progressMonitor.worked(work);
+			}			
+		};			
+		return progressMonitor;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#cancelPressed()
+	 */
+	protected void cancelPressed() {
+		progressMonitor.setCanceled(true);
+		super.cancelPressed();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/WrtDeployActionDelegate.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2009 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;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+
+import org.symbian.tools.wrttools.sdt.utils.Logging;
+import org.symbian.tools.wrttools.Activator;
+import org.symbian.tools.wrttools.WRTStatusListener;
+import org.symbian.tools.wrttools.core.deployer.DeployException;
+import org.symbian.tools.wrttools.core.deployer.DeployerMessages;
+import org.symbian.tools.wrttools.core.deployer.IWidgetDeployer;
+import org.symbian.tools.wrttools.core.deployer.WidgetDeployerFactory;
+import org.symbian.tools.wrttools.core.packager.WrtPackageActionDelegate;
+
+public class WrtDeployActionDelegate extends ActionDelegate implements IObjectActionDelegate {
+
+	private Shell shell;
+	private static Job job;
+	
+	public void run(IAction action) {
+		PlatformUI.getWorkbench().saveAllEditors(true);
+		deploy();
+	}
+	
+	/**
+	 * deploys the actual widget.
+	 */
+	@SuppressWarnings("restriction")
+	private void deploy() {
+		String destinationPath = null;
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		String deployerType = store.getString(PreferenceConstants.WRT_DEPLOY_CHOICE);
+		
+		if (deployerType.equalsIgnoreCase(PreferenceConstants.WRT_DEPLOY_CHOICE_EMULATOR)) {
+			destinationPath = store.getString(PreferenceConstants.SELECTED_EMULATOR_PATH);
+		} else if (deployerType.equalsIgnoreCase(PreferenceConstants.WRT_DEPLOY_CHOICE_DEVICE)) {
+			destinationPath = store.getString(PreferenceConstants.SELECTED_DEVICE_NAME);
+		}
+
+		if (destinationPath != null
+				&& destinationPath.length() > 0
+				&& !destinationPath.equalsIgnoreCase(DeployMessages.getString("View.none.text"))) {
+				job = new DeployJob("Deploying widget", destinationPath, deployerType);
+				job.setUser(true);
+				job.schedule();
+				job.addJobChangeListener(new IJobChangeListener() {
+					public void sleeping(IJobChangeEvent event) {}
+					public void awake(IJobChangeEvent event) {
+					}
+					public void aboutToRun(IJobChangeEvent event) {
+					}
+					public void scheduled(IJobChangeEvent event) {
+					}
+					public void running(IJobChangeEvent event) {
+					}
+					public void done(IJobChangeEvent event) {
+						/*synchronized (job) {
+						job.notify();}*/
+					}
+				});		
+			
+		} else {
+			MessageDialog.openInformation(shell, "Deploy error",
+					" Invalid deployment preferences" + " dest path: " + destinationPath + "deployerType:" + deployerType + " store:" + store);
+		}
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			DeployJob.projectList.clear();
+			DeployJob.wgzList.clear();
+			IStructuredSelection ss = (IStructuredSelection) selection;
+			for (Iterator iter = ss.iterator(); iter.hasNext();) {
+				Object obj = iter.next();
+				if (obj instanceof IProject) {
+					// multi project selection enabled
+					DeployJob.projectList.add((IProject) obj);
+				}
+				if (obj instanceof IFile) {
+					// multi wgz selection enabled
+					IFile wgzFile = (IFile) obj;
+					if(wgzFile.getName().endsWith("wgz")){
+						DeployJob.wgzList.add((IFile) obj);}
+				}
+			}
+		}
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+	
+	private static final class DeployJob extends Job {
+		//private String widgetPackagedPath;
+		private final String destination;
+		private final String deployType;
+		
+		public static List<IProject> projectList = new ArrayList<IProject>();
+		public static List<IFile> wgzList = new ArrayList<IFile>();
+		
+		private WrtPackageActionDelegate packagerAction = new WrtPackageActionDelegate();
+
+		private DeployJob(String name, String deployDestination, String deployType) {
+			super(name);
+			//this.widgetPackagedPath = widgetPackagedPath;
+			this.destination = deployDestination;
+			this.deployType = deployType;
+		}
+
+		public IStatus run(IProgressMonitor monitor) {
+			WRTStatusListener statusListener = new WRTStatusListener();
+			IWidgetDeployer wd = WidgetDeployerFactory.createWidgetDeployer(deployType, statusListener);	
+			IStatus result = new Status(IStatus.OK, Activator.PLUGIN_ID, 0, "", null);
+			
+			if (projectList != null && projectList.size() > 0) {
+				for (IProject project : projectList) {				
+					if (project != null) {
+						/* package the files before deployment */
+						boolean packageSuccess = packagerAction.packageProject(project);
+						if (!packageSuccess) {
+							continue;
+						}
+						String packagedPath;
+						try {
+							IPath wgzPath = new Path(project.getName() + ".wgz");
+							IFile wgz = project.getFile(wgzPath);
+							packagedPath = wgz.getLocation().toFile().getCanonicalFile().toString();
+							try {
+								result = wd.deploy(packagedPath, destination, monitor);
+								if (result.isOK()) {
+									job.setName("Deployment Completed");			
+								} else if (result.getCode() == IStatus.CANCEL){
+									job.setName("Deployment Cancelled");
+								} 
+							} catch (DeployException e) {
+								result = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e.getMessage(), e);
+								Logging.log(Activator.getDefault(), result);
+							}
+						} catch (IOException e) {
+							Activator.log(IStatus.ERROR, "Error deploying widget", e);
+						}
+					}
+					}
+				}
+			if (wgzList != null && wgzList.size() > 0) {	
+				for (IFile wgzFile : wgzList) {		
+						File wgzF = new File(wgzFile.getLocation().toString());
+						if(!wgzF.exists()){
+							if (wgzList != null && wgzList.size() > 0) {
+								IProject project = wgzFile.getProject();
+									if (project != null) {
+										boolean packageSuccess=packagerAction.packageProject(project);// check & handle if the file is deleted outside aptana
+										if(!packageSuccess)
+										{
+								    	   continue;
+										}
+									}
+								}
+							}
+							if (wgzFile.exists()) {						
+								String packagedPath;
+								try {
+									packagedPath = wgzFile.getLocation().toFile().getCanonicalFile().toString();
+									
+									try {
+										result = wd.deploy(packagedPath, destination, monitor);
+										if (result.isOK()) {
+											job.setName("Deployment Completed");
+										} else if (result.getCode() == IStatus.CANCEL){
+										    job.setName("Deployment Cancelled");
+										} 
+									} catch (DeployException e) {
+										result = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e.getMessage(), e);
+										Logging.log(Activator.getDefault(), result);
+									} 
+								} catch (IOException e) {
+									Activator.log(IStatus.ERROR, "Error deploying widget", e);
+								}
+							}
+			  }
+				}	
+			statusListener.close();
+			return result;
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/WrtDeploymentSettingsActionDelegate.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2009 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;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+public class WrtDeploymentSettingsActionDelegate extends ActionDelegate
+													implements IObjectActionDelegate {
+
+	public void run(IAction action) {
+		PreferencesUtil.createPreferenceDialogOn(null, PreferenceConstants.DEPLOYMENT_SETTINGE_PAGE, null, null).open();
+	}
+
+	public void setActivePart(IAction arg0, IWorkbenchPart arg1) {
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/deployMessages.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,6 @@
+wrt.core.Deployer.searchdevice.dialog.title=Searching devices
+View.none.text=none
+wrt.core.Deploy.failed.as.package.failed=Deploy cannot be completed as Packing failed
+
+WRTDeployerConstants.success=Packaging Successful\n
+WRTDeployerConstants.failed=Packaging Failed\n 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeployDeviceInfo.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2009 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.device;
+
+import org.symbian.tools.wrttools.sdt.utils.Check;
+
+/**
+ * Holds the information about the Device to be used for the deployment
+ * through bluetooth
+ * @author avraina
+ *
+ */
+public class DeployDeviceInfo {
+
+	private String deviceName;
+	private String deviceBlueToothAddress;
+	
+	public DeployDeviceInfo(String deviceName, String deviceBlueToothAddress) {
+		Check.checkArg(deviceName);
+		Check.checkArg(deviceBlueToothAddress);
+		this.deviceName = deviceName;
+		this.deviceBlueToothAddress = deviceBlueToothAddress;
+	}	
+	
+	/**
+	 * Returns the device name.
+	 * @return the address
+	 */
+	public String getDeviceName() {
+		return deviceName;
+	}
+
+	/**
+	 * Returns the bluetooth address of the device
+	 * @return the address
+	 */
+	public String getDeviceBlueToothAddress() {
+		return deviceBlueToothAddress;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeviceDeployer.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2009 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.device;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.MessageFormat;
+
+import javax.bluetooth.BluetoothConnectionException;
+import javax.microedition.io.Connector;
+import javax.obex.ClientSession;
+import javax.obex.HeaderSet;
+import javax.obex.Operation;
+import javax.obex.ResponseCodes;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import org.symbian.tools.wrttools.Activator;
+import org.symbian.tools.wrttools.core.deployer.DeployerMessages;
+import org.symbian.tools.wrttools.core.deployer.IWidgetDeployerConstants;
+import org.symbian.tools.wrttools.core.deployer.WidgetDeployer;
+import org.symbian.tools.wrttools.core.status.IWRTConstants;
+
+/**
+ * The class needed for the deployment of the widget to device using bluetooth.
+ * 
+ * @author avraina
+ */
+public class DeviceDeployer extends WidgetDeployer {
+
+	public IStatus deploy(String fileName, String device, IProgressMonitor progressMonitor) {
+		File inputFile = new File(fileName);
+		IStatus result = null;
+		
+		// If the archive is directly deployed than directly deploy it
+		// else deploy from the folder path.
+		if (fileName.toLowerCase()
+				.endsWith(IWRTConstants.WIDGET_FILE_EXTENSION)) {
+			result = deployWidget(inputFile, device, progressMonitor);
+		}
+		if (result.isOK()) {
+			emitStatus(DeployerMessages.getString("Deployer.ends.msg"));//$NON-NLS-1$
+			
+		} else if (result.getCode() == IStatus.CANCEL){
+			emitStatus(DeployerMessages.getString("Deployer.cancelled.msg"));
+		} 
+		return result;
+	}
+
+	/**
+	 * Deploys the widget using the bluetooth.
+	 * 
+	 * @param inputWidget
+	 *            the input widget which has to be deployed.
+	 * @param device
+	 *            the device to which the widget is deployed
+	 * @param progressMonitor 
+	 * @throws Exception
+	 *             if the exception is throws
+	 */
+	private IStatus deployWidget(File inputWidget, String device, IProgressMonitor progressMonitor) {
+		InputStream in = null;
+		OutputStream os = null;
+		Operation putOperation = null;
+		ClientSession clientSession = null;
+		IStatus result = null;
+		try {
+			if (!DeviceListProvider.isBloothToothConnected()) {
+				String msg = DeployerMessages.getString("Deployer.bluetooth.notconnected.msg");
+				emitStatus(msg);
+				return new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, msg, null);
+			}
+
+			String message = MessageFormat
+					.format(
+							DeployerMessages
+									.getString("Deployer.searchservice.msg"), new Object[] { device });//$NON-NLS-1$
+			emitStatus(message);
+			String servicesFound = ServicesProvider.getServicesFound(device);
+			if (servicesFound == null || servicesFound.length() < 1) {
+				message = MessageFormat
+						.format(
+								DeployerMessages
+										.getString("Deployer.servicenotfound.err.msg"), new Object[] { device });//$NON-NLS-1$
+				emitStatus(message);
+
+				message = MessageFormat
+						.format(
+								DeployerMessages
+										.getString("Deployer.cannotdeploy.err.msg"), new Object[] { device });//$NON-NLS-1$
+				emitStatus(message);
+				return new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, message, null);
+			}
+
+			message = MessageFormat
+					.format(
+							DeployerMessages
+									.getString("Deployer.servicefound.msg"), new Object[] { device });//$NON-NLS-1$
+			emitStatus(message);
+
+			clientSession = (ClientSession) Connector.open(servicesFound);
+			HeaderSet hsConnectReply = clientSession.connect(null);
+			if (hsConnectReply.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) {
+				emitStatus(DeployerMessages
+						.getString("Deployer.services.connect.err.msg"));//$NON-NLS-1$
+			}
+
+			emitStatus(DeployerMessages.getString("Deployer.begin.msg"));
+
+			HeaderSet hsOperation = clientSession.createHeaderSet();
+			
+			if (progressMonitor.isCanceled()) {
+				return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, 0, "Deployment was canceled", null);
+			}
+
+			// Send widget to server
+			in = new FileInputStream(inputWidget);
+			message = MessageFormat
+					.format(
+							DeployerMessages
+									.getString("Deployer.inputfile.msg"), new Object[] { inputWidget.getAbsolutePath() });//$NON-NLS-1$
+			emitStatus(message);
+
+			hsOperation.setHeader(HeaderSet.NAME, inputWidget.getName());
+			hsOperation.setHeader(HeaderSet.TYPE,
+					IWidgetDeployerConstants.WIDGET_FILE_TYPE);
+			int size = (int)inputWidget.length();
+			byte file[] = new byte[size];
+			hsOperation.setHeader(HeaderSet.LENGTH, new Long(file.length));			
+
+			// Create PUT Operation
+			putOperation = clientSession.put(hsOperation);
+
+			os = putOperation.openOutputStream();
+
+			long start = System.currentTimeMillis();
+			
+            byte[] buf = new byte[16*1024];
+            int len;
+            while ((len = in.read(buf)) > 0) {
+                os.write(buf, 0, len);
+    			if (progressMonitor.isCanceled()) {
+    				putOperation.abort();
+    				return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, 0, "Deployment was canceled", null);
+    			}
+            }
+
+            os.flush();
+            os.close();			
+
+            long elapsed = System.currentTimeMillis() - start;
+            emitStatus("elapsed time: " + (double)elapsed/1000.0 + " seconds");
+            
+            int responseCode = putOperation.getResponseCode();
+            if (responseCode == ResponseCodes.OBEX_HTTP_OK) {
+            	message = MessageFormat.format(
+            			DeployerMessages.getString("Deployer.outputfile.msg"), new Object[] { device });//$NON-NLS-1$
+            	emitStatus(message);
+            	result = Status.OK_STATUS;
+            } else {
+            	message = "Error during deployment, OBEX error: " + responseCode;
+            	emitStatus(message);
+            	result = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, message, null);
+            }
+            
+		} catch (BluetoothConnectionException x) {
+			String message = getExceptionMessage(x.getMessage());
+			emitStatus(message);
+		}
+		catch (IOException e) {
+			String message = getExceptionMessage(e.getMessage());
+			emitStatus(message);
+		} finally {
+			try {
+				if (in != null) {
+					in.close();
+				}
+				if (putOperation != null) {
+					putOperation.close();
+				}
+				if (clientSession != null) {
+					clientSession.disconnect(null);
+					clientSession.close();
+				}
+			} catch (IOException x) {
+				Activator.log(IStatus.ERROR,
+						"Error cleaning up BlueTooth deployment", x);
+			}
+		}
+		if (result == null && clientSession == null) {
+			String message = "An error occurred initiating a connection to the device. It may have been rejected by the user.";
+			result = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, message, null);
+		}
+		return result;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/DeviceListProvider.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,188 @@
+/**
+ * Copyright (c) 2009 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.device;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.bluetooth.BluetoothStateException;
+import javax.bluetooth.DeviceClass;
+import javax.bluetooth.DiscoveryAgent;
+import javax.bluetooth.DiscoveryListener;
+import javax.bluetooth.LocalDevice;
+import javax.bluetooth.RemoteDevice;
+import javax.bluetooth.ServiceRecord;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.symbian.tools.wrttools.Activator;
+
+public class DeviceListProvider {
+
+	private static final List<DeployDeviceInfo> deviceInfo = new ArrayList<DeployDeviceInfo>();
+
+	private static WrtDiscoveryListener listener;
+
+	/**
+	 * Check whether the bluetooth is on or not.
+	 * 
+	 * @return whether the device is on.
+	 */
+	public static boolean isBloothToothConnected() {
+		return LocalDevice.isPowerOn();
+	}
+
+	public static String getDeviceAddress(String deviceName,
+			boolean allowDiscovery) {
+		String result = null;
+		for (DeployDeviceInfo deployDeviceInfo : deviceInfo) {
+			if (deployDeviceInfo.getDeviceName().equals(deviceName)) {
+				result = deployDeviceInfo.getDeviceBlueToothAddress();
+			}
+		}
+		if (result == null && allowDiscovery) {
+			discoverDevices(new NullProgressMonitor(), deviceName);
+			for (DeployDeviceInfo deployDeviceInfo : deviceInfo) {
+				if (deployDeviceInfo.getDeviceName().equals(deviceName)) {
+					result = deployDeviceInfo.getDeviceBlueToothAddress();
+				}
+			}
+		}
+		return result;
+	}
+
+	public static List<DeployDeviceInfo> getDevices(
+			IProgressMonitor progressMonitor) {
+		discoverDevices(progressMonitor, null);
+		return new ArrayList<DeployDeviceInfo>(deviceInfo);
+	}
+
+	/**
+	 * Discover devices. Finds all devices if desiredDevice is null. If non-null
+	 * search stops when the desired device is found.
+	 */
+	private static void discoverDevices(final IProgressMonitor progressMonitor,
+			final String desiredDevice) {
+
+		final Object inquiryCompletedEvent = new Object();
+		deviceInfo.clear();
+
+		listener = new WrtDiscoveryListener(desiredDevice,
+				inquiryCompletedEvent, progressMonitor);
+
+		synchronized (inquiryCompletedEvent) {
+			boolean started;
+			try {
+				started = LocalDevice.getLocalDevice().getDiscoveryAgent()
+						.startInquiry(DiscoveryAgent.GIAC, listener);
+				if (started) {
+					inquiryCompletedEvent.wait();
+				}
+			} catch (BluetoothStateException e) {
+				Activator.log(IStatus.ERROR, e.getMessage(), e);
+			} catch (InterruptedException e) {
+				Activator.log(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+	}
+
+	public static boolean isCanceled() {
+		return listener != null && listener.isCanceled;
+	}
+
+	public static void cancelSearch() {
+		if (listener != null) {
+			try {
+				listener.isCanceled = true;
+				if (listener.progressMonitor != null &&
+					!listener.progressMonitor.isCanceled()) {
+						listener.progressMonitor.setCanceled(true);
+				}
+				LocalDevice.getLocalDevice().getDiscoveryAgent().cancelInquiry(
+						listener);
+			} catch (BluetoothStateException e) {
+				Activator.log(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+	}
+
+	private static final class WrtDiscoveryListener implements
+			DiscoveryListener {
+		final String desiredDevice;
+		final Object inquiryCompletedEvent;
+		final IProgressMonitor progressMonitor;
+		boolean isCanceled;
+
+		private WrtDiscoveryListener(String desiredDevice,
+				Object inquiryCompletedEvent,
+				IProgressMonitor progressMonitor) {
+			this.desiredDevice = desiredDevice;
+			this.inquiryCompletedEvent = inquiryCompletedEvent;
+			this.progressMonitor = progressMonitor;
+		}
+
+		public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
+			try {
+				if (btDevice.getFriendlyName(false) != null
+						&& btDevice.getFriendlyName(false).length() > 0) {
+					DeployDeviceInfo deployDeviceInfo = new DeployDeviceInfo(
+							btDevice.getFriendlyName(false), btDevice
+							.getBluetoothAddress());
+					deviceInfo.add(deployDeviceInfo);
+					//System.out.println("Friendly name  :  "+ (btDevice.getFriendlyName(false)));
+					// System.out.println("----device size   :"+deviceInfo.
+					// size());
+					if (desiredDevice != null
+							&& desiredDevice.equals(deployDeviceInfo
+									.getDeviceName())) {
+						cancelSearch();
+					}
+					checkCanceled();
+				}
+			} catch (BluetoothStateException e) {
+				Activator.log(IStatus.ERROR, e.getMessage(), e);
+			} catch (IOException e) {
+				Activator.log(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+		
+		private void checkCanceled() {
+			if (!isCanceled && progressMonitor != null) {
+				if (progressMonitor.isCanceled()) {
+					cancelSearch();
+				}
+			}
+		}
+
+		public void inquiryCompleted(int discType) {
+			synchronized (inquiryCompletedEvent) {
+				inquiryCompletedEvent.notifyAll();
+			}
+		}
+
+		public void serviceSearchCompleted(int transID, int respCode) {
+		}
+
+		public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/ServicesProvider.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,100 @@
+/**
+ * Copyright (c) 2009 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.device;
+
+import java.io.IOException;
+
+import javax.bluetooth.BluetoothStateException;
+import javax.bluetooth.DeviceClass;
+import javax.bluetooth.DiscoveryListener;
+import javax.bluetooth.LocalDevice;
+import javax.bluetooth.RemoteDevice;
+import javax.bluetooth.ServiceRecord;
+import javax.bluetooth.UUID;
+
+import org.eclipse.core.runtime.IStatus;
+
+import org.symbian.tools.wrttools.Activator;
+
+public class ServicesProvider {
+	
+	static final UUID OBEX_OBJECT_PUSH = new UUID(0x1105);
+	 
+	private static String serviceURL;
+	private static String btAddress;
+	
+	public static String getServicesFound(final String deviceName){
+		try {
+			serviceURL="";
+			btAddress = DeviceListProvider.getDeviceAddress(deviceName, true);
+
+
+	        UUID serviceUUID = OBEX_OBJECT_PUSH;
+
+	        final Object serviceSearchCompletedEvent = new Object();
+
+	        DiscoveryListener listener = new DiscoveryListener() {
+
+	            public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
+	            }
+
+	            public void inquiryCompleted(int discType) {
+	            }
+
+	            public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
+	            	try{	            		
+	            		for (int i = 0; i < servRecord.length; i++) {
+	            			if(servRecord[i].getHostDevice().getFriendlyName(false).equals(deviceName)){	            				
+	            				serviceURL = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
+	            			}
+	            		}
+	            	} catch(BluetoothStateException e){
+	            		Activator.log(IStatus.ERROR, e.getMessage(), e);
+	            	} catch (IOException e) {
+	            		Activator.log(IStatus.ERROR, e.getMessage(), e);
+					}
+	            }
+
+	            public void serviceSearchCompleted(int transID, int respCode) {
+	                synchronized(serviceSearchCompletedEvent){
+	                    serviceSearchCompletedEvent.notifyAll();
+	                }
+	            }
+
+	        };
+
+	        UUID[] searchUuidSet = new UUID[] { serviceUUID };
+	        int[] attrIDs =  new int[] {
+	                0x0100 // Service name
+	        };
+	        
+	        RemoteDevice bt = new WrapperRemoteDevice(btAddress);
+	        synchronized(serviceSearchCompletedEvent) {
+	        	LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(attrIDs, searchUuidSet, bt, listener);
+	        	serviceSearchCompletedEvent.wait();
+	        }
+
+	    } catch(IOException e){
+	    	Activator.log(IStatus.ERROR, "Error in Bluetooth service discovery", e);		
+		} catch (InterruptedException e) {
+			Activator.log(IStatus.ERROR, "Error in Bluetooth service discovery", e);		
+		}	    
+	    return serviceURL;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/device/WrapperRemoteDevice.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2009 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.device;
+
+import javax.bluetooth.RemoteDevice;
+
+/**
+ * A wrapper class around the Remote Device.
+ * This will be used while deploying to the device.
+ * @author avraina
+ *
+ */
+public class WrapperRemoteDevice extends RemoteDevice{
+
+	public WrapperRemoteDevice(String address) {
+		super(address);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorDeployer.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2009 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.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import org.symbian.tools.wrttools.core.deployer.DeployException;
+import org.symbian.tools.wrttools.core.deployer.DeployerMessages;
+import org.symbian.tools.wrttools.core.deployer.WidgetDeployer;
+import org.symbian.tools.wrttools.core.status.IWRTConstants;
+
+/**
+ * The class needed for the deployment of the widget to emulator.
+ * @author avraina
+ */
+public class EmulatorDeployer extends WidgetDeployer {
+	
+	private boolean isDeploySuccessful = false;
+
+	public IStatus deploy(String fileName, String des, IProgressMonitor monitor) throws DeployException{				
+		File inputFile = new File(fileName);
+		File outputFile = new File(des);
+		emitStatus(DeployerMessages.getString("Deployer.begin.msg")); //$NON-NLS-1$
+		try {
+			if(!outputFile.isDirectory()){
+				outputFile.mkdir();
+			}
+		} catch (Exception e) {
+			emitStatus(DeployerMessages.getString("Deployer.failed.err.msg")); //$NON-NLS-1$
+			throw new DeployException(e);
+		}
+		
+		// If the archive is directly deployed than directly deploy it
+		// else deploy from the folder path.
+		if(fileName.toLowerCase().endsWith(IWRTConstants.WIDGET_FILE_EXTENSION)){
+			File out = new File(outputFile + "/" + inputFile.getName()); //$NON-NLS-1$
+			deployWidget(inputFile, out);			
+		} 
+		if(isDeploySuccessful){				
+			emitStatus(DeployerMessages.getString("Deployer.ends.msg")); //$NON-NLS-1$
+		} else {
+			emitStatus(DeployerMessages.getString("Deployer.failed.err.msg")); //$NON-NLS-1$
+		}
+		return Status.OK_STATUS;
+	}
+	
+	// helper methods 
+	
+	/**
+	 * Deploys the widget from the source to the destination path of the emulator.
+	 * @param inputFile the actual widget path from where widget needs to be deployed.
+	 * @param outputFile the path of the emulator where the widget will be deoplyed.
+	 * @throws DeployException throw a DeployException if anything goes wrong.
+	 */
+	private void deployWidget(File inputFile, File outputFile) throws DeployException{
+		try {
+			String message = MessageFormat.format(DeployerMessages.getString("Deployer.inputfile.msg"), new Object[]{inputFile});//$NON-NLS-1$
+			emitStatus(message);
+			
+			InputStream in = new FileInputStream(inputFile);
+			OutputStream out  = new FileOutputStream(outputFile);
+			int c;
+
+			while ((c = in.read()) != -1)
+				out.write(c);
+			in.close();
+			out.close();
+			
+			message = MessageFormat.format(DeployerMessages.getString("Deployer.outputfile.msg"), new Object[]{outputFile});//$NON-NLS-1$
+			emitStatus(message);
+			isDeploySuccessful= true;
+		} catch (Exception e) {
+			emitStatus(e.getMessage());
+			isDeploySuccessful=false;
+			emitStatus(DeployerMessages.getString("Deployer.failed.err.msg")); //$NON-NLS-1$
+			throw new DeployException(e);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/EmulatorListProvider.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,180 @@
+/**
+ * Copyright (c) 2009 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.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+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;
+
+import org.symbian.tools.wrttools.core.IWRTConstants;
+
+
+
+
+/**
+ * The Content provider for the Emulators List displayed.
+ * @author avraina
+ *
+ */
+public class EmulatorListProvider{	
+
+	/**
+	 * Map containing of the SDKS with the corresponding paths.
+	 */	
+	private static HashMap<String, String> listofEmulators = new HashMap<String, String>();
+
+	public static HashMap<String, String> populateEmulators() {
+		if (listofEmulators == null) {
+			listofEmulators = new HashMap<String, String>();
+		}
+		listofEmulators.clear();
+		initialize();
+		return listofEmulators;
+	}
+	
+	// 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 static HashMap<String, String> 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()){				
+				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);
+						
+					}
+				}
+				if(listofEmulators.size() == 0){
+					listofEmulators.put("None","");
+				}
+				
+				
+					
+			}
+			
+		} 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 static 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 static 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 static  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, node.getNodeValue());
+			}
+		}
+	}
+
+	/**
+	 * Returns the child list of the particular Node.
+	 * @param parentNode
+	 */
+	private static  NodeList getChildNodes(Node parentNode) {
+		return parentNode.getChildNodes();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployException.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2009 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.deployer;
+
+import org.symbian.tools.wrttools.core.exception.WRTException;
+
+public class DeployException extends WRTException {
+
+	private static final long serialVersionUID = -4322746430125745192L;
+
+	/**
+	 * @param cause
+	 */
+	public DeployException(Throwable cause) {
+		super(cause);
+	}
+
+	public DeployException(String message) {
+		super(message);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployStatus.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2009 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.deployer;
+
+import org.symbian.tools.wrttools.core.status.WRTStatus;
+
+/**
+ * Raises the Deploy Status.
+ * @author avraina
+ *
+ */
+public class DeployStatus extends WRTStatus{
+
+	/**
+	 * @param statusSource 
+	 * @param statusDescription
+	 */
+	public DeployStatus(String statusSource, String statusDescription) {
+		super(statusSource, statusDescription);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/DeployerMessages.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2009 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.deployer;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class DeployerMessages {
+	private static final String BUNDLE_NAME = "org.symbian.tools.wrttools.core.deployer.deployerMessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private DeployerMessages() {
+	}
+
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/IWidgetDeployer.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,47 @@
+/* ============================================================================
+ * Copyright © 2008 Nokia. All rights reserved.
+ * This material, including documentation and any related computer
+ * programs, is protected by copyright controlled by Nokia. All
+ * rights are reserved. Copying, including reproducing, storing,
+ * adapting or translating, any or all of this material requires the
+ * prior written consent of Nokia. This material also contains
+ * confidential information which may not be disclosed to others
+ * without the prior written consent of Nokia.
+ * ============================================================================*/
+
+package org.symbian.tools.wrttools.core.deployer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import org.symbian.tools.wrttools.core.status.IWRTStatusListener;
+
+/**
+ * The main interface for the Widget Project Deployment.The deployer will deploy the
+ * widget to the different devices which can be an emulator, server etc. 
+ * @author avraina
+ *
+ */
+public interface IWidgetDeployer {
+
+	/**
+	 * The method will deploy the widget to the target.
+	 * All the deployer tools must implement this method. Each deployer which 
+	 * @param inputPath the widget path from where the widget needs to be deployed.
+	 * @param destinationPath the destination path to which widget will be deployed. 
+	 * This can be an emulator , server or any other device
+	 * @return integer IStatus code. IStatus.OK for success, IStatus.CANCEL if the user canceled, IStatus.ERROR if an 
+	 * error was caught and reported to the status listener.
+	 * @throws DeployException throws a Deploy Exception if anything goes wrong while
+	 * deployment is going on.
+	 */
+	public IStatus deploy(String inputPath, String destinationPath, 
+						IProgressMonitor progressMonitor) throws DeployException;
+
+	/**
+	 * Sets the status listner associated with the widget deployer
+	 * @param statusListener the status listner to be associated.
+	 */
+	public void setStatusListener(IWRTStatusListener statusListener);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/IWidgetDeployerConstants.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2009 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.deployer;
+
+/**
+ * Interface to hold the constants for the Deployer.
+ * @author avraina
+ *
+ */
+public interface IWidgetDeployerConstants {
+	
+	/**
+	 * Refers to the deployer with can either be Emulator or Server or Device.
+	 * @author avraina
+	 *
+	 */
+	public enum DeployerType {
+		EMULATOR, SERVER, DEVICE
+	};
+	
+	/**
+	 * Widget file type.
+	 */
+	public static final String WIDGET_FILE_TYPE = "wgz";
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/WidgetDeployer.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,116 @@
+/* ============================================================================
+ * Copyright © 2008 Nokia. All rights reserved.
+ * This material, including documentation and any related computer
+ * programs, is protected by copyright controlled by Nokia. All
+ * rights are reserved. Copying, including reproducing, storing,
+ * adapting or translating, any or all of this material requires the
+ * prior written consent of Nokia. This material also contains
+ * confidential information which may not be disclosed to others
+ * without the prior written consent of Nokia.
+ * ============================================================================*/
+
+package org.symbian.tools.wrttools.core.deployer;
+
+import org.symbian.tools.wrttools.core.status.IWRTConstants;
+import org.symbian.tools.wrttools.core.status.IWRTStatusListener;
+import org.symbian.tools.wrttools.core.status.WRTStatus;
+import org.symbian.tools.wrttools.core.status.WRTStatusHandler;
+
+/**
+ * Main Class for the widget Deployer.This implements the IWidgetDeployer. 
+ * Different Deployer need to extend this class.This also contains the default
+ * implementation for the actual widget deployer such as making a sure the widget
+ * is validated before deploying and also if the widget is packaged correctly before
+ * deploying.
+ * @author avraina
+ *
+ */
+public abstract class WidgetDeployer implements IWidgetDeployer{
+	
+	private WRTStatusHandler statusHandler;
+	
+	IWRTStatusListener statusListener;
+	
+	protected String[] exceptionCodes  = new String[] {"OBEX_HTTP_UNSUPPORTED_TYPE", "OBEX_HTTP_FORBIDDEN"}; //$NON-NLS-1$ //$NON-NLS-2$
+	
+	public WidgetDeployer() {
+		setStatus();
+	}
+
+	/**
+	 * The method is to check whether the widget project is validated.
+	 * This should be done before calling the deploy method.
+	 * @param fileName. The file name which needs to be validated.
+	 * @return true if the project is validated else false.
+	 */
+	public boolean callValidator(String fileName){
+		return false;
+	}
+	
+	/**
+	 * The method is to check whether the widget project is packaged.
+	 * This should be done before calling the deploy method.
+	 * @param fileName. The file name which need to be deployed.
+	 * @return true if the project is packaged else false.
+	 */
+	public boolean callPackager(String fileName){
+		return false;
+	}
+	
+	/**
+	 * The method returns the extension of the widget to be deployed.
+	 * @return the extension of the widget.
+	 */
+	public String checkPackagedInput(){		
+		return IWRTConstants.WIDGET_FILE_EXTENSION;	
+	}
+		
+	protected void setStatus() {
+		statusHandler = new WRTStatusHandler();
+		statusHandler.addListener(getStatusListener());
+	}
+
+	/**
+	 * Returns the associated status listner with the widget deployer
+	 * @return status listener
+	 */
+	public IWRTStatusListener getStatusListener() {
+		return statusListener;
+	}
+
+	/**
+	 * Sets the status listner associated with the widget deployer
+	 * @param statusListener the status listner to be associated.
+	 */
+	public void setStatusListener(IWRTStatusListener statusListener) {
+		this.statusListener = statusListener;
+	}
+	
+	/**
+	 * Creates the status specific to the widget deployer
+	 * @param statusDescription the description of the status
+	 * @return the WRTStatus created
+	 */
+	protected void emitStatus(String statusDescription) {
+		WRTStatus status = new WRTStatus();
+		status.setStatusSource(IWRTConstants.StatusSourceType.DEPLOYER.name());
+		status.setStatusDescription(statusDescription);		
+		getStatusListener().emitStatus(status);
+	}
+	
+	/**
+	 * Returns the customized methods from the exception error code. If it
+	 * matches it returns the customized message else returns the exception itself
+	 * @param message exception message
+	 * @return the customized message
+	 */
+	protected String getExceptionMessage(String message) {
+		
+		if(message.contains(exceptionCodes[0])){
+			return DeployerMessages.getString("Deployer.device.notsupport.err.msg"); //$NON-NLS-1$
+		} else if (message.contains(exceptionCodes[1])){
+			return DeployerMessages.getString("Deployer.device.rejected.err.msg"); //$NON-NLS-1$
+		}		
+		return message;
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/WidgetDeployerFactory.java	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2009 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.deployer;
+
+import org.symbian.tools.wrttools.core.deploy.device.DeviceDeployer;
+import org.symbian.tools.wrttools.core.deploy.emulator.EmulatorDeployer;
+import org.symbian.tools.wrttools.core.status.IWRTStatusListener;
+
+/**
+ * Factory class which returns the emulator based on the input provided.
+ * @author avraina
+ *
+ */
+public class WidgetDeployerFactory {
+	
+	/**
+	 * @param deployerType
+	 * @return
+	 */
+	public static IWidgetDeployer createWidgetDeployer(String deployerType, IWRTStatusListener statusListener){
+		int ordinal = IWidgetDeployerConstants.DeployerType.valueOf(deployerType.toUpperCase()).ordinal();
+		IWidgetDeployer widgetDeployer;
+		
+		switch(ordinal){		
+		case 0: 
+			widgetDeployer = new EmulatorDeployer();
+			widgetDeployer.setStatusListener(statusListener);
+			return widgetDeployer;
+				
+		case 2:
+			widgetDeployer = new DeviceDeployer();
+			widgetDeployer.setStatusListener(statusListener);
+			return widgetDeployer;
+		}
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deployer/deployerMessages.properties	Mon Feb 15 13:46:26 2010 -0800
@@ -0,0 +1,16 @@
+Deployer.begin.msg=Deployment Started.
+Deployer.ends.msg=Deployment Successful.
+Deployer.completed.msg=Deployment Completed.
+Deployer.cancelled.msg=Deployment Cancelled.
+Deployer.inputfile.msg=Deploying file from -->{0}
+Deployer.outputfile.msg=File deployed to -->{0}
+Deployer.searchservice.msg=Searching for the service for the selected device "{0}"......
+Deployer.servicefound.msg=Service for the device "{0}" found
+Deployer.services.connect.err.msg=Failed to connect to the service
+Deployer.servicenotfound.err.msg=Cannot find service to the device "{0}"
+Deployer.cannotdeploy.err.msg=Cannot deploy to the device "{0}"
+Deployer.failed.err.msg=Deployment Failed.
+Deployer.device.notsupport.err.msg=Device does not support the widget deployment.
+Deployer.device.rejected.err.msg=Deployment rejected by the device.
+Deployer.bluetooth.notconnected.msg=Bluetooth is either disabled or not present in the system.
+Deployer.preperation.msg=Preparing Widget Deployment. 
\ No newline at end of file