diff options
author | Cédric Bosdonnat <cedricbosdo@openoffice.org> | 2010-11-30 22:25:47 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedricbosdo@openoffice.org> | 2010-11-30 22:25:47 +0100 |
commit | 6f25a7248561976c60be27255797b8b440d6efae (patch) | |
tree | ce84455d3db4191b5824457335e71c079ffedaac | |
parent | d907aafe0fce19a3b50bf9c073545f4e95681852 (diff) |
[Core] Shared some code between the export wizard and oolaunch
4 files changed, 120 insertions, 108 deletions
diff --git a/core/source/org/openoffice/ide/eclipse/core/gui/PackageContentSelector.java b/core/source/org/openoffice/ide/eclipse/core/gui/PackageContentSelector.java index b1194b6..3271a16 100644 --- a/core/source/org/openoffice/ide/eclipse/core/gui/PackageContentSelector.java +++ b/core/source/org/openoffice/ide/eclipse/core/gui/PackageContentSelector.java @@ -30,6 +30,7 @@ ************************************************************************/ package org.openoffice.ide.eclipse.core.gui; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -50,9 +51,13 @@ import org.eclipse.ui.internal.ide.dialogs.ResourceTreeAndListGroup; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.openoffice.ide.eclipse.core.PluginLogger; +import org.openoffice.ide.eclipse.core.internal.helpers.UnoidlProjectHelper; import org.openoffice.ide.eclipse.core.model.IUnoidlProject; import org.openoffice.ide.eclipse.core.model.ProjectsManager; +import org.openoffice.ide.eclipse.core.model.language.ILanguageBuilder; +import org.openoffice.ide.eclipse.core.model.utils.SystemHelper; import org.openoffice.ide.eclipse.core.utils.FilesFinder; +import org.openoffice.plugin.core.model.UnoPackage; /** * Common helper GUI part to select elements to add in the UNO package to be exported. @@ -64,6 +69,7 @@ import org.openoffice.ide.eclipse.core.utils.FilesFinder; public class PackageContentSelector extends Composite { private ResourceTreeAndListGroup mResourceGroup; + private IUnoidlProject mProject; /** * Constructor based on SWT composite's one. @@ -90,22 +96,22 @@ public class PackageContentSelector extends Composite { * * @param pPrj the project to show. */ - public void setProject(IProject pPrj) { - mResourceGroup.setRoot( pPrj ); + public void setProject(IUnoidlProject pPrj) { + mProject = pPrj; + IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( mProject.getName() ); + mResourceGroup.setRoot( prj ); } /** - * Populate the resource view with some fresh data. - * - * @param pSelectedProject the UNO project for which to show the resources + * Populate the resource view with some default data (mainly the XCU / XCS files). */ - public void loadData( IUnoidlProject pSelectedProject ) { + public void loadDefaults( ) { // Select the XCU / XCS files by default - IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( pSelectedProject.getName() ); + IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( mProject.getName() ); FilesFinder finder = new FilesFinder( new String[] { IUnoidlProject.XCU_EXTENSION, IUnoidlProject.XCS_EXTENSION } ); try { - finder.addExclude( pSelectedProject.getDistFolder().getFullPath() ); + finder.addExclude( mProject.getDistFolder().getFullPath() ); prj.accept( finder ); } catch (CoreException e) { PluginLogger.error("Could not visit the project's content.", e); @@ -137,6 +143,52 @@ public class PackageContentSelector extends Composite { } /** + * Convenience method to create and populate the UnoPackage. + * + * @param pProject the project to export + * @param pDestFile the file to export to + * @param pResources the files and folder to add to the OXT + * + * @return the populated package model + * + * @throws Exception if anything goes wrong. + */ + public static UnoPackage createPackage( IUnoidlProject pProject, File pDestFile, + List<?> pResources ) throws Exception { + UnoPackage pack = null; + + File prjFile = SystemHelper.getFile( pProject ); + + // Export the library + IFile library = null; + ILanguageBuilder langBuilder = pProject.getLanguage().getLanguageBuidler(); + library = langBuilder.createLibrary( pProject ); + + // Create the package model + pack = UnoidlProjectHelper.createMinimalUnoPackage( pProject, pDestFile ); + pack.addToClean( SystemHelper.getFile( library ) ); + + IFile descrFile = pProject.getFile( IUnoidlProject.DESCRIPTION_FILENAME ); + if ( descrFile.exists() ) { + File resFile = SystemHelper.getFile( descrFile ); + pack.addContent( UnoPackage.getPathRelativeToBase( resFile, prjFile ), + resFile ); + } + + // Add the additional content to the package + for (Object item : pResources) { + if ( item instanceof IResource ) { + File resFile = SystemHelper.getFile( (IResource)item ); + pack.addContent( UnoPackage.getPathRelativeToBase( resFile, prjFile ), + resFile ); + } + } + + + return pack; + } + + /** * @param pResourceType the type of the resources to return by the provider. * * @return a content provider for <code>IResource</code>s that returns diff --git a/core/source/org/openoffice/ide/eclipse/core/launch/office/OfficeLaunchDelegate.java b/core/source/org/openoffice/ide/eclipse/core/launch/office/OfficeLaunchDelegate.java index b6bf935..89b12b3 100644 --- a/core/source/org/openoffice/ide/eclipse/core/launch/office/OfficeLaunchDelegate.java +++ b/core/source/org/openoffice/ide/eclipse/core/launch/office/OfficeLaunchDelegate.java @@ -33,11 +33,11 @@ package org.openoffice.ide.eclipse.core.launch.office; import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
-import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -50,15 +50,12 @@ import org.eclipse.debug.core.model.LaunchConfigurationDelegate; import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.openoffice.ide.eclipse.core.PluginLogger;
-import org.openoffice.ide.eclipse.core.internal.helpers.UnoidlProjectHelper;
-import org.openoffice.ide.eclipse.core.internal.model.UnoidlProject;
+import org.openoffice.ide.eclipse.core.gui.PackageContentSelector;
import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
import org.openoffice.ide.eclipse.core.model.ProjectsManager;
import org.openoffice.ide.eclipse.core.model.config.IOOo;
import org.openoffice.ide.eclipse.core.model.config.NullExtraOptionsProvider;
-import org.openoffice.ide.eclipse.core.model.language.ILanguageBuilder;
import org.openoffice.ide.eclipse.core.model.utils.SystemHelper;
-import org.openoffice.ide.eclipse.core.utils.FilesFinder;
import org.openoffice.plugin.core.model.UnoPackage;
/**
@@ -91,7 +88,7 @@ public class OfficeLaunchDelegate extends LaunchConfigurationDelegate { return;
}
- String prjName = pConfiguration.getAttribute(IOfficeLaunchConstants.PROJECT_NAME, ""); //$NON-NLS-1$
+ String prjName = pConfiguration.getAttribute(IOfficeLaunchConstants.PROJECT_NAME, new String() );
boolean useCleanUserInstalation = pConfiguration.getAttribute(
IOfficeLaunchConstants.CLEAN_USER_INSTALLATION, false);
@@ -105,7 +102,8 @@ public class OfficeLaunchDelegate extends LaunchConfigurationDelegate { userInstallation = userInstallationFolder.getLocation();
}
- File destFile = exportComponent(pMonitor, prj);
+ List<IResource> resources = PackageConfigTab.getResources( pConfiguration );
+ File destFile = exportComponent( prj, resources );
pMonitor.worked(1);
// Try to source ooenv if it exists
@@ -191,51 +189,26 @@ public class OfficeLaunchDelegate extends LaunchConfigurationDelegate { }
/**
- * Will bild and export the .oxt file.
+ * Will build and export the .oxt file.
*
- * @param pMonitor
- * a monitor to report progress to.
* @param pPrj
- * te target project.
+ * the target project.
+ * @param pResources
+ * the resources to add to the package
+ *
* @return the file containing the .oxt file.
* @throws Exception
* if something goes wrong.
*/
- private File exportComponent(IProgressMonitor pMonitor, IUnoidlProject pPrj) throws Exception {
-
- // TODO Repair this one!
-// ILanguageBuilder langBuilder = pPrj.getLanguage().getLanguageBuidler();
-// IPath libraryPath = langBuilder.createLibrary(pPrj);
-//
-// IFolder distFolder = pPrj.getFolder(pPrj.getDistPath());
-//
-// File destFile = distFolder.getFile(pPrj.getName() + ".oxt").getLocation().toFile();
-// UnoPackage pack = UnoidlProjectHelper.createMinimalUnoPackage(pPrj, destFile);
-// pack.addToClean(libraryPath);
-//
-// // FIXME this code is duplicated.
-// IFile descrFile = pPrj.getFile(IUnoidlProject.DESCRIPTION_FILENAME);
-// if (descrFile.exists()) {
-// pack.addContent(descrFile);
-// }
-//
-// // Select the XCU / XCS files by default
-// FilesFinder finder = new FilesFinder(
-// new String[] { IUnoidlProject.XCU_EXTENSION, IUnoidlProject.XCS_EXTENSION });
-// finder.addExclude(pPrj.getDistFolder().getFullPath());
-// try {
-// ((UnoidlProject) pPrj).getProject().accept(finder);
-// } catch (CoreException e) {
-// // Nothing to log here
-// }
-// ArrayList<IFile> files = finder.getResults();
-// for (IFile aFile : files) {
-// pack.addContent(aFile);
-// }
-//
-// pack.close(pMonitor);
-// return destFile;
- return null;
+ private File exportComponent(IUnoidlProject pPrj, List<IResource> pResources) throws Exception {
+
+ IFolder distFolder = pPrj.getFolder(pPrj.getDistPath());
+ File destFile = distFolder.getFile(pPrj.getName() + ".oxt").getLocation().toFile();
+
+ UnoPackage pack = PackageContentSelector.createPackage( pPrj, destFile, pResources );
+
+ pack.close( );
+ return destFile;
}
}
diff --git a/core/source/org/openoffice/ide/eclipse/core/launch/office/PackageConfigTab.java b/core/source/org/openoffice/ide/eclipse/core/launch/office/PackageConfigTab.java index b463f44..a27d535 100644 --- a/core/source/org/openoffice/ide/eclipse/core/launch/office/PackageConfigTab.java +++ b/core/source/org/openoffice/ide/eclipse/core/launch/office/PackageConfigTab.java @@ -62,6 +62,35 @@ public class PackageConfigTab extends AbstractLaunchConfigurationTab { PackageContentSelector mContentSelector; /** + * Get the selected resources stored in a launch configuration. + * + * @param pConfiguration the configuration to extract the infos from + * + * @return the list of resources extracted + * + * @throws CoreException if any of the needed properties is missing in + * the launch configuration + */ + public static List<IResource> getResources( ILaunchConfiguration pConfiguration ) throws CoreException { + ArrayList<IResource> selected = new ArrayList<IResource>(); + + String prjName = pConfiguration.getAttribute( IOfficeLaunchConstants.PROJECT_NAME, new String() ); + IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( prjName ); + + String paths = pConfiguration.getAttribute( IOfficeLaunchConstants.CONTENT_PATHS, new String() ); + String[] pathsItems = paths.split( IOfficeLaunchConstants.PATHS_SEPARATOR ); + + for (String path : pathsItems) { + IResource res = prj.findMember( path ); + if ( res != null ) { + selected.add( res ); + } + } + + return selected; + } + + /** * {@inheritDoc} */ public void createControl(Composite pParent) { @@ -89,28 +118,19 @@ public class PackageConfigTab extends AbstractLaunchConfigurationTab { public Image getImage() { return OOEclipsePlugin.getImage(ImagesConstants.PACKAGE_CONTENT); } - + /** * {@inheritDoc} */ public void initializeFrom(ILaunchConfiguration pConfiguration) { try { String prjName = pConfiguration.getAttribute( IOfficeLaunchConstants.PROJECT_NAME, new String() ); - IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( prjName ); - mContentSelector.setProject( prj ); + mContentSelector.setProject( ProjectsManager.getProject( prjName ) ); - String paths = pConfiguration.getAttribute( IOfficeLaunchConstants.CONTENT_PATHS, new String() ); - if ( paths.isEmpty() ) { - mContentSelector.loadData( ProjectsManager.getProject( prjName ) ); + List<IResource> selected = getResources( pConfiguration ); + if ( selected.isEmpty() ) { + mContentSelector.loadDefaults(); } else { - String[] pathsItems = paths.split( IOfficeLaunchConstants.PATHS_SEPARATOR ); - ArrayList<IResource> selected = new ArrayList<IResource>(); - for (String path : pathsItems) { - IResource res = prj.findMember( path ); - if ( res != null ) { - selected.add( res ); - } - } mContentSelector.setSelected( selected ); } } catch (CoreException e) { @@ -144,10 +164,9 @@ public class PackageConfigTab extends AbstractLaunchConfigurationTab { try { String prjName = pConfiguration.getAttribute( IOfficeLaunchConstants.PROJECT_NAME, new String() ); if ( !prjName.isEmpty() ) { - IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( prjName ); - mContentSelector.setProject( prj ); + mContentSelector.setProject( ProjectsManager.getProject( prjName ) ); - mContentSelector.loadData( ProjectsManager.getProject( prjName ) ); + mContentSelector.loadDefaults(); } } catch (CoreException e) { // Don't do anything in that case diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java index 17be342..7c1a624 100644 --- a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java +++ b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java @@ -32,9 +32,7 @@ package org.openoffice.ide.eclipse.core.wizards.pages; import java.io.File; import java.text.MessageFormat; -import java.util.List; -import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -59,12 +57,9 @@ import org.openoffice.ide.eclipse.core.OOEclipsePlugin; import org.openoffice.ide.eclipse.core.PluginLogger; import org.openoffice.ide.eclipse.core.gui.PackageContentSelector; import org.openoffice.ide.eclipse.core.i18n.ImagesConstants; -import org.openoffice.ide.eclipse.core.internal.helpers.UnoidlProjectHelper; import org.openoffice.ide.eclipse.core.model.IUnoidlProject; import org.openoffice.ide.eclipse.core.model.ProjectsManager; import org.openoffice.ide.eclipse.core.model.config.IOOo; -import org.openoffice.ide.eclipse.core.model.language.ILanguageBuilder; -import org.openoffice.ide.eclipse.core.model.utils.SystemHelper; import org.openoffice.ide.eclipse.core.wizards.Messages; import org.openoffice.plugin.core.model.UnoPackage; @@ -150,7 +145,7 @@ public class UnoPackageExportPage extends WizardPage { i++; } - mContentSelector.loadData( mSelectedProject ); + mContentSelector.loadDefaults( ); restoreWidgetValues(); } @@ -183,7 +178,6 @@ public class UnoPackageExportPage extends WizardPage { public void modifyText(ModifyEvent pE) { int id = mProjectsList.getSelectionIndex(); - IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( mSelectedProject.getName() ); if ( id != -1 ) { String name = mProjectsList.getItem( id ); IUnoidlProject unoprj = ProjectsManager.getProject( name ); @@ -191,8 +185,7 @@ public class UnoPackageExportPage extends WizardPage { // Change the project in the manifest page mManifestPage.setProject( unoprj ); - - mContentSelector.setProject( prj ); + mContentSelector.setProject( unoprj ); } setPageComplete( checkPageCompletion() ); @@ -349,33 +342,8 @@ public class UnoPackageExportPage extends WizardPage { } if ( doit ) { - File prjFile = SystemHelper.getFile( mSelectedProject ); - - // Export the library - IFile library = null; - ILanguageBuilder langBuilder = mSelectedProject.getLanguage().getLanguageBuidler(); - library = langBuilder.createLibrary( mSelectedProject ); - - // Create the package model - pack = UnoidlProjectHelper.createMinimalUnoPackage( mSelectedProject, destFile ); - pack.addToClean( SystemHelper.getFile( library ) ); - - IFile descrFile = mSelectedProject.getFile( IUnoidlProject.DESCRIPTION_FILENAME ); - if ( descrFile.exists() ) { - File resFile = SystemHelper.getFile( descrFile ); - pack.addContent( UnoPackage.getPathRelativeToBase( resFile, prjFile ), - resFile ); - } - - // Add the additional content to the package - List<?> items = mContentSelector.getSelected(); - for (Object item : items) { - if ( item instanceof IResource ) { - File resFile = SystemHelper.getFile( (IResource)item ); - pack.addContent( UnoPackage.getPathRelativeToBase( resFile, prjFile ), - resFile ); - } - } + pack = PackageContentSelector.createPackage( mSelectedProject, destFile, + mContentSelector.getSelected()); // Run the deployer if ( mAutodeployBox.getSelection() ) { |