001 /*
002 * Copyright (c) 2005 Marko Karppinen & Co. LLC
003 *
004 * Permission is hereby granted, free of charge, to any person obtaining a
005 * copy of this software and associated documentation files (the "Software"),
006 * to deal in the Software without restriction, including without limitation
007 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
008 * and/or sell copies of the Software, and to permit persons to whom the
009 * Software is furnished to do so, subject to the following conditions:
010 *
011 * The above copyright notice and this permission notice shall be included in
012 * all copies or substantial portions of the Software.
013 *
014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
017 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
019 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
020 * DEALINGS IN THE SOFTWARE.
021 */
022
023 package fi.karppinen.xml;
024
025 import gnu.xml.pipeline.EventConsumer;
026 import gnu.xml.pipeline.EventFilter;
027
028 import java.util.Locale;
029
030 import org.xml.sax.Attributes;
031 import org.xml.sax.SAXException;
032 import org.xml.sax.helpers.AttributesImpl;
033
034 /**
035 * Adds an <code>xml:lang</code> attribute to the root element.
036 *
037 * @version $Id: RootLangInjector.java,v 1.1 2006/10/30 19:57:09 hsivonen Exp $
038 * @author hsivonen
039 */
040 public class RootLangInjector extends EventFilter {
041
042 private Locale lang;
043 private boolean injected = false;
044
045 /**
046 *
047 */
048 public RootLangInjector(Locale lang) {
049 super();
050 setContentHandler(this);
051 this.lang = lang;
052 }
053
054 /**
055 * @param consumer
056 */
057 public RootLangInjector(Locale lang, EventConsumer consumer) {
058 super(consumer);
059 setContentHandler(this);
060 this.lang = lang;
061 }
062
063 /**
064 * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
065 */
066 public void startElement(String uri, String localName, String qName,
067 Attributes atts) throws SAXException {
068 if(injected) {
069 super.startElement(uri, localName, qName, atts);
070 } else {
071 AttributesImpl attributes = new AttributesImpl(atts);
072 attributes.addAttribute("http://www.w3.org/XML/1998/namespace", "lang",
073 "xml:lang", "CDATA", LangUtil.localeToCode(lang));
074 super.startElement(uri, localName, qName, attributes);
075 injected = true;
076 }
077 }
078 }