Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipant.java')
-rw-r--r--org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipant.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipant.java b/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipant.java
new file mode 100644
index 000000000..708954c9a
--- /dev/null
+++ b/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipant.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.help.search;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.help.internal.util.ResourceLocator;
+import org.osgi.framework.Bundle;
+
+/**
+ * Participant in the help search. A plug-in can contribute instance of SearchParticipant to
+ * <code>"org.eclipse.help.search.searchParticipant"</code> extension point. Search
+ * participant is responsible for adding the content of documents it is responsible for into the
+ * help system's search index. Once in the index, the document becomes searchable and can produce
+ * search hits. There are two ways of using the participant:
+ * <ol>
+ * <li> For adding documents that are part of the help's TOC that have content formats not known to
+ * the default indexer (which are essentially all documents that are not of HTML format). In this
+ * case, the help system knows about the documents because they are in TOC but does not know how to
+ * index them. Because of the non-HTML format, help search participants are normally accompanied by
+ * the help content producers that are responsible for transforming the unknown format into HTML on
+ * the fly. <br>
+ * <br>
+ * When used in this mode, search participants must be registered with file extensions they handle.
+ * Based on the file extension mapping, they will be the first to get a chance at indexing the
+ * document with the matching extension.<br>
+ * <br>
+ * </li>
+ * <li> For adding documents that are outside of the help's TOC. In this case, the documents are
+ * completely unknown to the help system. Search participants are responsible for providing a set of
+ * documents they know about and are not supposed to declare file extensions they can handle. They
+ * are also responsible for opening these documents when asked because the help system will not be
+ * able to open them in any meaningful way. </li>
+ * </ol>
+ *
+ * @since 3.5
+ */
+public abstract class SearchParticipant {
+
+ private static final HashSet EMPTY_SET = new HashSet();
+
+ private String id;
+
+ /**
+ * Initializes the participant with the unique identifier from the registry. The method is
+ * called by the help system - subclasses are not supposed to call it.
+ *
+ * @param id
+ * the unique identifier of this participant
+ */
+
+ public final void init(String id) {
+ this.id = id;
+ }
+
+ /**
+ * Returns the unique identifier of this participant.
+ *
+ * @return the unique id
+ */
+ public final String getId() {
+ return id;
+ }
+
+ /**
+ * Adds the document to the search index.
+ *
+ * @param index
+ * the abstract representation of the help index that is currently running. Indexing
+ * known file types in participants that manage documents outside the TOC can be
+ * delegated to the index.
+ * @param pluginId
+ * the plug-in that owns the document
+ * @param name
+ * the name of the document to index
+ * @param url
+ * the url of the document to index
+ * @param id
+ * the unique id associated with this document
+ * @param doc
+ * the document to add searchable content to
+ * @return the status of the indexing operation. A successful operation should return
+ * <code>Status.OK</code>.
+ */
+ public abstract IStatus addDocument(IHelpSearchIndex index, String pluginId, String name, URL url, String id,
+ ISearchDocument doc);
+
+ /**
+ * 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.
+ *
+ * @param locale
+ * the index locale
+ *
+ * @return a set of hrefs for documents managed by this participant.
+ */
+ public Set getAllDocuments(String locale) {
+ return EMPTY_SET;
+ }
+
+ /**
+ * Returns a set of identifiers of plug-ins that contribute indexable documents. This method is
+ * only used for participants that handle documents outside of the help system's TOC.
+ *
+ * @return a set of contributing plug-in ids
+ */
+
+ public Set getContributingPlugins() {
+ return EMPTY_SET;
+ }
+
+ /**
+ * A utility method that resolves a file name that contains '$'-based substitution variables.
+ *
+ * @param pluginId
+ * the identifier of the originating plug-in
+ * @param fileName
+ * the source file name
+ * @param locale
+ * the locale to use when resolving nl variable
+ * @return the plug-in relative file name with resolved variables
+ */
+
+ protected static String resolveVariables(String pluginId, String fileName, String locale) {
+ if (fileName.indexOf('$') == -1)
+ return fileName;
+ ArrayList prefix = ResourceLocator.getPathPrefix(locale);
+ Bundle bundle = Platform.getBundle(pluginId);
+ if (bundle == null)
+ return fileName;
+ URL url = ResourceLocator.find(bundle, new Path(fileName), prefix);
+ URL root = FileLocator.find(bundle, new Path(""), null); //$NON-NLS-1$
+ return url.toString().substring(root.toString().length());
+ }
+
+ /**
+ * A utility method that adds a title to the document.
+ *
+ * @param title
+ * the title string
+ * @param doc
+ * the document
+ */
+
+ protected void addTitle(String title, ISearchDocument doc) {
+ doc.setTitle(title);
+ }
+
+ /**
+ * Help system does not know how to open documents outside of the system's TOC. Global search
+ * participants that bring additional documents into the index when
+ * <code>getAllDocuments(String)</code> have a chance to open the document when it is part of
+ * the search results. The default implementation returns <code>false</code> indicating that
+ * the help system should open the document. In most cases this is wrong for most of XML files
+ * that are in some interesting way.
+ *
+ * @param id
+ * a participant-specific identifier that completely represents a search result
+ *
+ * @return <code>true</code> if the file has been opened correctly or <code>false</code> to
+ * allow the help system to try to open the document.
+ */
+
+ public boolean open(String id) {
+ return false;
+ }
+
+ /**
+ * Signals to the participant that the indexing operation has finished and that cached resources
+ * can be disposed to free up memory. The participant itself is still kept around (hence this is
+ * semantically different from <code>dispose</code>).
+ */
+ public void clear() {
+ }
+}

Back to the top