@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);
     }
   }
 }
 @Override
 protected boolean canPaste(Object targetObject, Object[] sourceObjects) {
   HashMap<?, ?> currentPackageFragments = null;
   // Only export package objects that represent existing package
   // fragments within the Java project that this plugin.xml is stored
   // can be pasted
   for (Object sourceObject : sourceObjects) {
     // Only export package objects are allowed
     if ((sourceObject instanceof ExportPackageObject) == false) {
       return false;
     }
     // Get the package fragments that are allowed and store them to
     // assist in searching
     if (currentPackageFragments == null) {
       currentPackageFragments = createCurrentExportPackageMap();
     }
     // Only export packages that are in the list of allowed package
     // fragments are allowed
     ExportPackageObject exportPackageObject = (ExportPackageObject) sourceObject;
     if (currentPackageFragments.containsKey(exportPackageObject.getName()) == false) {
       return false;
     }
   }
   return true;
 }
  private boolean shouldEnableProperties(Object[] selected) {
    if (selected.length == 0) return false;
    if (selected.length == 1) return true;

    String version = ((ExportPackageObject) selected[0]).getVersion();
    for (int i = 1; i < selected.length; i++) {
      ExportPackageObject object = (ExportPackageObject) selected[i];
      if (version == null) {
        if (object.getVersion() != null) {
          return false;
        }
      } else if (!version.equals(object.getVersion())) {
        return false;
      }
    }
    return true;
  }
 private void handleOpenProperties() {
   Object[] selected = ((IStructuredSelection) fPackageViewer.getSelection()).toArray();
   ExportPackageObject first = (ExportPackageObject) selected[0];
   DependencyPropertiesDialog dialog = new DependencyPropertiesDialog(isEditable(), first);
   dialog.create();
   PlatformUI.getWorkbench()
       .getHelpSystem()
       .setHelp(dialog.getShell(), IHelpContextIds.EXPORTED_PACKAGE_PROPERTIES);
   SWTUtil.setDialogSize(dialog, 400, -1);
   if (selected.length == 1) dialog.setTitle(((ExportPackageObject) selected[0]).getName());
   else dialog.setTitle(PDEUIMessages.ExportPackageSection_props);
   if (dialog.open() == Window.OK && isEditable()) {
     String newVersion = dialog.getVersion();
     for (Object selectedObject : selected) {
       ExportPackageObject object = (ExportPackageObject) selectedObject;
       if (!newVersion.equals(object.getVersion())) object.setVersion(newVersion);
     }
   }
 }