org.eclipse.koneki.ldt.ui.internal.LuaDocumentationHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.koneki.ldt.ui.internal.LuaDocumentationHelper.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Sierra Wireless 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:
 *     Sierra Wireless - initial API and implementation
 *******************************************************************************/
package org.eclipse.koneki.ldt.ui.internal;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.MessageFormat;

import org.apache.commons.io.FileUtils;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.dltk.ui.PreferenceConstants;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;
import org.osgi.framework.Bundle;

public final class LuaDocumentationHelper {

    public static final String BACKGROUND_COLOR_ID = "org.eclipse.koneki.ldt.ui.docbackground"; //$NON-NLS-1$
    public static final String FOREGROUND_COLOR_ID = "org.eclipse.koneki.ldt.ui.docforeground"; //$NON-NLS-1$

    private static final String CSS_FILE_PATH = "/resources/css/lua_documentation.css"; //$NON-NLS-1$

    private static String styleSheet;

    private LuaDocumentationHelper() {
    }

    private static ColorRegistry getColorRegistry() {
        IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
        ITheme currentTheme = themeManager.getCurrentTheme();
        return currentTheme.getColorRegistry();
    }

    public static Color getForegroundColor() {
        return getColorRegistry().get(FOREGROUND_COLOR_ID);
    }

    public static Color getBackgroundColor() {
        return getColorRegistry().get(BACKGROUND_COLOR_ID);
    }

    public static String getStyleSheet() {
        if (styleSheet == null) {
            styleSheet = initStyleSheet();
        }

        // Retrieve font from preference
        FontData fontData = JFaceResources.getFontRegistry()
                .getFontData(PreferenceConstants.APPEARANCE_DOCUMENTATION_FONT)[0];
        String styleSheetWithPreference = org.eclipse.dltk.ui.text.completion.HTMLPrinter
                .convertTopLevelFont(styleSheet, fontData);

        // Retrieve colors from theme:
        RGB bgColor = getBackgroundColor().getRGB();
        RGB fgColor = getForegroundColor().getRGB();

        styleSheetWithPreference = "body {color:" + toHtmlColor(fgColor) + "; background-color:" //$NON-NLS-1$//$NON-NLS-2$
                + toHtmlColor(bgColor) + ";}" + styleSheetWithPreference; //$NON-NLS-1$

        return styleSheetWithPreference;
    }

    protected static String initStyleSheet() {
        Bundle bundle = Activator.getDefault().getBundle();
        URL styleSheetURL = bundle.getEntry(CSS_FILE_PATH);
        if (styleSheetURL == null) {
            String errorMessage = MessageFormat.format("No css found on the path: {1}", CSS_FILE_PATH); //$NON-NLS-1$
            Activator.logError(errorMessage, new NullPointerException());
        }
        try {
            styleSheetURL = FileLocator.toFileURL(styleSheetURL);
            File cssFile = FileUtils.toFile(styleSheetURL);
            return FileUtils.readFileToString(cssFile);

        } catch (IOException ex) {
            Activator.logError("Unable to open CSS file for luadoc view", ex); //$NON-NLS-1$
        }
        return null;
    }

    protected static String toHtmlColor(RGB color) {
        StringBuffer buffer = new StringBuffer();

        buffer.append('#');
        appendHex(color.red, buffer);
        appendHex(color.green, buffer);
        appendHex(color.blue, buffer);

        return buffer.toString();
    }

    protected static void appendHex(int color, StringBuffer buffer) {
        String string = Integer.toHexString(color).toUpperCase();
        if (string.length() == 1) {
            buffer.append("0"); //$NON-NLS-1$
        }
        buffer.append(string);
    }

    public static String generatePage(String htmlContent) {
        return generatePage(getStyleSheet(), htmlContent);
    }

    public static String generatePage(String cssStyle, String htmlContent) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("<html><head><style CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">"); //$NON-NLS-1$
        buffer.append(cssStyle);
        buffer.append("</style></head><body>"); //$NON-NLS-1$
        buffer.append(htmlContent);
        buffer.append("</body></html>"); //$NON-NLS-1$
        return buffer.toString();
    }

}