add pulsar touchpoint code to portal
authordadubrow
Tue, 03 Aug 2010 11:50:53 -0500
changeset 1752 34e87e5741a1
parent 1751 4a0d736ba6a0
child 1753 b0ec278f91fa
add pulsar touchpoint code to portal
core/com.nokia.carbide.discovery.ui/META-INF/MANIFEST.MF
core/com.nokia.carbide.discovery.ui/plugin.xml
core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/ExecuteAction.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/UnzipAndExecuteAction.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/ExecutionFactory.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/ExecutionHandler.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/LinuxBinaryExecutionHandler.java
core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/MacDmgExecutionHandler.java
--- a/core/com.nokia.carbide.discovery.ui/META-INF/MANIFEST.MF	Tue Aug 03 11:50:05 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/META-INF/MANIFEST.MF	Tue Aug 03 11:50:53 2010 -0500
@@ -21,7 +21,8 @@
  org.eclipse.ui.editors,
  org.eclipse.ui.forms;bundle-version="3.5.0",
  com.nokia.cpp.utils.ui;bundle-version="1.0.0",
- com.nokia.cpp.utils.core;bundle-version="1.0.0"
+ com.nokia.cpp.utils.core;bundle-version="1.0.0",
+ org.eclipse.equinox.p2.touchpoint.natives;bundle-version="1.0.200"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: Nokia
--- a/core/com.nokia.carbide.discovery.ui/plugin.xml	Tue Aug 03 11:50:05 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/plugin.xml	Tue Aug 03 11:50:53 2010 -0500
@@ -118,5 +118,25 @@
           title="Install SDKs">
     </portalPageLayer>
  </extension>
+   <extension
+         point="org.eclipse.equinox.p2.engine.actions">
+      <action
+            class="org.eclipse.sequoyah.pulsar.internal.core.action.ExecuteAction"
+            name="org.eclipse.equinox.p2.touchpoint.natives.execute"
+            touchpointType="org.eclipse.equinox.p2.native"
+            touchpointVersion="1.0.0"
+            version="1.0.0">
+      </action>
+   </extension>
+   <extension
+         point="org.eclipse.equinox.p2.engine.actions">
+      <action
+            class="org.eclipse.sequoyah.pulsar.internal.core.action.UnzipAndExecuteAction"
+            name="org.eclipse.equinox.p2.touchpoint.natives.unzipandexecute"
+            touchpointType="org.eclipse.equinox.p2.native"
+            touchpointVersion="1.0.0"
+            version="1.0.0">
+      </action>
+   </extension>
 
 </plugin>
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java	Tue Aug 03 11:50:05 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java	Tue Aug 03 11:50:53 2010 -0500
@@ -123,6 +123,7 @@
 	}
 	
 	public static void setBusyCursor(final Control control, final boolean isBusy) {
+		System.out.println("control="+control);
 		if (control == null)
 			return;
 		final Display display = control.getDisplay();
@@ -196,4 +197,8 @@
 		return (String) properties.get(key);
 	}
 
