# HG changeset patch # User Eugene Ostroukhov # Date 1280425919 25200 # Node ID c278f0c8917f806078dc0995ffc521184255ceaa # Parent 5ff93668b08ca4a6f320bcd5e779b8ce43031524 Refactored packager and deployer interfaces diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.core/schema/packagers.exsd --- a/org.symbian.tools.mtw.core/schema/packagers.exsd Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.core/schema/packagers.exsd Thu Jul 29 10:51:59 2010 -0700 @@ -49,13 +49,13 @@ - + - + diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/internal/runtimes/LazyPackager.java --- a/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/internal/runtimes/LazyPackager.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/internal/runtimes/LazyPackager.java Thu Jul 29 10:51:59 2010 -0700 @@ -29,26 +29,27 @@ import org.symbian.tools.mtw.core.projects.IMTWProject; import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; import org.symbian.tools.mtw.core.runtimes.IPackager; +import org.symbian.tools.mtw.core.runtimes.IPackagerDelegate; public class LazyPackager implements IPackager { private final IConfigurationElement element; - private IPackager packager; + private IPackagerDelegate packager; public LazyPackager(IConfigurationElement element) { this.element = element; } - public File packageApplication(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + public File packageApplication(IMTWProject project, IProgressMonitor monitor) throws CoreException { - return getPackager().packageApplication(project, runtime, monitor); + return getPackager().packageApplication(project, monitor); } - private IPackager getPackager() { + private IPackagerDelegate getPackager() { if (packager == null) { try { - packager = (IPackager) element.createExecutableExtension("class"); + packager = (IPackagerDelegate) element.createExecutableExtension("delegate"); } catch (CoreException e) { - MTWCore.log(String.format("Cannot instantiate %s from plugin %s", element.getAttribute("class"), + MTWCore.log(String.format("Cannot instantiate %s from plugin %s", element.getAttribute("delegate"), element.getDeclaringExtension().getNamespaceIdentifier()), e); throw new RuntimeException(e); } @@ -64,4 +65,19 @@ return getPackager().getFileType(project); } + public IMobileWebRuntime getTargetRuntime() { + String id = element.getAttribute("targetRuntime"); + if (id != null) { + return MTWCore.getDefault().getRuntimesManager().getRuntime(id); + } else { + return getSourceRuntime(); + } + } + + public IMobileWebRuntime getSourceRuntime() { + IMobileWebRuntime runtime = MTWCore.getDefault().getRuntimesManager() + .getRuntime(element.getAttribute("sourceRuntime")); + return runtime; + } + } diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/runtimes/IPackager.java --- a/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/runtimes/IPackager.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/runtimes/IPackager.java Thu Jul 29 10:51:59 2010 -0700 @@ -36,9 +36,9 @@ /** * Synchronously packages application for the specified runtime. * - * @return URI of the application package that can be deployed to targets + * @return {@link File} denoting location of the application package that can be deployed to targets */ - File packageApplication(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + File packageApplication(IMTWProject project, IProgressMonitor monitor) throws CoreException; /** @@ -51,4 +51,13 @@ */ String getFileType(IMTWProject project); + /** + * @return target runtime that this packager packages for + */ + IMobileWebRuntime getTargetRuntime(); + + /** + * @return source runtime. It is the runtime that the project should target to be packaged with this packager. + */ + IMobileWebRuntime getSourceRuntime(); } diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/runtimes/IPackagerDelegate.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/runtimes/IPackagerDelegate.java Thu Jul 29 10:51:59 2010 -0700 @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2010 Symbian Foundation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of the License "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Symbian Foundation - initial contribution. + * Contributors: + * Description: + * Overview: + * Details: + * Platforms/Drives/Compatibility: + * Assumptions/Requirement/Pre-requisites: + * Failures and causes: + */ +package org.symbian.tools.mtw.core.runtimes; + +import java.io.File; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.symbian.tools.mtw.core.projects.IMTWProject; + +/** + * Delegate performs application packaging. + * + * @author Eugene Ostroukhov (eugeneo@symbian.org) + */ +public interface IPackagerDelegate { + /** + * Synchronously packages application for the specified runtime. + * + * @return URI of the application package that can be deployed to targets + */ + File packageApplication(IMTWProject project, IProgressMonitor monitor) throws CoreException; + + /** + * @return application package root-relative path where the workspace resource will be packaged. Can be null. + */ + IPath getPathInPackage(IResource resource); + + /** + * @return file type of the application archive + */ + String getFileType(IMTWProject project); +} diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/utilities/ZipApplicationVisitor.java --- a/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/utilities/ZipApplicationVisitor.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.core/src/org/symbian/tools/mtw/core/utilities/ZipApplicationVisitor.java Thu Jul 29 10:51:59 2010 -0700 @@ -32,7 +32,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.symbian.tools.mtw.core.MTWCore; -import org.symbian.tools.mtw.core.runtimes.IPackager; +import org.symbian.tools.mtw.core.runtimes.IPackagerDelegate; /** * Use this visitor to zip application if the web runtime uses zip archive as application @@ -43,9 +43,9 @@ public class ZipApplicationVisitor implements IResourceVisitor { private static final int DEFAULT_BUFFER_SIZE = 65536; private final ZipOutputStream zipStream; - private final IPackager packager; + private final IPackagerDelegate packager; - public ZipApplicationVisitor(ZipOutputStream zipStream, IPackager packager) { + public ZipApplicationVisitor(ZipOutputStream zipStream, IPackagerDelegate packager) { this.zipStream = zipStream; this.packager = packager; } diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/DeploymentTargetWrapper.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/DeploymentTargetWrapper.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/DeploymentTargetWrapper.java Thu Jul 29 10:51:59 2010 -0700 @@ -28,7 +28,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter2; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; +import org.symbian.tools.mtw.core.runtimes.IPackager; import org.symbian.tools.mtw.ui.deployment.IDeploymentTarget; import org.symbian.tools.mtw.ui.deployment.IDeploymentTargetType; @@ -84,9 +84,9 @@ this.type = type; } - public IStatus deploy(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + public IStatus deploy(IMTWProject project, IPackager packager, IProgressMonitor monitor) throws CoreException { - return target.deploy(project, runtime, monitor); + return target.deploy(project, packager, monitor); } @Override diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/externalapp/ExternalApplicationDeploymentType.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/externalapp/ExternalApplicationDeploymentType.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/internal/deployment/externalapp/ExternalApplicationDeploymentType.java Thu Jul 29 10:51:59 2010 -0700 @@ -30,7 +30,6 @@ import org.eclipse.ui.IMemento; import org.symbian.tools.mtw.core.MTWCore; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; import org.symbian.tools.mtw.core.runtimes.IPackager; import org.symbian.tools.mtw.ui.deployment.IDeploymentTarget; import org.symbian.tools.mtw.ui.deployment.IDeploymentTargetType; @@ -40,11 +39,10 @@ private IMTWProject project; - public IStatus deploy(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + public IStatus deploy(IMTWProject project, IPackager packager, IProgressMonitor monitor) throws CoreException { Program app = getExternalApp(project); - IPackager packager = MTWCore.getDefault().getRuntimesManager().getPackager(project, runtime); - File file = packager.packageApplication(project, runtime, monitor); + File file = packager.packageApplication(project, monitor); if (file != null) { app.execute(file.toString()); return new Status( diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/DeployWizard.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/DeployWizard.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/DeployWizard.java Thu Jul 29 10:51:59 2010 -0700 @@ -26,7 +26,9 @@ import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.statushandlers.StatusManager; +import org.symbian.tools.mtw.core.MTWCore; import org.symbian.tools.mtw.core.projects.IMTWProject; +import org.symbian.tools.mtw.core.runtimes.IPackager; import org.symbian.tools.mtw.internal.deployment.DeployWizardContext; import org.symbian.tools.mtw.internal.deployment.DeploymentTargetWizardPage; import org.symbian.tools.mtw.internal.deployment.DeploymentTargetWrapper; @@ -90,7 +92,8 @@ public IStatus run(IProgressMonitor monitor) { IStatus status; try { - status = target.deploy(project, project.getTargetRuntime(), monitor); + IPackager packager = MTWCore.getDefault().getRuntimesManager().getPackager(project); + status = target.deploy(project, packager, monitor); } catch (CoreException e) { status = e.getStatus(); } diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/IDeploymentTarget.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/IDeploymentTarget.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/IDeploymentTarget.java Thu Jul 29 10:51:59 2010 -0700 @@ -24,7 +24,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.ui.IMemento; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; +import org.symbian.tools.mtw.core.runtimes.IPackager; /** *

