cc.warlock.core.client.settings.internal.HighlightConfigurationProvider.java Source code

Java tutorial

Introduction

Here is the source code for cc.warlock.core.client.settings.internal.HighlightConfigurationProvider.java

Source

/**
 * Warlock, the open-source cross-platform game client
 *  
 * Copyright 2008, Warlock LLC, and individual contributors as indicated
 * by the @authors tag. 
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package cc.warlock.core.client.settings.internal;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.PatternSyntaxException;

import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import cc.warlock.core.client.IWarlockStyle;
import cc.warlock.core.client.internal.WarlockStyle;
import cc.warlock.core.client.settings.IHighlightProvider;
import cc.warlock.core.client.settings.IHighlightString;

@SuppressWarnings("unchecked")
public class HighlightConfigurationProvider extends PatternConfigurationProvider implements IHighlightProvider {
    protected ArrayList<IHighlightString> highlights = new ArrayList<IHighlightString>();
    protected HashMap<String, IWarlockStyle> namedStyles = new HashMap<String, IWarlockStyle>();

    public HighlightConfigurationProvider() {
        super("highlights");

        setHandleChildren(false);
    }

    public List<? extends IHighlightString> getHighlightStrings() {
        return highlights;
    }

    public IWarlockStyle getNamedStyle(String name) {
        if (namedStyles.containsKey(name)) {
            return namedStyles.get(name);
        }
        return null;
    }

    public Collection<? extends IWarlockStyle> getNamedStyles() {
        return namedStyles.values();
    }

    @Override
    protected void parseData() {
    }

    @Override
    protected void parseChild(Element child) {
        if (child.getName().equals("highlight")) {
            IWarlockStyle style = null;
            if (child.elements().size() > 0 && child.element("style") != null) {
                Element sElement = child.element("style");
                style = createStyle(sElement);
            }

            try {
                HighlightString string = new HighlightString(this, null, style);
                fillSetting(string, child);
                highlights.add(string);
            } catch (PatternSyntaxException e) {
                e.printStackTrace();
            }
        } else if (child.getName().equals("style")) {
            IWarlockStyle style = createStyle(child);

            namedStyles.put(style.getName(), style);
        }
    }

    @Override
    protected void saveTo(List<Element> elements) {
        //System.out.println("Saving highlights");
        Element highlightsElement = DocumentHelper.createElement("highlights");

        for (IHighlightString string : highlights) {
            Element hElement = highlightsElement.addElement("highlight");
            fillElement(hElement, string);

            createStyleElement(hElement, string.getStyle());
        }

        for (Map.Entry<String, IWarlockStyle> entry : namedStyles.entrySet()) {
            highlightsElement.add(createStyleElement(entry.getValue()));
        }

        elements.add(highlightsElement);
    }

    protected IWarlockStyle createStyle(Element sElement) {
        WarlockStyle style = new WarlockStyle();
        style.setBackgroundColor(colorValue(sElement, "background"));
        style.setForegroundColor(colorValue(sElement, "foreground"));

        if (sElement.attributeValue("name") != null) {
            style.setName(stringValue(sElement, "name"));
        }

        for (Element typeElement : (List<Element>) sElement.elements()) {
            String text = typeElement.getTextTrim();
            style.addStyleType(IWarlockStyle.StyleType.valueOf(text));
        }

        style.setFullLine(booleanValue(sElement, "full-line"));
        //System.out.println("Setting style sound to " + sElement.attributeValue("sound"));
        style.setSound(sElement.attributeValue("sound"));

        return style;
    }

    protected Element createStyleElement(IWarlockStyle style) {
        return createStyleElement(null, style);
    }

    protected Element createStyleElement(Element parent, IWarlockStyle style) {
        Element element = null;
        if (parent != null) {
            element = parent.addElement("style");
        } else {
            element = DocumentHelper.createElement("style");
        }

        if (style.getName() != null)
            element.addAttribute("name", style.getName());

        element.addAttribute("background", colorString(style.getBackgroundColor()));
        element.addAttribute("foreground", colorString(style.getForegroundColor()));

        for (IWarlockStyle.StyleType styleType : style.getStyleTypes()) {
            Element sElement = element.addElement("styleType");
            sElement.setText(styleType.name());
        }

        element.addAttribute("full-line", "" + style.isFullLine());
        //System.out.println("saving sound " + style.getSound());
        element.addAttribute("sound", style.getSound());
        return element;
    }

    public void addNamedStyle(String name, IWarlockStyle style) {
        namedStyles.put(name, style);
    }

    public void removeNamedStyle(String name) {
        namedStyles.remove(name);
    }

    public void addHighlightString(IHighlightString string) {
        highlights.add(string);
    }

    public void insertHighlightString(int index, IHighlightString string) {
        highlights.add(index, string);
    }

    public void removeHighlightString(IHighlightString string) {
        highlights.remove(string);
    }

    public void replaceHighlightString(IHighlightString originalString, IHighlightString newString) {

        int index = highlights.indexOf(originalString);
        if (index > -1) {
            highlights.set(index, newString);
        }
    }
}