diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java index f711ba9665..93820c5309 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java @@ -3021,6 +3021,12 @@ public class PDEUIMessages extends NLS { public static String OrganizeManifestsWizardPage_unresolvedDependencies; + public static String OrganizeManifestsWizardPage_addMissingVersions; + + public static String OrganizeManifestsWizardPage_addFixedVersions; + + public static String OrganizeManifestsWizardPage_addBundledVersions; + public static String OrganizeManifestsWizardPage_remove; public static String OrganizeManifestsWizardPage_markOptional; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties index a760341473..68151c83b1 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties @@ -2360,6 +2360,9 @@ OrganizeManifestsWizardPage_prefixNL=&Prefix icon paths in plug-in extensions wi OrganizeManifestsOperation_nlIconPath=checking icon paths for missing $nl$ segments... {0} OrganizeManifestsOperation_unusedKeys=checking for unused keys... {0} OrganizeManifestsWizardPage_addMissing=&Ensure that all packages appear in the MANIFEST.MF +OrganizeManifestsWizardPage_addMissingVersions=&Add missing versions to package exports with... +OrganizeManifestsWizardPage_addFixedVersions=&add fixed version (defaults to 1.0.0) +OrganizeManifestsWizardPage_addBundledVersions=&add bundled version OrganizeManifestsProcessor_rootMessage=Organize Manifest for {0} ConvertAutomaticManifestsProcessor_rootMessage=Converting {0}... ConvertAutomaticManifestsProcessor_changeProject=Convert project {0} diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/IOrganizeManifestsSettings.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/IOrganizeManifestsSettings.java index 7c096027e2..843fcc5251 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/IOrganizeManifestsSettings.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/IOrganizeManifestsSettings.java @@ -15,6 +15,8 @@ public interface IOrganizeManifestsSettings { + public static final String PROP_ADD_MISSING_VERSIONS = "OrganizeManifests.ExportedPackages.addMissingVersions"; //$NON-NLS-1$ + public static final String PROP_MISSING_VERSION_OPTIONS = "OrganizeManifests.ExportedPackages.missingVersionOptions"; //$NON-NLS-1$ public static final String PROP_ADD_MISSING = "OrganizeManifests.ExportedPackages.addMissing"; //$NON-NLS-1$ public static final String PROP_MARK_INTERNAL = "OrganizeManifests.ExportedPackages.makeInternal"; //$NON-NLS-1$ public static final String PROP_INTERAL_PACKAGE_FILTER = "OrganizeManifests.ExportedPackages.packageFilter"; //$NON-NLS-1$ diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifest.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifest.java index 83722e92c1..6118950465 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifest.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifest.java @@ -348,6 +348,40 @@ private static final Set getAvailableExportedPackages() { return set; } + public static void addMissingExportVersions(IBundleModel bundle, boolean useFixedVersion, + boolean useBundleVersion) { + ExportPackageHeader header = (ExportPackageHeader) bundle.getBundle() + .getManifestHeader(Constants.EXPORT_PACKAGE); + + if (header == null) { + return; + } + + ExportPackageObject[] packages = header.getPackages(); + String bundleVersion = bundle.getBundle().getHeader(Constants.BUNDLE_VERSION); + + for (ExportPackageObject pkg : packages) { + String version = pkg.getVersion(); + + if (version == null || version.trim().isEmpty()) { + String newVersion = null; + if (useFixedVersion) { + newVersion = "1.0.0"; //$NON-NLS-1$ + } else if (useBundleVersion && bundleVersion != null) { + newVersion = bundleVersion; + } + if (newVersion != null) { + pkg.setVersion(newVersion); + } + } + } + + try { + // bundle.save(null); + } catch (Exception e) { + e.printStackTrace(); + } + } public static void removeUnneededLazyStart(IBundle bundle) { if (!(bundle instanceof Bundle)) { return; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsProcessor.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsProcessor.java index 1e0f1b270e..4635da996e 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsProcessor.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsProcessor.java @@ -53,7 +53,12 @@ public class OrganizeManifestsProcessor extends RefactoringProcessor implements protected boolean fMarkInternal = true; // mark export-package as internal protected String fPackageFilter = VALUE_DEFAULT_FILTER; protected boolean fRemoveUnresolved = true; // remove unresolved - // export-package + protected boolean fAddMissingVersions = true; // add missing versions to + // export packages + protected boolean fMissingVersionOptions = true; // options for fixed or + // bundled versions to + // packages + // export-package protected boolean fCalculateUses = false; // calculate the 'uses' directive // for exported packages protected boolean fModifyDep = true; // modify import-package / @@ -78,6 +83,7 @@ public class OrganizeManifestsProcessor extends RefactoringProcessor implements private IProject fCurrentProject; private boolean fComputeImports; + public OrganizeManifestsProcessor(List projects) { fProjectList = projects; } @@ -351,4 +357,12 @@ public void setAddDependencies(boolean addDependencies) { public void setComputeImports(boolean computeImports) { this.fComputeImports = computeImports; } + + public void setAddMissingVersions(boolean addMissingVersions) { + this.fAddMissingVersions = addMissingVersions; + } + + public void setMissingVersionOptions(boolean missingVersionOptions) { + this.fMissingVersionOptions = missingVersionOptions; + } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsWizardPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsWizardPage.java index 2babe0c8fc..4fd659d639 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsWizardPage.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/tools/OrganizeManifestsWizardPage.java @@ -45,6 +45,9 @@ public class OrganizeManifestsWizardPage extends UserInputWizardPage implements ILaunchingPreferenceConstants, IOrganizeManifestsSettings { + private Button fAddFixedVersions; + private Button fAddBundledVersions; + private Button fAddMissingVersions; private Button fRemoveUnresolved; private Button fCalculateUses; private Button fAddMissing; @@ -164,6 +167,19 @@ private void createExportedPackagesGroup(Composite container) { gd = new GridData(); gd.verticalIndent = 5; fCalculateUses.setLayoutData(gd); + + fAddMissingVersions = new Button(group, SWT.CHECK); + fAddMissingVersions.setText(PDEUIMessages.OrganizeManifestsWizardPage_addMissingVersions); + gd = new GridData(); + gd.verticalIndent = 5; + fAddMissingVersions.setLayoutData(gd); + + fAddFixedVersions = new Button(group, SWT.RADIO); + fAddFixedVersions.setText(PDEUIMessages.OrganizeManifestsWizardPage_addFixedVersions); + + fAddBundledVersions = new Button(group, SWT.RADIO); + fAddBundledVersions.setText(PDEUIMessages.OrganizeManifestsWizardPage_addBundledVersions); + } private void createRequireImportGroup(Composite container) { @@ -226,6 +242,7 @@ private void presetOptions() { fMarkInternal.setSelection(selection); fProcessor.setMarkInternal(selection); + String filter = settings.get(PROP_INTERAL_PACKAGE_FILTER); if (filter == null) { filter = VALUE_DEFAULT_FILTER; @@ -237,6 +254,15 @@ private void presetOptions() { fRemoveUnresolved.setSelection(selection); fProcessor.setRemoveUnresolved(selection); + selection = settings.getBoolean(PROP_ADD_MISSING_VERSIONS); + fAddMissingVersions.setSelection(selection); + fProcessor.setAddMissingVersions(selection); + + selection = settings.getBoolean(PROP_MISSING_VERSION_OPTIONS); + fAddBundledVersions.setSelection(selection); + fAddFixedVersions.setSelection(!selection); + fProcessor.setMissingVersionOptions(selection); + selection = settings.getBoolean(PROP_CALCULATE_USES); fCalculateUses.setSelection(selection); fProcessor.setCalculateUses(selection); @@ -291,6 +317,8 @@ protected void performOk() { settings.put(PROP_REMOVE_UNRESOLVED_EX, !fRemoveUnresolved.getSelection()); settings.put(PROP_CALCULATE_USES, fCalculateUses.getSelection()); + settings.put(PROP_ADD_MISSING_VERSIONS, !fAddMissingVersions.getSelection()); + settings.put(PROP_MODIFY_DEP, !fModifyDependencies.getSelection()); settings.put(PROP_RESOLVE_IMP_MARK_OPT, fOptionalImport.getSelection()); settings.put(PROP_UNUSED_DEPENDENCIES, fUnusedDependencies.getSelection()); @@ -313,10 +341,15 @@ private void setEnabledStates() { boolean modifyDependencies = fModifyDependencies.getSelection(); fRemoveImport.setEnabled(modifyDependencies); fOptionalImport.setEnabled(modifyDependencies); + + boolean addMissingVersions = fAddMissingVersions.getSelection(); + fAddBundledVersions.setEnabled(addMissingVersions); + fAddFixedVersions.setEnabled(addMissingVersions); } private void setButtonArrays() { - fTopLevelButtons = new Button[] { fRemoveUnresolved, fAddMissing, fModifyDependencies, fMarkInternal, + fTopLevelButtons = new Button[] { fRemoveUnresolved, fAddMissing, fAddMissingVersions, fModifyDependencies, + fMarkInternal, fUnusedDependencies, fAdditonalDependencies, fComputeImportPackages, fFixIconNLSPaths, fRemovedUnusedKeys, fRemoveLazy, fRemoveUselessFiles, fCalculateUses }; } @@ -333,7 +366,8 @@ private void setPageComplete() { } private void hookListeners() { - hookSelectionListener(new Button[] { fMarkInternal, fModifyDependencies }, widgetSelectedAdapter(e -> { + hookSelectionListener(new Button[] { fMarkInternal, fModifyDependencies, fAddMissingVersions }, + widgetSelectedAdapter(e -> { setEnabledStates(); doProcessorSetting(e.getSource()); })); @@ -344,6 +378,8 @@ private void hookListeners() { hookSelectionListener(new Button[] { fRemoveImport, fOptionalImport }, widgetSelectedAdapter(e -> doProcessorSetting(e.getSource()))); hookTextListener(new Text[] {fPackageFilter}, e -> doProcessorSetting(e.getSource())); + hookSelectionListener(new Button[] { fAddFixedVersions, fAddBundledVersions }, + widgetSelectedAdapter(e -> doProcessorSetting(e.getSource()))); } private void doProcessorSetting(Object source) { @@ -380,9 +416,16 @@ private void doProcessorSetting(Object source) { fProcessor.setPrefixIconNL(fFixIconNLSPaths.getSelection()); } else if (fRemovedUnusedKeys.equals(source)) { fProcessor.setUnusedKeys(fRemovedUnusedKeys.getSelection()); + } else if (fAddMissingVersions.equals(source)) { + fProcessor.setAddMissingVersions(fAddMissingVersions.getSelection()); + } else if (fAddFixedVersions.equals(source)) { + fProcessor.setMissingVersionOptions(fAddFixedVersions.getSelection()); + } else if (fAddBundledVersions.equals(source)) { + fProcessor.setMissingVersionOptions(fAddBundledVersions.getSelection()); } } + private void hookSelectionListener(Button[] buttons, SelectionListener adapter) { for (Button button : buttons) { button.addSelectionListener(adapter);