This is particular deployment target instance. It can be a Bluetooth phone @@ -74,7 +74,7 @@ * @param runtime runtime that will be used to run packaged application * @param monitor progress monitor to report deployment progress */ - IStatus deploy(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) throws CoreException; + IStatus deploy(IMTWProject project, IPackager packager, IProgressMonitor monitor) throws CoreException; /** * Save project-specific settings to the memento. Workspace-wide settings diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/bluetooth/BluetoothTarget.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/bluetooth/BluetoothTarget.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/mtw/ui/deployment/bluetooth/BluetoothTarget.java Thu Jul 29 10:51:59 2010 -0700 @@ -51,7 +51,6 @@ import org.eclipse.ui.IMemento; import org.symbian.tools.mtw.core.MTWCore; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; import org.symbian.tools.mtw.core.runtimes.IPackager; import org.symbian.tools.mtw.ui.deployment.IDeploymentTarget; @@ -71,16 +70,11 @@ this.provider = provider; } - public IStatus deploy(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + public IStatus deploy(IMTWProject project, IPackager packager, IProgressMonitor monitor) throws CoreException { monitor.beginTask(String.format("Deploying application %s to %s", project.getName(), name), IProgressMonitor.UNKNOWN); - final IPackager packager = MTWCore.getDefault().getRuntimesManager().getPackager(project, runtime); - if (packager == null) { - return new Status(IStatus.ERROR, MTWCore.PLUGIN_ID, String.format("Project %s does not support runtime %s", - project.getName(), runtime.getName())); - } - final File application = packager.packageApplication(project, runtime, new SubProgressMonitor(monitor, 100)); + final File application = packager.packageApplication(project, new SubProgressMonitor(monitor, 100)); try { deployWidget(application, packager.getFileType(project), new SubProgressMonitor(monitor, 10)); } finally { diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.wrttools/plugin.xml --- a/org.symbian.tools.wrttools/plugin.xml Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.wrttools/plugin.xml Thu Jul 29 10:51:59 2010 -0700 @@ -822,7 +822,7 @@ diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/Emulator.java --- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/Emulator.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/deploy/emulator/Emulator.java Thu Jul 29 10:51:59 2010 -0700 @@ -31,9 +31,7 @@ import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.Status; import org.eclipse.ui.IMemento; -import org.symbian.tools.mtw.core.MTWCore; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; import org.symbian.tools.mtw.core.runtimes.IPackager; import org.symbian.tools.mtw.ui.deployment.IDeploymentTarget; import org.symbian.tools.wrttools.Activator; @@ -97,17 +95,15 @@ return path; } - public IStatus deploy(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) + public IStatus deploy(IMTWProject project, IPackager packager, IProgressMonitor monitor) throws CoreException { - final IPackager packager = MTWCore.getDefault().getRuntimesManager().getPackager(project, runtime); - File application = packager.packageApplication(project, runtime, monitor); - - File outputFile = new File(path); + final File application = packager.packageApplication(project, monitor); + final File outputFile = new File(path); if (!outputFile.isDirectory()) { outputFile.mkdir(); } - File out = new File(outputFile + "/" + application.getName()); //$NON-NLS-1$ + final File out = new File(outputFile + "/" + application.getName()); //$NON-NLS-1$ deployWidget(application, out); return new Status( IStatus.OK, diff -r 5ff93668b08c -r c278f0c8917f org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/packager/WrtPackager.java --- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/packager/WrtPackager.java Thu Jul 29 10:00:34 2010 -0700 +++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/core/packager/WrtPackager.java Thu Jul 29 10:51:59 2010 -0700 @@ -30,15 +30,13 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.symbian.tools.mtw.core.projects.IMTWProject; -import org.symbian.tools.mtw.core.runtimes.IMobileWebRuntime; -import org.symbian.tools.mtw.core.runtimes.IPackager; +import org.symbian.tools.mtw.core.runtimes.IPackagerDelegate; import org.symbian.tools.mtw.core.utilities.ZipApplicationVisitor; import org.symbian.tools.wrttools.Activator; import org.symbian.tools.wrttools.util.ProjectUtils; -public class WrtPackager implements IPackager { - public File packageApplication(IMTWProject project, IMobileWebRuntime runtime, IProgressMonitor monitor) - throws CoreException { +public class WrtPackager implements IPackagerDelegate { + public File packageApplication(IMTWProject project, IProgressMonitor monitor) throws CoreException { monitor.beginTask(String.format("Packaging %s", project.getName()), IProgressMonitor.UNKNOWN); IPath stateLocation = Activator.getDefault().getStateLocation();