/** * Copyright (c) 2012 committers of YAKINDU 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: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.base.utils.jface.help; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.Locale; import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.help.IContext; import org.eclipse.help.IHelpResource; import org.eclipse.help.internal.context.ContextFileProvider; import org.eclipse.xtext.documentation.IEObjectDocumentationProvider; import com.google.common.collect.Maps; /** * * @author andreas muelder - Initial contribution and API * */ @SuppressWarnings("restriction") public abstract class AbstractUserHelpDocumentationProvider implements IEObjectDocumentationProvider { public static final String EMPTY_DOCUMENTATION = ""; private Map<String, String> helpContentCache; public AbstractUserHelpDocumentationProvider() { helpContentCache = Maps.newHashMap(); } protected String getHelp(String contextId) { if (helpContentCache.get(contextId) != null) { return helpContentCache.get(contextId); } try { helpContentCache.put(contextId, parseHelp(contextId)); } catch (Exception e) { e.printStackTrace(); helpContentCache.put(contextId, EMPTY_DOCUMENTATION); } return helpContentCache.get(contextId); } private String parseHelp(String contextId) throws Exception { ContextFileProvider provider = new ContextFileProvider(); IContext context = provider.getContext(contextId, Locale.getDefault() .toString()); IHelpResource[] relatedTopics = context.getRelatedTopics(); Assert.isTrue(relatedTopics != null); // We assume that there is only one topic registered IHelpResource helpResource = relatedTopics[0]; String href = helpResource.getHref().substring(1); URL url = new URL("platform:/plugin/" + href); return convertStreamToString(url.openConnection().getInputStream()); } public String convertStreamToString(InputStream is) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder builder = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { builder.append(line); builder.append("\n"); } is.close(); return builder.toString(); } }