package at.bestsolution.efxclipse.tooling.pde.ui; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.pde.core.project.IBundleProjectDescription; import org.eclipse.pde.core.project.IPackageImportDescription; import org.eclipse.pde.core.project.IRequiredBundleDescription; public class BundleHelper { public static void addRequiredBundleDescriptions(IBundleProjectDescription bundleDesc, IRequiredBundleDescription... requiredBundles) { IRequiredBundleDescription[] originalDescs = bundleDesc.getRequiredBundles(); if( originalDescs == null ) { originalDescs = new IRequiredBundleDescription[0]; } List<IRequiredBundleDescription> toAdd = new ArrayList<IRequiredBundleDescription>(); toAdd.addAll(Arrays.asList(requiredBundles)); for (IRequiredBundleDescription a : requiredBundles) { for (IRequiredBundleDescription d : originalDescs) { if (a.getName().equals(d.getName())) { toAdd.remove(a); } } } requiredBundles = toAdd.toArray(new IRequiredBundleDescription[0]); //FIXME This is a bug in PDE // IRequiredBundleDescription[] newDescriptions = new IRequiredBundleDescription[originalDescs.length+requiredBundles.length]; // System.arraycopy(originalDescs, 0, newDescriptions, 0, originalDescs.length); // System.arraycopy(requiredBundles, 0, newDescriptions, originalDescs.length, requiredBundles.length); // bundleDesc.setRequiredBundles(requiredBundles); } public static void addPackageImportDescriptions(IBundleProjectDescription bundleDesc, IPackageImportDescription... importedPackages) { IPackageImportDescription[] originalDescs = bundleDesc.getPackageImports(); if( originalDescs == null ) { originalDescs = new IPackageImportDescription[0]; } List<IPackageImportDescription> toAdd = new ArrayList<IPackageImportDescription>(); toAdd.addAll(Arrays.asList(importedPackages)); for (IPackageImportDescription a : importedPackages) { for (IPackageImportDescription d : originalDescs) { if (a.getName().equals(d.getName())) { toAdd.remove(a); } } } IPackageImportDescription[] newDescriptions = new IPackageImportDescription[originalDescs.length+importedPackages.length]; System.arraycopy(originalDescs, 0, newDescriptions, 0, originalDescs.length); System.arraycopy(importedPackages, 0, newDescriptions, originalDescs.length, importedPackages.length); bundleDesc.setPackageImports(newDescriptions); } // public static void addRequiredBundleDescriptions(IBundleProjectDescription bundleDesc, IRequiredBundleDescription... requiredBundles) { // IRequiredBundleDescription[] originalDescs = bundleDesc.getRequiredBundles(); // List<IRequiredBundleDescription> toAdd = new ArrayList<IRequiredBundleDescription>(); // toAdd.addAll(Arrays.asList(requiredBundles)); // // if (originalDescs != null) { // for (IRequiredBundleDescription a : requiredBundles) { // for (IRequiredBundleDescription d : originalDescs) { // // if (a.getName().equals(d.getName())) { // toAdd.remove(a); // } // } // } // } // bundleDesc.setRequiredBundles(toAdd.toArray(new IRequiredBundleDescription[0])); // } // // public static void addPackageImportDescriptions(IBundleProjectDescription bundleDesc, IPackageImportDescription... importedPackages) { // IPackageImportDescription[] originalDescs = bundleDesc.getPackageImports(); // List<IPackageImportDescription> toAdd = new ArrayList<IPackageImportDescription>(); // toAdd.addAll(Arrays.asList(importedPackages)); // // if (originalDescs != null) { // for (IPackageImportDescription a : importedPackages) { // for (IPackageImportDescription d : originalDescs) { // if (a.getName().equals(d.getName())) { // toAdd.remove(a); // } // } // } // } // bundleDesc.setPackageImports(toAdd.toArray(new IPackageImportDescription[0])); // } }