Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Goldthorpe2010-02-01 23:33:05 +0000
committerChris Goldthorpe2010-02-01 23:33:05 +0000
commit96abc27993e15a9f3b10af0385bca2866fb0eb75 (patch)
treeb79f12379b0b9b7857b50e2c03c3c0090beadaea /org.eclipse.help
parent76da1304559b7a6c2c7fe212cc99e32f153929a6 (diff)
downloadeclipse.platform.ua-96abc27993e15a9f3b10af0385bca2866fb0eb75.tar.gz
eclipse.platform.ua-96abc27993e15a9f3b10af0385bca2866fb0eb75.tar.xz
eclipse.platform.ua-96abc27993e15a9f3b10af0385bca2866fb0eb75.zip
Bug 76005 – [Help] Ability for users to filter what they see in the help system navigation acc to some criteria (all help modes)
Diffstat (limited to 'org.eclipse.help')
-rw-r--r--org.eclipse.help/META-INF/MANIFEST.MF5
-rw-r--r--org.eclipse.help/src/org/eclipse/help/ICriteria.java37
-rw-r--r--org.eclipse.help/src/org/eclipse/help/IToc2.java42
-rw-r--r--org.eclipse.help/src/org/eclipse/help/ITopic2.java43
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/Topic.java11
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/UAElementFactory.java6
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/criteria/Criteria.java55
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/criteria/CriteriaPreferences.java90
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/criteria/CriterionResource.java80
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/toc/Toc.java90
-rw-r--r--org.eclipse.help/src/org/eclipse/help/internal/toc/TocAssembler.java26
11 files changed, 447 insertions, 38 deletions
diff --git a/org.eclipse.help/META-INF/MANIFEST.MF b/org.eclipse.help/META-INF/MANIFEST.MF
index 5952d467f..d553ef71a 100644
--- a/org.eclipse.help/META-INF/MANIFEST.MF
+++ b/org.eclipse.help/META-INF/MANIFEST.MF
@@ -20,6 +20,11 @@ Export-Package: org.eclipse.help,
org.eclipse.help.ui,
org.eclipse.ua.tests,
org.eclipse.help.webapp",
+ org.eclipse.help.internal.criteria;
+ x-friends:="org.eclipse.help.base,
+ org.eclipse.help.webapp,
+ org.eclipse.ua.tests,
+ org.eclipse.help.ui",
org.eclipse.help.internal.dynamic;
x-friends:="org.eclipse.ua.tests,
org.eclipse.help.ui,
diff --git a/org.eclipse.help/src/org/eclipse/help/ICriteria.java b/org.eclipse.help/src/org/eclipse/help/ICriteria.java
new file mode 100644
index 000000000..9e2fbd5a2
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/ICriteria.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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;
+
+/**
+ * A directive indicating the criteria information of a Toc or Topic described in xml
+ *
+ * @since 3.5
+ */
+
+public interface ICriteria extends IUAElement {
+
+ /**
+ * Returns the name of the criteria element, e.g.
+ * "Platform"
+ *
+ * @return the name of the criteria element
+ */
+ public String getName();
+
+ /**
+ * Returns the value of the criteria element, e.g.
+ * "AIX,Windows"
+ *
+ * @return the value of the criteria element
+ */
+ public String getValue();
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/IToc2.java b/org.eclipse.help/src/org/eclipse/help/IToc2.java
new file mode 100644
index 000000000..1e3d27b00
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/IToc2.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * 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;
+
+/**
+ * <code>IToc2</code> extends <code>IToc </code> by adding methods to support functionality
+ * for criteria, topic sorting and custom icons
+ * @since 3.5
+ */
+public interface IToc2 extends IToc{
+
+ /**
+ * Return the criteria information of this toc.
+ *
+ * @return array of CriterionResource
+ */
+ public ICriteria[] getCriteria();
+
+ /**
+ * Toc elements can have non standard icons which are declared using a
+ * tocIcon element in the org.eclipse.help.toc extension point
+ * @return NULL if the standard icons are to be used, otherwise the name of
+ * an icon declared in an org.eclipse.help.toc extension
+ */
+ public String getIcon();
+
+ /**
+ * Allows child elements to be sorted alphabetically regardless of their actual
+ * order in the list of children.
+ * @return true if the children should be sorted alphabetically
+ */
+ public boolean isSorted();
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/ITopic2.java b/org.eclipse.help/src/org/eclipse/help/ITopic2.java
new file mode 100644
index 000000000..9ccc9c9bb
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/ITopic2.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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;
+
+
+/**
+ * <code>ITopic2</code> extends <code>ITopic</code> by adding methods to support functionality
+ * for criteria, topic sorting and custom icons
+ *
+ * @since 3.5
+ */
+public interface ITopic2 extends ITopic{
+
+ /**
+ * Return the criteria information of topic.
+ * @return array of CriterionResource
+ */
+ public ICriteria[] getCriteria();
+
+ /**
+ * Toc elements can have non standard icons which are declared using a
+ * tocIcon element in the org.eclipse.help.toc extension point
+ * @return NULL if the standard icons are to be used, otherwise the name of
+ * an icon declared in an org.eclipse.help.toc extension
+ */
+ public String getIcon();
+
+ /**
+ * Allows child elements to be sorted alphabetically regardless of their actual
+ * order in the list of children.
+ * @return true if the children should be sorted alphabetically
+ */
+ public boolean isSorted();
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/Topic.java b/org.eclipse.help/src/org/eclipse/help/internal/Topic.java
index df3e34ad5..538dd7b69 100644
--- a/org.eclipse.help/src/org/eclipse/help/internal/Topic.java
+++ b/org.eclipse.help/src/org/eclipse/help/internal/Topic.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 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
@@ -10,10 +10,12 @@
*******************************************************************************/
package org.eclipse.help.internal;
+import org.eclipse.help.ICriteria;
import org.eclipse.help.ITopic;
+import org.eclipse.help.ITopic2;
import org.w3c.dom.Element;
-public class Topic extends UAElement implements ITopic {
+public class Topic extends UAElement implements ITopic2 {
public static final String NAME = "topic"; //$NON-NLS-1$
public static final String ATTRIBUTE_HREF = "href"; //$NON-NLS-1$
@@ -56,6 +58,10 @@ public class Topic extends UAElement implements ITopic {
return (ITopic[])getChildren(ITopic.class);
}
+ public ICriteria[] getCriteria() {
+ return (ICriteria[]) getChildren(ICriteria.class);
+ }
+
public void setHref(String href) {
setAttribute(ATTRIBUTE_HREF, href);
}
@@ -63,4 +69,5 @@ public class Topic extends UAElement implements ITopic {
public void setLabel(String label) {
setAttribute(ATTRIBUTE_LABEL, label);
}
+
}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/UAElementFactory.java b/org.eclipse.help/src/org/eclipse/help/internal/UAElementFactory.java
index b72b86569..112bd648a 100644
--- a/org.eclipse.help/src/org/eclipse/help/internal/UAElementFactory.java
+++ b/org.eclipse.help/src/org/eclipse/help/internal/UAElementFactory.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 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
@@ -19,6 +19,7 @@ import org.eclipse.help.IAnchor;
import org.eclipse.help.ICommandLink;
import org.eclipse.help.IContentExtension;
import org.eclipse.help.IContext;
+import org.eclipse.help.ICriteria;
import org.eclipse.help.IInclude;
import org.eclipse.help.IIndex;
import org.eclipse.help.IIndexEntry;
@@ -29,6 +30,7 @@ import org.eclipse.help.IToc;
import org.eclipse.help.ITopic;
import org.eclipse.help.IUAElement;
import org.eclipse.help.internal.context.Context;
+import org.eclipse.help.internal.criteria.Criteria;
import org.eclipse.help.internal.extension.ContentExtension;
import org.eclipse.help.internal.index.Index;
import org.eclipse.help.internal.index.IndexEntry;
@@ -57,6 +59,7 @@ public class UAElementFactory {
{ ICommandLink.class, CommandLink.class },
{ IIndex.class, Index.class },
{ IContentExtension.class, ContentExtension.class },
+ { ICriteria.class, Criteria.class },
};
private static final Map classByElementName;
@@ -74,6 +77,7 @@ public class UAElementFactory {
classByElementName.put(Link.NAME, Link.class);
classByElementName.put(IndexSee.NAME, IndexSee.class);
classByElementName.put(IndexSubpath.NAME, IndexSubpath.class);
+ classByElementName.put(Criteria.NAME, Criteria.class);
classByElementName.put(ContentExtension.NAME_CONTRIBUTION, ContentExtension.class);
classByElementName.put(ContentExtension.NAME_CONTRIBUTION_LEGACY, ContentExtension.class);
classByElementName.put(ContentExtension.NAME_REPLACEMENT, ContentExtension.class);
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/criteria/Criteria.java b/org.eclipse.help/src/org/eclipse/help/internal/criteria/Criteria.java
new file mode 100644
index 000000000..ac491ee02
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/internal/criteria/Criteria.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.internal.criteria;
+
+import org.eclipse.help.ICriteria;
+import org.eclipse.help.internal.UAElement;
+import org.w3c.dom.Element;
+
+/**
+ * A directive indicating the criteria information of a Toc or Topic described in xml
+ *
+ * @since 3.5
+ */
+
+public class Criteria extends UAElement implements ICriteria {
+
+ public static final String NAME = "criteria"; //$NON-NLS-1$
+ public static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
+ public static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
+
+ public Criteria(ICriteria src) {
+ super(NAME,src);
+ setName(src.getName());
+ setValue(src.getValue());
+ }
+
+ public Criteria(Element element) {
+ super(element);
+ }
+
+ public String getName() {
+ return getAttribute(ATTRIBUTE_NAME);
+ }
+
+ public String getValue() {
+ return getAttribute(ATTRIBUTE_VALUE);
+ }
+
+ public void setName(String name) {
+ setAttribute(ATTRIBUTE_NAME, name);
+ }
+
+ public void setValue(String value) {
+ setAttribute(ATTRIBUTE_VALUE, value);
+ }
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriteriaPreferences.java b/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriteriaPreferences.java
new file mode 100644
index 000000000..bf5a7b16c
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriteriaPreferences.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * 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.internal.criteria;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.help.ICriteria;
+import org.eclipse.help.internal.HelpPlugin;
+
+/**
+ * Get criteria related parameter from preferences.ini
+ *
+ * @since 3.5
+ */
+public class CriteriaPreferences {
+
+ private final static String SUPPORTED_CRITERIA = "supportedCriteria"; //$NON-NLS-1$
+ private final static String ENABLE_CRITERIA = "enableCriteria"; //$NON-NLS-1$
+
+ private List supportedCriteria;
+ private boolean criteriaEnabled;
+ private Map allCriteriaValues;
+
+ static class InstanceHolder{
+ static CriteriaPreferences instance = new CriteriaPreferences();
+ }
+
+ private CriteriaPreferences() {
+ criteriaEnabled = Platform.getPreferencesService().getBoolean(HelpPlugin.PLUGIN_ID, ENABLE_CRITERIA, false, null);
+
+ supportedCriteria = new ArrayList();
+ StringTokenizer criteria = new StringTokenizer(Platform.getPreferencesService().getString(HelpPlugin.PLUGIN_ID, SUPPORTED_CRITERIA, "", null), ",;"); //$NON-NLS-1$ //$NON-NLS-2$
+ while (criteria.hasMoreTokens()) {
+ supportedCriteria.add(criteria.nextToken().toLowerCase().trim());
+ }
+
+ allCriteriaValues = new HashMap();
+ }
+
+ public static CriteriaPreferences getInstance() {
+ return InstanceHolder.instance;
+ }
+
+ public boolean isSupportedCriterion(String criterion){
+ if(null != criterion && supportedCriteria.contains(criterion.toLowerCase())){
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isCriteriaEnabled(){
+ return criteriaEnabled;
+ }
+
+ public void addCriteriaValues(ICriteria[] criteria){
+ CriterionResource[] resources = CriterionResource.toCriterionResource(criteria);
+ for(int i = 0; i < resources.length; ++ i){
+ CriterionResource criterion = resources[i];
+ String criterionName = criterion.getCriterionName();
+ List criterionValues = criterion.getCriterionValues();
+
+ Set existedValues = (Set)allCriteriaValues.get(criterionName);
+ if (null == existedValues)
+ existedValues = new HashSet();
+ existedValues.addAll(criterionValues);
+ allCriteriaValues.put(criterionName, existedValues);
+ }
+ }
+
+ public Map getAllCriteriaValues(){
+ return allCriteriaValues;
+ }
+
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriterionResource.java b/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriterionResource.java
new file mode 100644
index 000000000..d70f39bfd
--- /dev/null
+++ b/org.eclipse.help/src/org/eclipse/help/internal/criteria/CriterionResource.java
@@ -0,0 +1,80 @@
+package org.eclipse.help.internal.criteria;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.help.ICriteria;
+
+/**
+ * A class represents one criterion, which has the name and values
+ *
+ * @since 3.5
+ */
+public class CriterionResource {
+
+ private String criterionName;
+ private List criterionValues;
+
+ public CriterionResource(String criterionName){
+ this(criterionName, null);
+ }
+
+ public CriterionResource (String criterionName, List criterionValues){
+ this.criterionName = criterionName;
+ this.criterionValues = new ArrayList();
+ if(null != criterionValues) {
+ this.addCriterionValues(criterionValues);
+ }
+ }
+
+ public String getCriterionName(){
+ return this.criterionName;
+ }
+
+ public List getCriterionValues(){
+ return this.criterionValues;
+ }
+
+ public void addCriterionValue(String criterionValue){
+ if(null != criterionValue && 0 != criterionValue.length() && !criterionValues.contains(criterionValue)){
+ criterionValues.add(criterionValue);
+ }
+ }
+
+ public void addCriterionValues(List criterionValues){
+ for(Iterator iterator = criterionValues.iterator(); iterator.hasNext();){
+ String criterionValue = (String) iterator.next();
+ this.addCriterionValue(criterionValue);
+ }
+ }
+
+ public static CriterionResource[] toCriterionResource(ICriteria[] criteriaElements) {
+ List criteriaList = new ArrayList();
+ outer: for (int i = 0; i < criteriaElements.length; ++i) {
+ String elementName = criteriaElements[i].getName();
+ String elementValue = criteriaElements[i].getValue();
+ if (null != elementName && 0 != elementName.length() && null != elementValue
+ && 0 != elementValue.length()) {
+ if (CriteriaPreferences.getInstance().isSupportedCriterion(elementName)) {
+ elementName = elementName.toLowerCase();
+ List values = Arrays.asList(elementValue.split(",")); //$NON-NLS-1$
+ for(int j = 0; j < criteriaList.size(); ++j){
+ CriterionResource criterion = (CriterionResource) criteriaList.get(j);
+ if(elementName.equals(criterion.getCriterionName())){
+ criterion.addCriterionValues(values);
+ continue outer;
+ }
+ }
+ CriterionResource criterionResource = new CriterionResource(elementName, values);
+ criteriaList.add(criterionResource);
+ }
+ }
+ }
+ CriterionResource[] criteria = new CriterionResource[criteriaList.size()];
+ criteriaList.toArray(criteria);
+ return criteria;
+ }
+
+}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/toc/Toc.java b/org.eclipse.help/src/org/eclipse/help/internal/toc/Toc.java
index e1df434c2..c67e411bc 100644
--- a/org.eclipse.help/src/org/eclipse/help/internal/toc/Toc.java
+++ b/org.eclipse.help/src/org/eclipse/help/internal/toc/Toc.java
@@ -1,12 +1,10 @@
/*******************************************************************************
- * Copyright (c) 2006, 2009 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
+ * Copyright (c) 2006, 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
+ * Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.toc;
@@ -14,14 +12,17 @@ import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.help.ICriteria;
import org.eclipse.help.IToc;
+import org.eclipse.help.IToc2;
import org.eclipse.help.ITocContribution;
import org.eclipse.help.ITopic;
+import org.eclipse.help.ITopic2;
import org.eclipse.help.IUAElement;
import org.eclipse.help.internal.UAElement;
import org.w3c.dom.Element;
-public class Toc extends UAElement implements IToc {
+public class Toc extends UAElement implements IToc2 {
public static final String NAME = "toc"; //$NON-NLS-1$
public static final String ATTRIBUTE_LABEL = "label"; //$NON-NLS-1$
@@ -29,8 +30,8 @@ public class Toc extends UAElement implements IToc {
public static final String ATTRIBUTE_TOPIC = "topic"; //$NON-NLS-1$
public static final String ATTRIBUTE_LINK_TO = "link_to"; //$NON-NLS-1$
public static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
- public static final String ATTRIBUTE_ICON= "icon"; //$NON-NLS-1$
- public static final String ATTRIBUTE_SORT= "sort"; //$NON-NLS-1$
+ public static final String ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$
+ public static final String ATTRIBUTE_SORT = "sort"; //$NON-NLS-1$
private ITocContribution contribution;
private ITopic topic;
@@ -46,11 +47,11 @@ public class Toc extends UAElement implements IToc {
}
appendChildren(src.getChildren());
}
-
+
public Toc(Element src) {
super(src);
}
-
+
/*
* Creates a mapping of all topic hrefs to ITopics.
*/
@@ -60,31 +61,31 @@ public class Toc extends UAElement implements IToc {
map.put(topic.getHref(), topic);
}
ITopic[] topics = getTopics();
- for (int i=0;i<topics.length;++i) {
+ for (int i = 0; i < topics.length; ++i) {
createHref2TopicMapAux(map, topics[i]);
}
return map;
}
/*
- * Creates a mapping of all topic hrefs to ITopics under the given
- * ITopic and stores in the given Map.
+ * Creates a mapping of all topic hrefs to ITopics under the given ITopic and stores in the
+ * given Map.
*/
private void createHref2TopicMapAux(Map map, ITopic topic) {
String href = topic.getHref();
if (href != null) {
map.put(href, topic);
int anchorIx = href.lastIndexOf("#"); //$NON-NLS-1$
- if (anchorIx >= 0) { //anchor exists, drop it and add href again to map
+ if (anchorIx >= 0) { // anchor exists, drop it and add href again to map
String simpleHref = href.substring(0, anchorIx);
if (!map.containsKey(simpleHref)) {
map.put(simpleHref, topic);
}
- }
+ }
}
ITopic[] subtopics = topic.getSubtopics();
if (subtopics != null) {
- for (int i=0;i<subtopics.length;++i) {
+ for (int i = 0; i < subtopics.length; ++i) {
if (subtopics[i] != null) {
createHref2TopicMapAux(map, subtopics[i]);
}
@@ -95,12 +96,12 @@ public class Toc extends UAElement implements IToc {
public String getHref() {
return getAttribute(ATTRIBUTE_HREF);
}
-
- public String getIcon(){
+
+ public String getIcon() {
return getAttribute(ATTRIBUTE_ICON);
}
-
- public boolean isSorted(){
+
+ public boolean isSorted() {
return "true".equalsIgnoreCase(getAttribute(ATTRIBUTE_SORT)); //$NON-NLS-1$
}
@@ -113,51 +114,71 @@ public class Toc extends UAElement implements IToc {
}
return href2TopicMap;
}
-
+
public String getLabel() {
return getAttribute(ATTRIBUTE_LABEL);
}
-
+
public String getLinkTo() {
return getAttribute(ATTRIBUTE_LINK_TO);
}
-
+
public String getTopic() {
return getAttribute(ATTRIBUTE_TOPIC);
}
-
+
public ITopic getTopic(String href) {
if (href == null) {
if (topic == null) {
- topic = new ITopic() {
+ topic = new ITopic2() {
+
public String getHref() {
return getTopic();
}
+
public String getLabel() {
return Toc.this.getLabel();
}
+
public ITopic[] getSubtopics() {
return getTopics();
}
+
public boolean isEnabled(IEvaluationContext context) {
return Toc.this.isEnabled(context);
}
+
public IUAElement[] getChildren() {
return new IUAElement[0];
}
+
+ public ICriteria[] getCriteria() {
+ return Toc.this.getCriteria();
+ }
+
+ public String getIcon() {
+ return null;
+ }
+
+ public boolean isSorted() {
+ return false;
+ }
};
}
return topic;
- }
- else {
- return (ITopic)getHref2TopicMap().get(href);
+ } else {
+ return (ITopic) getHref2TopicMap().get(href);
}
}
public ITopic[] getTopics() {
- return (ITopic[])getChildren(ITopic.class);
+ return (ITopic[]) getChildren(ITopic.class);
}
+ public ICriteria[] getCriteria() {
+ return (ICriteria[]) getChildren(ICriteria.class);
+ }
+
public void setLabel(String label) {
setAttribute(ATTRIBUTE_LABEL, label);
}
@@ -169,16 +190,17 @@ public class Toc extends UAElement implements IToc {
public void setTopic(String href) {
setAttribute(ATTRIBUTE_TOPIC, href);
}
-
+
public void setHref(String href) {
setAttribute(ATTRIBUTE_HREF, href);
}
-
+
public ITocContribution getTocContribution() {
return contribution;
}
-
+
public void setTocContribution(ITocContribution contribution) {
this.contribution = contribution;
}
+
}
diff --git a/org.eclipse.help/src/org/eclipse/help/internal/toc/TocAssembler.java b/org.eclipse.help/src/org/eclipse/help/internal/toc/TocAssembler.java
index e0977c84a..54a5d8f95 100644
--- a/org.eclipse.help/src/org/eclipse/help/internal/toc/TocAssembler.java
+++ b/org.eclipse.help/src/org/eclipse/help/internal/toc/TocAssembler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 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
@@ -20,12 +20,14 @@ import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
+import org.eclipse.help.ICriteria;
import org.eclipse.help.ITocContribution;
import org.eclipse.help.IUAElement;
import org.eclipse.help.internal.Anchor;
import org.eclipse.help.internal.HelpPlugin;
import org.eclipse.help.internal.Topic;
import org.eclipse.help.internal.UAElement;
+import org.eclipse.help.internal.criteria.CriteriaPreferences;
import org.eclipse.help.internal.dynamic.DocumentProcessor;
import org.eclipse.help.internal.dynamic.DocumentReader;
import org.eclipse.help.internal.dynamic.ExtensionHandler;
@@ -431,6 +433,9 @@ public class TocAssembler {
if (href != null) {
topic.setHref(normalize(href, id));
}
+
+ processCriteria(element);
+
return HANDLED_CONTINUE;
}
else if (element instanceof Toc) {
@@ -440,6 +445,9 @@ public class TocAssembler {
if (topic != null) {
toc.setTopic(normalize(topic, id));
}
+
+ processCriteria(element);
+
return HANDLED_CONTINUE;
}
return UNHANDLED;
@@ -460,5 +468,21 @@ public class TocAssembler {
}
return href;
}
+
+ private void processCriteria(UAElement element) {
+ if(CriteriaPreferences.getInstance().isCriteriaEnabled()){
+ ICriteria[] criteria = new ICriteria[0];
+ if (element instanceof Topic) {
+ Topic topic = (Topic) element;
+ criteria = topic.getCriteria();
+ }
+ else if (element instanceof Toc) {
+ Toc toc = (Toc) element;
+ criteria = toc.getCriteria();
+ }
+
+ CriteriaPreferences.getInstance().addCriteriaValues(criteria);
+ }
+ }
}
}

Back to the top