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