blob: 95200c1ac04bfb7cd67831591ffdafb90a7d98a4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 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
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.webapp.data;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.help.IIndexEntry;
import org.eclipse.help.IIndexEntry2;
import org.eclipse.help.IIndexSee;
import org.eclipse.help.IToc;
import org.eclipse.help.ITopic;
import org.eclipse.help.UAContentFilter;
import org.eclipse.help.internal.base.HelpBasePlugin;
import org.eclipse.help.internal.base.HelpEvaluationContext;
/**
* Utilities to test for enabled topics, index entries etc.
*/
public class EnabledTopicUtils {
/**
* Test whether a topic is enabled
* @param topic
* @return
*/
public static boolean isEnabled(ITopic topic) {
if (!topic.isEnabled(HelpEvaluationContext.getContext())) {
return false;
}
if (topic.getHref() != null) {
return true;
}
return hasEnabledSubtopic(topic);
}
public static boolean hasEnabledSubtopic(ITopic topic) {
ITopic[] subtopics = topic.getSubtopics();
for (ITopic subtopic : subtopics) {
if (isEnabled(subtopic)) {
return true;
}
}
return false;
}
/**
* Test whether a toc is enabled
* @param topic
* @return
*/
public static boolean isEnabled(IToc toc) {
if (!HelpBasePlugin.getActivitySupport().isEnabled(toc.getHref()) ||
UAContentFilter.isFiltered(toc, HelpEvaluationContext.getContext())) {
return false;
}
// A toc is enabled only if at least one subtopic is enabled
ITopic[] subtopics = toc.getTopics();
for (ITopic subtopic : subtopics) {
if (isEnabled(subtopic)) {
return true;
}
}
return false;
}
/**
* Test whether an entry is enabled
* @param entry
* @return
*/
public static boolean isEnabled(IIndexEntry entry) {
if (UAContentFilter.isFiltered(entry, HelpEvaluationContext.getContext())) {
return false;
}
ITopic[] topics = entry.getTopics();
for (ITopic topic : topics) {
if (isEnabled(topic)) {
return true;
}
}
IIndexEntry[] subentries = entry.getSubentries();
for (IIndexEntry subentrie : subentries) {
if (isEnabled(subentrie)) {
return true;
}
}
if (entry instanceof IIndexEntry2) {
IIndexSee[] sees = ((IIndexEntry2)entry).getSees();
for (IIndexSee see : sees) {
if (isEnabled(see)) {
return true;
}
}
}
return false;
}
public static boolean isEnabled(IIndexSee see) {
return see.isEnabled(HelpEvaluationContext.getContext());
}
/**
* Filter out any disabled entries from an array
* @param entries an array of entries
* @return an array containing only those entries which are enabled
*/
public static IIndexEntry[] getEnabled(IIndexEntry[] entries) {
for (int i=0;i<entries.length;++i) {
if (!isEnabled(entries[i])) {
List<IIndexEntry> list = new ArrayList<IIndexEntry>(entries.length);
for (int j=0;j<entries.length;++j) {
if (j < i || isEnabled(entries[j])) {
list.add(entries[j]);
}
}
return list.toArray(new IIndexEntry[list.size()]);
}
}
return entries;
}
/**
* Filter out any disable topics form an array
* @param topics an array of topics
* @return an array containing only those topics which are enabled
*/
public static ITopic[] getEnabled(ITopic[] topics) {
for (int i=0;i<topics.length;++i) {
if (!isEnabled(topics[i])) {
List<ITopic> list = new ArrayList<ITopic>(topics.length);
for (int j=0;j<topics.length;++j) {
if (j < i || isEnabled(topics[j])) {
list.add(topics[j]);
}
}
return list.toArray(new ITopic[list.size()]);
}
}
return topics;
}
}