Package org.eclipse.ui.internal.registry

Source Code of org.eclipse.ui.internal.registry.PreferenceTransferRegistryReader

/*******************************************************************************
* Copyright (c) 2005, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/

package org.eclipse.ui.internal.registry;

import com.ibm.icu.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.PreferenceFilterEntry;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.preferences.PreferenceTransferElement;

/**
* Preference Transfer registry reader to read extenders of the
* preferenceTranser schema.
*
* @since 3.1
*/
public class PreferenceTransferRegistryReader extends RegistryReader {
  private List preferenceTransfers;

  private String pluginPoint;

  /**
   * Create an instance of this class.
   *
   * @param pluginPointId
   *            java.lang.String
   */
  public PreferenceTransferRegistryReader(String pluginPointId) {
    pluginPoint = pluginPointId;
  }



  /**
   * Returns a new PreferenceTransferElement configured according to the
   * parameters contained in the passed Registry.
   *
   * May answer null if there was not enough information in the Extension to
   * create an adequate wizard
   */
  protected PreferenceTransferElement createPreferenceTransferElement(
      IConfigurationElement element) {
    // PreferenceTransfers must have a name and class attribute
    if (element.getAttribute(IWorkbenchRegistryConstants.ATT_NAME) == null) {
      logMissingAttribute(element, IWorkbenchRegistryConstants.ATT_NAME);
      return null;
    }

    // must specifiy a mapping
    if (element.getChildren(IWorkbenchRegistryConstants.TAG_MAPPING) == null) {
      logMissingElement(element, IWorkbenchRegistryConstants.TAG_MAPPING);
      return null;
    }

    return new PreferenceTransferElement(element);
  }

  /**
   * Returns a sorted list of preference transfers.
   *
   * @return an array of <code>IPreferenceTransfer</code> objects
   */
  public PreferenceTransferElement[] getPreferenceTransfers() {
    readPreferenceTransfers();
    PreferenceTransferElement[] transfers = new PreferenceTransferElement[preferenceTransfers
        .size()];
    Collections.sort(preferenceTransfers, new Comparator() {
      public int compare(Object o1, Object o2) {
        String name1 = ((PreferenceTransferElement) o1).getName();
        String name2 = ((PreferenceTransferElement) o2).getName();

        return Collator.getInstance().compare(name1, name2);
      }
    });
    preferenceTransfers.toArray(transfers);
    return transfers;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.internal.registry.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
   */
  protected boolean readElement(IConfigurationElement element) {
    if (element.getName().equals(IWorkbenchRegistryConstants.TAG_TRANSFER)) {

      PreferenceTransferElement transfer = createPreferenceTransferElement(element);
      if (transfer != null)
        preferenceTransfers.add(transfer);
      return true;
    }

    // Allow settings transfers as well.

    return element.getName().equals(
        IWorkbenchRegistryConstants.TAG_SETTINGS_TRANSFER);
  }

  /**
   * Reads the wizards in a registry.
   */
  protected void readPreferenceTransfers() {
    preferenceTransfers = new ArrayList();
    IExtensionRegistry registry = Platform.getExtensionRegistry();
    readRegistry(registry, WorkbenchPlugin.PI_WORKBENCH, pluginPoint);
  }

  /**
   * Get the preference mappings.
   *
   * @param configElement
   * @return the child configuration elements
   */
  public static IConfigurationElement[] getMappings(
      IConfigurationElement configElement) {
    IConfigurationElement[] children = configElement
        .getChildren(IWorkbenchRegistryConstants.TAG_MAPPING);
    if (children.length < 1) {
      logMissingElement(configElement,
          IWorkbenchRegistryConstants.TAG_MAPPING);
      return null;
    }
    return children;
  }

  /**
   * @param element
   * @return the scope attribute for this element
   */
  public static String getScope(IConfigurationElement element) {
    return element.getAttribute(IWorkbenchRegistryConstants.ATT_SCOPE);
  }

  /**
   * @param element
   * @return the maps mapping nodes to keys for this element
   */
  public static Map getEntry(IConfigurationElement element) {
    IConfigurationElement[] entries = element
        .getChildren(IWorkbenchRegistryConstants.TAG_ENTRY);
    if (entries.length == 0) {
      return null;
    }
    Map map = new HashMap(entries.length);
    for (int i = 0; i < entries.length; i++) {
      IConfigurationElement entry = entries[i];
      IConfigurationElement[] keys = entry
          .getChildren(IWorkbenchRegistryConstants.ATT_KEY);
      PreferenceFilterEntry[] prefFilters = null;
      if (keys.length > 0) {
        prefFilters = new PreferenceFilterEntry[keys.length];
        for (int j = 0; j < keys.length; j++) {
          IConfigurationElement keyElement = keys[j];
          prefFilters[j] = new PreferenceFilterEntry(keyElement
              .getAttribute(IWorkbenchRegistryConstants.ATT_NAME));
        }
      }
      map.put(entry.getAttribute(IWorkbenchRegistryConstants.ATT_NODE),
          prefFilters);
    }
    return map;
  }
}
TOP

Related Classes of org.eclipse.ui.internal.registry.PreferenceTransferRegistryReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.