Package org.eclipse.ui.internal.cheatsheets

Source Code of org.eclipse.ui.internal.cheatsheets.CheatsheetSearchParticipant

/*******************************************************************************
* Copyright (c) 2005, 2007 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.cheatsheets;

import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.help.search.XMLSearchParticipant;
import org.eclipse.jface.action.Action;
import org.eclipse.ui.cheatsheets.OpenCheatSheetAction;
import org.eclipse.ui.internal.cheatsheets.composite.parser.ICompositeCheatsheetTags;
import org.eclipse.ui.internal.cheatsheets.data.IParserTags;
import org.eclipse.ui.internal.cheatsheets.registry.CheatSheetRegistryReader;
import org.xml.sax.Attributes;

public class CheatsheetSearchParticipant extends XMLSearchParticipant {
  private static final String INTRO_DESC = "cheatsheet/intro/description"; //$NON-NLS-1$

  private static final String ITEM_DESC = "cheatsheet/item/description"; //$NON-NLS-1$
 
  private static final String CCS_DESC = "compositeCheatsheet/taskGroup/intro"; //$NON-NLS-1$

  /**
   * Returns all the documents that this participant knows about. This method
   * is only used for participants that handle documents outside of the help
   * system's TOC.
   *
   * @return a set of hrefs for documents managed by this participant.
   */
  public Set getAllDocuments(String locale) {
    HashSet set = new HashSet();
    IConfigurationElement[] elements = Platform.getExtensionRegistry()
        .getConfigurationElementsFor(
            ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID + '.'
            + CheatSheetRegistryReader.CHEAT_SHEET_CONTENT);
    for (int i = 0; i < elements.length; i++) {
      IConfigurationElement element = elements[i];
      if (!element.getName().equals(CheatSheetRegistryReader.TAG_CHEATSHEET))
        continue;
      String fileName = element.getAttribute(CheatSheetRegistryReader.ATT_CONTENTFILE);
      String id = element.getAttribute("id"); //$NON-NLS-1$
      String pluginId = element.getContributor().getName();
      if (isExtensionValid(fileName, id, pluginId)) {
        try {
          fileName = resolveVariables(pluginId, fileName, locale);
          set.add("/" + pluginId + "/" + fileName + "?id=" + id); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        }
        catch (Throwable t) {
          // log and skip
          CheatSheetPlugin.logError("Error parsing cheat sheet extension from plug-in " + pluginId + ", id " + id + ", file " + fileName, t); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        }
      }
    }
    return set;
  }

  public Set getContributingPlugins() {
    IConfigurationElement[] elements = Platform.getExtensionRegistry()
        .getConfigurationElementsFor(
            ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID + '.'
            + CheatSheetRegistryReader.CHEAT_SHEET_CONTENT);
    HashSet set = new HashSet();
    for (int i = 0; i < elements.length; i++) {
      IConfigurationElement element = elements[i];
      if (element.getName().equals(CheatSheetRegistryReader.TAG_CHEATSHEET)) {
          set.add(element.getContributor().getName());
      }
    }
    return set;
  }

  protected void handleStartElement(String name, Attributes attributes,
      IParsedXMLContent data) {
    if (name.equals(IParserTags.CHEATSHEET)) {
      data.setTitle(attributes.getValue(IParserTags.TITLE));
      data.addText(attributes.getValue(IParserTags.TITLE));
    } else if (name.equals(ICompositeCheatsheetTags.COMPOSITE_CHEATSHEET)) {
      data.addText(attributes.getValue(ICompositeCheatsheetTags.NAME));
      data.setTitle(attributes.getValue(ICompositeCheatsheetTags.NAME));
    } else if (name.equals(IParserTags.ITEM)) {
      data.addText(attributes.getValue(IParserTags.TITLE));
      } else if (name.equals(IParserTags.SUBITEM)) {
        data.addText(attributes.getValue(IParserTags.LABEL));
      } else if (name.equals(ICompositeCheatsheetTags.TASK )
          || name.equals(ICompositeCheatsheetTags.TASK_GROUP)) {
        data.addText(attributes.getValue(ICompositeCheatsheetTags.NAME))
      }
  }

  protected void handleEndElement(String name, IParsedXMLContent data) {
  }

  protected void handleText(String text, IParsedXMLContent data) {
    String stackPath = getElementStackPath();
    String top = getTopElement();
    if (IParserTags.INTRO.equals(top)) {
      data.addText(text);
      if (stackPath.equalsIgnoreCase(CCS_DESC)) {
        data.addToSummary(text);
      }
    } else if (IParserTags.ON_COMPLETION.equals(top)) {
      data.addText(text);
    } else if (stackPath.equalsIgnoreCase(INTRO_DESC)) {
      data.addText(text);
      data.addToSummary(text);
      return;
    } else if (stackPath.equalsIgnoreCase(ITEM_DESC)) {
      data.addText(text);
      return;
    }
  }

  public boolean open(String id) {
    Action openAction = new OpenCheatSheetAction(id);
    openAction.run();
    return true;
  }
 
  private static boolean isExtensionValid(String fileName, String id, String pluginId) {
    if (fileName.indexOf('\\') != -1) {
      CheatSheetPlugin.logError("Error in cheat sheet extension id " + id + " from plug-in " + pluginId + ": path should not contain back-slashes (\\): " + fileName + ". This cheat sheet will not be indexed for searching.", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      return false;
    }
    return true;
  }
}
TOP

Related Classes of org.eclipse.ui.internal.cheatsheets.CheatsheetSearchParticipant

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.