@Override
 protected void doPaste(Object targetObject, Object[] sourceObjects) {
   // Get the model
   IBundleModel model = getBundleModel();
   // Ensure the model is defined
   if (model == null) {
     return;
   }
   // Get the bundle
   IBundle bundle = model.getBundle();
   // Paste all source objects
   for (Object sourceObject : sourceObjects) {
     if (sourceObject instanceof ExportPackageObject) {
       ExportPackageObject exportPackageObject = (ExportPackageObject) sourceObject;
       // Export package object
       // Adjust all the source object transient field values to
       // acceptable values
       exportPackageObject.reconnect(model, fHeader, getVersionAttribute());
       // Add the object to the header
       if (fHeader == null) {
         // Export package header not defined yet
         // Define one
         // Value will get inserted into a new export package object
         // created by a factory
         // Value needs to be empty string so no export package
         // object is created as the initial value
         bundle.setHeader(getExportedPackageHeader(), ""); // $NON-NLS-1$
       }
       // Add the export package to the header
       fHeader.addPackage(exportPackageObject);
     }
   }
 }
 private HashMap<?, ?> createCurrentExportPackageMap() {
   // Dummy hash map created in order to return a defined but empty map
   HashMap<?, ?> packageFragments = new HashMap<>(0);
   // Get the model
   IPluginModelBase model = getModel();
   // Ensure model is defined
   if (model == null) {
     return packageFragments;
   }
   // Get the underlying resource
   IResource resource = model.getUnderlyingResource();
   // Ensure resource is defined
   if (resource == null) {
     return packageFragments;
   }
   // Get the project
   IProject project = resource.getProject();
   // Ensure the project is defined
   if (project == null) {
     return packageFragments;
   }
   // Ensure the project is a Java project
   try {
     if (project.hasNature(JavaCore.NATURE_ID) == false) {
       return packageFragments;
     }
   } catch (CoreException e) {
     return packageFragments;
   }
   // Get the Java project
   IJavaProject javaProject = JavaCore.create(project);
   // Ensure the Java project is defined
   if (javaProject == null) {
     return packageFragments;
   }
   // Get the current packages associated with the export package header
   Vector<?> currentExportPackages = null;
   if (fHeader == null) {
     currentExportPackages = new Vector<>();
   } else {
     currentExportPackages = fHeader.getPackageNames();
   }
   // Get a hashtable of all the package fragments that are allowed to
   // be added to the current export package header
   // Generally, all package fragments contained in the same Java project
   // as the plugin manifest file
   // No duplicates are allowed and all current packages are excluded
   return PDEJavaHelper.getPackageFragmentsHash(
       javaProject, currentExportPackages, allowJavaPackages());
 }
 private void handleAdd() {
   IPluginModelBase model = (IPluginModelBase) getPage().getModel();
   final IProject project = model.getUnderlyingResource().getProject();
   try {
     if (project.hasNature(JavaCore.NATURE_ID)) {
       ILabelProvider labelProvider = new JavaElementLabelProvider();
       final ConditionalListSelectionDialog dialog =
           new ConditionalListSelectionDialog(
               PDEPlugin.getActiveWorkbenchShell(),
               labelProvider,
               PDEUIMessages.ExportPackageSection_dialogButtonLabel);
       final Collection<?> pckgs = fHeader == null ? new Vector<>() : fHeader.getPackageNames();
       final boolean allowJava =
           "true".equals(getBundle().getHeader(ICoreConstants.ECLIPSE_JREBUNDLE)); // $NON-NLS-1$
       Runnable runnable =
           new Runnable() {
             @Override
             public void run() {
               ArrayList<IPackageFragment> elements = new ArrayList<>();
               ArrayList<IPackageFragment> conditional = new ArrayList<>();
               IPackageFragment[] fragments =
                   PDEJavaHelper.getPackageFragments(JavaCore.create(project), pckgs, allowJava);
               for (IPackageFragment fragment : fragments) {
                 try {
                   if (fragment.containsJavaResources()) {
                     elements.add(fragment);
                   } else {
                     conditional.add(fragment);
                   }
                 } catch (JavaModelException e) {
                 }
               }
               dialog.setElements(elements.toArray());
               dialog.setConditionalElements(conditional.toArray());
               dialog.setMultipleSelection(true);
               dialog.setMessage(PDEUIMessages.PackageSelectionDialog_label);
               dialog.setTitle(PDEUIMessages.ExportPackageSection_title);
               dialog.create();
               PlatformUI.getWorkbench()
                   .getHelpSystem()
                   .setHelp(dialog.getShell(), IHelpContextIds.EXPORT_PACKAGES);
               SWTUtil.setDialogSize(dialog, 400, 500);
             }
           };
       BusyIndicator.showWhile(Display.getCurrent(), runnable);
       if (dialog.open() == Window.OK) {
         Object[] selected = dialog.getResult();
         if (fHeader != null) {
           for (Object selectedObject : selected) {
             IPackageFragment candidate = (IPackageFragment) selectedObject;
             fHeader.addPackage(
                 new ExportPackageObject(fHeader, candidate, getVersionAttribute()));
           }
         } else {
           getBundle().setHeader(getExportedPackageHeader(), getValue(selected));
           // the way events get triggered, updateButtons isn't called
           if (selected.length > 0) getTablePart().setButtonEnabled(CALCULATE_USE_INDEX, true);
         }
       }
       labelProvider.dispose();
     }
   } catch (CoreException e) {
   }
 }
 private void handleRemove() {
   Object[] removed = ((IStructuredSelection) fPackageViewer.getSelection()).toArray();
   for (Object removedObject : removed) {
     fHeader.removePackage((PackageObject) removedObject);
   }
 }