| /******************************************************************************* |
| * 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; |
| } |
| |
| } |