+    public static IStatus makeErrorStatus(String message, Throwable t) {
+        return new Status(IStatus.ERROR, PLUGIN_ID, message, t);
+    }
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/ExecuteAction.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2009 Nokia Corporation 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".
+ *
+ * Contributors:
+ * 	David Dubrow
+ *  Gustavo de Paula (Motorola) - Add change permission in a linux OS
+ */
+
+package org.eclipse.sequoyah.pulsar.internal.core.action;
+
+import java.text.MessageFormat;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionFactory;
+import org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionHandler;
+
+import com.nokia.carbide.discovery.ui.Activator;
+
+public class ExecuteAction extends ProvisioningAction {
+
+    public static final String ACTION_EXECUTE = "execute"; //$NON-NLS-1$
+    private static final String PARM_EXECUTABLE = "executable"; //$NON-NLS-1$
+
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningAction#execute(java.util.Map)
+     */
+    @Override
+    public IStatus execute(Map<String, Object> parameters) {
+        String executable = (String) parameters.get(PARM_EXECUTABLE);
+        if (executable == null)
+            return Activator.makeErrorStatus(MessageFormat.format(
+                    "The \"{0}\" parameter was not set in the \"{1}\" action", PARM_EXECUTABLE,
+                    ACTION_EXECUTE), null);
+
+//        IInstallableUnit iu = (IInstallableUnit) parameters
+//                .get(ActionConstants.PARM_IU);
+//        if (executable.equals(ActionConstants.PARM_ARTIFACT)) {
+//            IArtifactKey artifactKey = iu.getArtifacts();
+//
+//            IFileArtifactRepository downloadCache;
+//            try {
+//                downloadCache = Util.getDownloadCacheRepo();
+//            } catch (ProvisionException e) {
+//                return e.getStatus();
+//            }
+//            File fileLocation = downloadCache.getArtifactFile(artifactKey);
+//            if ((fileLocation == null) || !fileLocation.exists())
+//                return Activator.makeErrorStatus(MessageFormat.format(
+//                        Messages.ExecuteAction_MissingArtifactError,
+//                        artifactKey), null);
+//            executable = fileLocation.getAbsolutePath();
+//        }
+        try {
+            ExecutionHandler handler = ExecutionFactory.getExecutionHandler(
+                    System.getProperty("os.name"), executable);
+
+            IStatus status = handler.handleExecution();
+
+            if (!status.isOK()) {
+                return status;
+            }
+        } catch (Exception e) {
+            return Activator.makeErrorStatus(MessageFormat.format(
+                    "could not execute \"{0}\"", executable), e);
+        }
+
+        return Status.OK_STATUS;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningAction#undo(java.util.Map)
+     */
+    @Override
+    public IStatus undo(Map<String, Object> parameters) {
+        return Activator.makeErrorStatus(
+                "undo not supported for exectutables", null);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/UnzipAndExecuteAction.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2009 Nokia Corporation 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".
+ *
+ * Contributors:
+ * 	David Dubrow
+ *  Euclides Neto (Motorola) - Externalize strings.
+ *  Gustavo de Paula (Motorola) - Add change permission in a linux OS  
+ */
+
+package org.eclipse.sequoyah.pulsar.internal.core.action;
+
+import java.text.MessageFormat;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.touchpoint.natives.Util;
+import org.eclipse.equinox.internal.p2.touchpoint.natives.actions.ActionConstants;
+import org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionFactory;
+import org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionHandler;
+
+import com.nokia.carbide.discovery.ui.Activator;
+
+@SuppressWarnings("restriction")
+public class UnzipAndExecuteAction extends UnzipAction {
+
+    public static final String ACTION_UNZIPANDEXECUTE = "unzipAndExecute"; //$NON-NLS-1$
+    private static final String PARM_EXECUTABLE = "executable"; //$NON-NLS-1$
+
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction#execute(java.util.Map)
+     */
+    @Override
+    public IStatus execute(Map<String, Object> parameters) {
+        IStatus status = super.execute(parameters);
+        if (!status.isOK()) {
+            return status;
+        }
+
+        String executable = (String) parameters.get(PARM_EXECUTABLE);
+        if (executable == null) {
+            return Activator.makeErrorStatus(MessageFormat.format(
+            		"The \"{0}\" parameter was not set in the \"{1}\" action", PARM_EXECUTABLE,
+                    ACTION_UNZIPANDEXECUTE), null);
+        }
+
+        IProfile profile = (IProfile) parameters
+                .get(ActionConstants.PARM_PROFILE);
+        String installFolder = Util.getInstallFolder(profile);
+        if (installFolder == null) {
+            return Activator.makeErrorStatus(
+                    "The profile did not have an install folder", null);
+        } else {
+            IPath path = new Path(installFolder);
+            path = path.append(executable);
+            executable = path.toOSString();
+            try {
+                ExecutionHandler handler = ExecutionFactory.getExecutionHandler(
+                        System.getProperty("os.name"), executable);
+
+                IStatus status2 = handler.handleExecution();
+
+                if (!status2.isOK()) {
+                    return status;
+                }
+            } catch (Exception e) {
+                return Activator.makeErrorStatus(MessageFormat.format(
+                		"could not execute \"{0}\"", executable), e);
+            }
+        }
+
+        return Status.OK_STATUS;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.equinox.internal.p2.touchpoint.natives.actions.UnzipAction#undo(java.util.Map)
+     */
+    @Override
+    public IStatus undo(Map<String, Object> parameters) {
+        return Activator.makeErrorStatus(
+        		"undo not supported for exectutables", null);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/ExecutionFactory.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2009 Motorola
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Diego Madruga (Motorola) - Initial implementation
+ */
+package org.eclipse.sequoyah.pulsar.internal.core.action.execution;
+
+/**
+ * 
+ */
+public class ExecutionFactory {
+
+    /**
+     * @param osName
+     * @param executable
+     * @return
+     */
+    public static ExecutionHandler getExecutionHandler(final String osName,
+            final String executable) {
+
+        String lcOsName = osName.toLowerCase();
+        if (lcOsName.startsWith("mac")) {
+            if (executable.endsWith(".dmg")) {
+                return new MacDmgExecutionHandler(executable);
+            }
+        } else if (lcOsName.startsWith("linux")) {
+            return new LinuxBinaryExecutionHandler(executable);
+        }
+        return new ExecutionHandler(executable);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/ExecutionHandler.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2009 Motorola
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Diego Madruga (Motorola) - Initial implementation
+ */
+package org.eclipse.sequoyah.pulsar.internal.core.action.execution;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+
+import com.nokia.carbide.discovery.ui.Activator;
+
+/**
+ * 
+ */
+public class ExecutionHandler {
+
+    protected String executable;
+
+    /**
+     * @noreference This constructor is not intended to be referenced by
+     *              clients.
+     */
+    public ExecutionHandler(String executable) {
+        this.executable = executable;
+    }
+
+    /**
+     * @return
+     */
+    public IStatus handleExecution() {
+
+        MultiStatus multiStatus;
+
+        IStatus preExecuteStatus;
+        IStatus executeStatus;
+        IStatus posExecuteStatus;
+
+        preExecuteStatus = preExecute();
+        executeStatus = execute();
+        posExecuteStatus = posExecute();
+
+        if (preExecuteStatus.isOK() && executeStatus.isOK()
+                && posExecuteStatus.isOK()) {
+            multiStatus = new MultiStatus(Activator.PLUGIN_ID, IStatus.OK,
+                    new IStatus[] { preExecuteStatus, executeStatus,
+                            posExecuteStatus },
+                    "The process was executed correctly.", null);
+        } else {
+            multiStatus = new MultiStatus(Activator.PLUGIN_ID, IStatus.ERROR,
+                    new IStatus[] { preExecuteStatus, executeStatus,
+                            posExecuteStatus },
+                    "Some errors were found durig the execution.", null);
+        }
+
+        return multiStatus;
+
+    }
+
+    /**
+     * @return
+     */
+    protected IStatus execute() {
+        IStatus status = new Status(IStatus.OK, Activator.PLUGIN_ID, "");
+
+        ProcessBuilder processBuilder = new ProcessBuilder(executable);
+        Process process;
+        try {
+            process = processBuilder.start();
+            process.waitFor();
+        } catch (IOException e) {
+            status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+                    "An I/O error has occurred", e);
+        } catch (InterruptedException e) {
+            status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+                    "The execution process was interrupted", e);
+        }
+
+        return status;
+    }
+
+    /**
+     * @return
+     */
+    protected IStatus posExecute() {
+        return new Status(IStatus.OK, Activator.PLUGIN_ID, "");
+    }
+
+    /**
+     * @return
+     */
+    protected IStatus preExecute() {
+        return new Status(IStatus.OK, Activator.PLUGIN_ID, "");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/LinuxBinaryExecutionHandler.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2009 Motorola
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Diego Madruga (Motorola) - Initial implementation
+ */
+package org.eclipse.sequoyah.pulsar.internal.core.action.execution;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.internal.p2.touchpoint.natives.actions.ActionConstants;
+import org.eclipse.equinox.internal.p2.touchpoint.natives.actions.ChmodAction;
+
+/**
+ * 
+ */
+@SuppressWarnings("restriction")
+public class LinuxBinaryExecutionHandler extends ExecutionHandler {
+
+    /* (non-Javadoc)
+     * @see org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionHandler#preExecute()
+     */
+    @Override
+    public IStatus preExecute() {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put(ActionConstants.PARM_TARGET_DIR, executable.substring(0,
+                executable.lastIndexOf('/')));
+        parameters.put(ActionConstants.PARM_TARGET_FILE, executable.substring(
+                executable.lastIndexOf('/') + 1, executable.length()));
+        parameters.put(ActionConstants.PARM_PERMISSIONS, "777");
+
+        ChmodAction ca = new ChmodAction();
+
+        return ca.execute(parameters);
+    }
+
+    /**
+     * @param executable
+     */
+    public LinuxBinaryExecutionHandler(String executable) {
+        super(executable);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.discovery.ui/src/org/eclipse/sequoyah/pulsar/internal/core/action/execution/MacDmgExecutionHandler.java	Tue Aug 03 11:50:53 2010 -0500
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2009 Motorola
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Diego Madruga (Motorola) - Initial implementation
+ */
+package org.eclipse.sequoyah.pulsar.internal.core.action.execution;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import com.nokia.carbide.discovery.ui.Activator;
+
+/**
+ * 
+ */
+public class MacDmgExecutionHandler extends ExecutionHandler {
+
+    /**
+     * @param executable
+     */
+    public MacDmgExecutionHandler(String executable) {
+        super(executable);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.sequoyah.pulsar.internal.core.action.execution.ExecutionHandler#execute()
+     */
+    @Override
+    protected IStatus execute() {
+        IStatus status = new Status(IStatus.OK, Activator.PLUGIN_ID, "");
+
+        ProcessBuilder processBuilder = new ProcessBuilder("open", executable);
+        Process process;
+        try {
+            process = processBuilder.start();
+            process.waitFor();
+        } catch (IOException e) {
+            status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+                    "An I/O error has occurred", e);
+        } catch (InterruptedException e) {
+            status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+                    "The execution process was interrupted", e);
+        }
+
+        return status;
+    }
+
+}