/* (non-Javadoc)
   * @see org.eclipse.ui.internal.wizards.preferences.WizardPreferencesPage#getTransfers()
   */
  protected PreferenceTransferElement[] getTransfers() {
    if (validFromFile()) {
      FileInputStream fis;

      try {
        fis = new FileInputStream(getDestinationValue());
      } catch (FileNotFoundException e) {
        WorkbenchPlugin.log(e.getMessage(), e);
        return new PreferenceTransferElement[0];
      }
      IPreferencesService service = Platform.getPreferencesService();
      try {
        IExportedPreferences prefs;
        prefs = service.readPreferences(fis);
        PreferenceTransferElement[] transfers = super.getTransfers();
        IPreferenceFilter[] filters = new IPreferenceFilter[transfers.length];
        for (int i = 0; i < transfers.length; i++) {
          PreferenceTransferElement transfer = transfers[i];
          filters[i] = transfer.getFilter();
        }
        IPreferenceFilter[] matches = service.matches(prefs, filters);
        PreferenceTransferElement[] returnTransfers = new PreferenceTransferElement[matches.length];
        int index = 0;
        for (int i = 0; i < matches.length; i++) {
          IPreferenceFilter filter = matches[i];
          for (int j = 0; j < transfers.length; j++) {
            PreferenceTransferElement element = transfers[j];
            if (element.getFilter().equals(filter)) {
              returnTransfers[index++] = element;
            }
          }
        }

        PreferenceTransferElement[] destTransfers = new PreferenceTransferElement[index];
        System.arraycopy(returnTransfers, 0, destTransfers, 0, index);
        return destTransfers;
      } catch (CoreException e) {
        // Do not log core exceptions, they indicate the chosen file is not valid
        // WorkbenchPlugin.log(e.getMessage(), e);
      } finally {
        try {
          fis.close();
        } catch (IOException e) {
          WorkbenchPlugin.log(e.getMessage(), e);
        }
      }
    }

    return new PreferenceTransferElement[0];
  }
  /**
   * @param filters
   * @return <code>true</code> if the transfer was succesful, and <code>false</code> otherwise
   */
  protected boolean transfer(IPreferenceFilter[] filters) {
    File importFile = new File(getDestinationValue());
    FileInputStream fis = null;
    try {
      if (filters.length > 0) {
        try {
          fis = new FileInputStream(importFile);
        } catch (FileNotFoundException e) {
          WorkbenchPlugin.log(e.getMessage(), e);
          MessageDialog.open(
              MessageDialog.ERROR,
              getControl().getShell(),
              new String(),
              e.getLocalizedMessage(),
              SWT.SHEET);
          return false;
        }
        IPreferencesService service = Platform.getPreferencesService();
        try {
          IExportedPreferences prefs = service.readPreferences(fis);

          service.applyPreferences(prefs, filters);
        } catch (CoreException e) {
          WorkbenchPlugin.log(e.getMessage(), e);
          MessageDialog.open(
              MessageDialog.ERROR,
              getControl().getShell(),
              new String(),
              e.getLocalizedMessage(),
              SWT.SHEET);
          return false;
        }
      }
    } finally {
      if (fis != null) {
        try {
          fis.close();
        } catch (IOException e) {
          WorkbenchPlugin.log(e.getMessage(), e);
          MessageDialog.open(
              MessageDialog.ERROR,
              getControl().getShell(),
              new String(),
              e.getLocalizedMessage(),
              SWT.SHEET);
        }
      }
    }
    return true;
  }