All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.abdera.util.AbstractParserOptions Maven / Gradle / Ivy

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.  For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera.util;

import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;

import org.apache.abdera.factory.Factory;
import org.apache.abdera.filter.ParseFilter;
import org.apache.abdera.parser.ParserOptions;
import org.apache.abdera.util.CompressionUtil.CompressionCodec;

/**
 * Non thread-safe abstract implementation of ParserOptions
 */
public abstract class AbstractParserOptions 
  implements ParserOptions, Cloneable {

  protected Factory factory = null;
  protected String charset = null;
  protected ParseFilter parseFilter = null;
  protected boolean detect = false;
  protected boolean preserve = true;
  protected boolean filterreserved = false;
  protected char replacement = 0;
  protected CompressionCodec[] codecs = null;
  protected boolean resolveentities = true;
  protected Map entities = new HashMap();
  
  protected boolean qnamealiasing = false;
  protected Map aliases = null;

  protected abstract void initFactory();
  protected abstract void checkFactory(Factory factory);

  protected AbstractParserOptions() {
    initDefaultEntities();
  }
  
  public Object clone() throws CloneNotSupportedException {
    AbstractParserOptions copy = (AbstractParserOptions) super.clone();
   
    // Object's clone implementation takes care of the rest, we just need
    // deep copies of the two filters, in case they're carrying around some
    // state with them.
 
    if (parseFilter != null)
      copy.parseFilter = (ParseFilter) parseFilter.clone();
    
    return copy;
  }

  public Factory getFactory() {
    if (factory == null) initFactory();
    return factory;
  }
  
  public ParserOptions setFactory(Factory factory) {
    checkFactory(factory);
    this.factory = factory;
    return this;
  }

  public String getCharset() {
    return charset;
  }

  public ParserOptions setCharset(String charset) {
    this.charset = charset;
    return this;
  }

  public ParseFilter getParseFilter() {
    return parseFilter;
  }
  public ParserOptions setParseFilter(ParseFilter parseFilter) {
    this.parseFilter = parseFilter;
    return this;
  }
  
  public boolean getAutodetectCharset() {
    return this.detect;
  }
  
  public ParserOptions setAutodetectCharset(boolean detect) {
    this.detect = detect;
    return this;
  }
  
  public boolean getMustPreserveWhitespace() {
    return preserve;
  }
  
  public ParserOptions setMustPreserveWhitespace(boolean preserve) {
    this.preserve = preserve;
    return this;
  }
  
  public boolean getFilterRestrictedCharacters() {
    return filterreserved;
  }
  
  public ParserOptions setFilterRestrictedCharacters(boolean filter) {
    this.filterreserved = filter;
    return this;
  }
  
  public char getFilterRestrictedCharacterReplacement() {
    return replacement;
  }
  
  public ParserOptions setFilterRestrictedCharacterReplacement(char replacement) {
    this.replacement = replacement;
    return this;
  }
  
  public CompressionCodec[] getCompressionCodecs() {
    return codecs;
  }
  
  public ParserOptions setCompressionCodecs(CompressionCodec... codecs) {
    this.codecs = codecs;
    return this;
  }
  
  public ParserOptions registerEntity(String name, String value) {
    entities.put(name, value);
    return this;
  }

  private void initDefaultEntities() {
    registerEntity("quot","\"");
    registerEntity("amp","\u0026");
    registerEntity("lt","\u003C");
    registerEntity("gt","\u003E");
    registerEntity("nbsp"," ");
    registerEntity("iexcl","\u00A1");
    registerEntity("cent","\u00A2");
    registerEntity("pound","\u00A3");
    registerEntity("curren","\u00A4");
    registerEntity("yen","\u00A5");
    registerEntity("brvbar","\u00A6");
    registerEntity("sect","\u00A7");
    registerEntity("uml","\u00A8");
    registerEntity("copy","\u00A9");
    registerEntity("ordf","\u00AA");
    registerEntity("laquo","\u00AB");
    registerEntity("not","\u00AC");
    registerEntity("shy","\u00AD");
    registerEntity("reg","\u00AE");
    registerEntity("macr","\u00AF");
    registerEntity("deg","\u00B0");
    registerEntity("plusmn","\u00B1");
    registerEntity("sup2","\u00B2");
    registerEntity("sup3","\u00B3");
    registerEntity("acute","\u00B4");
    registerEntity("micro","\u00B5");
    registerEntity("para","\u00B6");
    registerEntity("middot","\u00B7");
    registerEntity("cedil","\u00B8");
    registerEntity("sup1","\u00B9");
    registerEntity("ordm","\u00BA");
    registerEntity("raquo","\u00BB");
    registerEntity("frac14","\u00BC");
    registerEntity("frac12","\u00BD");
    registerEntity("frac34","\u00BE");
    registerEntity("iquest","\u00BF");
    registerEntity("agrave","\u00C0");
    registerEntity("aacute","\u00C1");
    registerEntity("acirc","\u00C2");
    registerEntity("atilde","\u00C3");
    registerEntity("auml","\u00C4");
    registerEntity("aring","\u00C5");
    registerEntity("aelig","\u00C6");
    registerEntity("ccedil","\u00C7");
    registerEntity("egrave","\u00C8");
    registerEntity("eacute","\u00C9");
    registerEntity("ecirc","\u00CA");
    registerEntity("euml","\u00CB");
    registerEntity("igrave","\u00CC");
    registerEntity("iacute","\u00CD");
    registerEntity("icirc","\u00CE");
    registerEntity("iuml","\u00CF");
    registerEntity("eth","\u00D0");
    registerEntity("ntilde","\u00D1");
    registerEntity("ograve","\u00D2");
    registerEntity("oacute","\u00D3");
    registerEntity("ocirc","\u00D4");
    registerEntity("otilde","\u00D5");
    registerEntity("ouml","\u00D6");
    registerEntity("times","\u00D7");
    registerEntity("oslash","\u00D8");
    registerEntity("ugrave","\u00D9");
    registerEntity("uacute","\u00DA");
    registerEntity("ucirc","\u00DB");
    registerEntity("uuml","\u00DC");
    registerEntity("yacute","\u00DD");
    registerEntity("thorn","\u00DE");
    registerEntity("szlig","\u00DF");
    registerEntity("agrave","\u00E0");
    registerEntity("aacute","\u00E1");
    registerEntity("acirc","\u00E2");
    registerEntity("atilde","\u00E3");
    registerEntity("auml","\u00E4");
    registerEntity("aring","\u00E5");
    registerEntity("aelig","\u00E6");
    registerEntity("ccedil","\u00E7");
    registerEntity("egrave","\u00E8");
    registerEntity("eacute","\u00E9");
    registerEntity("ecirc","\u00EA");
    registerEntity("euml","\u00EB");
    registerEntity("igrave","\u00EC");
    registerEntity("iacute","\u00ED");
    registerEntity("icirc","\u00EE");
    registerEntity("iuml","\u00EF");
    registerEntity("eth","\u00F0");
    registerEntity("ntilde","\u00F1");
    registerEntity("ograve","\u00F2");
    registerEntity("oacute","\u00F3");
    registerEntity("ocirc","\u00F4");
    registerEntity("otilde","\u00F5");
    registerEntity("ouml","\u00F6");
    registerEntity("divide","\u00F7");
    registerEntity("oslash","\u00F8");
    registerEntity("ugrave","\u00F9");
    registerEntity("uacute","\u00FA");
    registerEntity("ucirc","\u00FB");
    registerEntity("uuml","\u00FC");
    registerEntity("yacute","\u00FD");
    registerEntity("thorn","\u00FE");
    registerEntity("yuml","\u00FF");
    registerEntity("oelig","\u0152");
    registerEntity("oelig","\u0153");
    registerEntity("scaron","\u0160");
    registerEntity("scaron","\u0161");
    registerEntity("yuml","\u0178");
    registerEntity("fnof","\u0192");
    registerEntity("circ","\u02C6");
    registerEntity("tilde","\u02DC");
    registerEntity("alpha","\u0391");
    registerEntity("beta","\u0392");
    registerEntity("gamma","\u0393");
    registerEntity("delta","\u0394");
    registerEntity("epsilon","\u0395");
    registerEntity("zeta","\u0396");
    registerEntity("eta","\u0397");
    registerEntity("theta","\u0398");
    registerEntity("iota","\u0399");
    registerEntity("kappa","\u039A");
    registerEntity("lambda","\u039B");
    registerEntity("mu","\u039C");
    registerEntity("nu","\u039D");
    registerEntity("xi","\u039E");
    registerEntity("omicron","\u039F");
    registerEntity("pi","\u03A0");
    registerEntity("rho","\u03A1");
    registerEntity("sigma","\u03A3");
    registerEntity("tau","\u03A4");
    registerEntity("upsilon","\u03A5");
    registerEntity("phi","\u03A6");
    registerEntity("chi","\u03A7");
    registerEntity("psi","\u03A8");
    registerEntity("omega","\u03A9");
    registerEntity("alpha","\u03B1");
    registerEntity("beta","\u03B2");
    registerEntity("gamma","\u03B3");
    registerEntity("delta","\u03B4");
    registerEntity("epsilon","\u03B5");
    registerEntity("zeta","\u03B6");
    registerEntity("eta","\u03B7");
    registerEntity("theta","\u03B8");
    registerEntity("iota","\u03B9");
    registerEntity("kappa","\u03BA");
    registerEntity("lambda","\u03BB");
    registerEntity("mu","\u03BC");
    registerEntity("nu","\u03BD");
    registerEntity("xi","\u03BE");
    registerEntity("omicron","\u03BF");
    registerEntity("pi","\u03C0");
    registerEntity("rho","\u03C1");
    registerEntity("sigmaf","\u03C2");
    registerEntity("sigma","\u03C3");
    registerEntity("tau","\u03C4");
    registerEntity("upsilon","\u03C5");
    registerEntity("phi","\u03C6");
    registerEntity("chi","\u03C7");
    registerEntity("psi","\u03C8");
    registerEntity("omega","\u03C9");
    registerEntity("thetasym","\u03D1");
    registerEntity("upsih","\u03D2");
    registerEntity("piv","\u03D6");
    registerEntity("ensp","\u2002");
    registerEntity("emsp","\u2003");
    registerEntity("thinsp","\u2009");
    registerEntity("zwnj","\u200C");
    registerEntity("zwj","\u200D");
    registerEntity("lrm","\u200E");
    registerEntity("rlm","\u200F");
    registerEntity("ndash","\u2013");
    registerEntity("mdash","\u2014");
    registerEntity("lsquo","\u2018");
    registerEntity("rsquo","\u2019");
    registerEntity("sbquo","\u201A");
    registerEntity("ldquo","\u201C");
    registerEntity("rdquo","\u201D");
    registerEntity("bdquo","\u201E");
    registerEntity("dagger","\u2020");
    registerEntity("dagger","\u2021");
    registerEntity("bull","\u2022");
    registerEntity("hellip","\u2026");
    registerEntity("permil","\u2030");
    registerEntity("prime","\u2032");
    registerEntity("prime","\u2033");
    registerEntity("lsaquo","\u2039");
    registerEntity("rsaquo","\u203A");
    registerEntity("oline","\u203E");
    registerEntity("frasl","\u2044");
    registerEntity("euro","\u20AC");
    registerEntity("image","\u2111");
    registerEntity("weierp","\u2118");
    registerEntity("real","\u211C");
    registerEntity("trade","\u2122");
    registerEntity("alefsym","\u2135");
    registerEntity("larr","\u2190");
    registerEntity("uarr","\u2191");
    registerEntity("rarr","\u2192");
    registerEntity("darr","\u2193");
    registerEntity("harr","\u2194");
    registerEntity("crarr","\u21B5");
    registerEntity("larr","\u21D0");
    registerEntity("uarr","\u21D1");
    registerEntity("rarr","\u21D2");
    registerEntity("darr","\u21D3");
    registerEntity("harr","\u21D4");
    registerEntity("forall","\u2200");
    registerEntity("part","\u2202");
    registerEntity("exist","\u2203");
    registerEntity("empty","\u2205");
    registerEntity("nabla","\u2207");
    registerEntity("isin","\u2208");
    registerEntity("notin","\u2209");
    registerEntity("ni","\u220B");
    registerEntity("prod","\u220F");
    registerEntity("sum","\u2211");
    registerEntity("minus","\u2212");
    registerEntity("lowast","\u2217");
    registerEntity("radic","\u221A");
    registerEntity("prop","\u221D");
    registerEntity("infin","\u221E");
    registerEntity("ang","\u2220");
    registerEntity("and","\u2227");
    registerEntity("or","\u2228");
    registerEntity("cap","\u2229");
    registerEntity("cup","\u222A");
    registerEntity("int","\u222B");
    registerEntity("there4","\u2234");
    registerEntity("sim","\u223C");
    registerEntity("cong","\u2245");
    registerEntity("asymp","\u2248");
    registerEntity("ne","\u2260");
    registerEntity("equiv","\u2261");
    registerEntity("le","\u2264");
    registerEntity("ge","\u2265");
    registerEntity("sub","\u2282");
    registerEntity("sup","\u2283");
    registerEntity("nsub","\u2284");
    registerEntity("sube","\u2286");
    registerEntity("supe","\u2287");
    registerEntity("oplus","\u2295");
    registerEntity("otimes","\u2297");
    registerEntity("perp","\u22A5");
    registerEntity("sdot","\u22C5");
    registerEntity("lceil","\u2308");
    registerEntity("rceil","\u2309");
    registerEntity("lfloor","\u230A");
    registerEntity("rfloor","\u230B");
    registerEntity("lang","\u2329");
    registerEntity("rang","\u232A");
    registerEntity("loz","\u25CA");
    registerEntity("spades","\u2660");
    registerEntity("clubs","\u2663");
    registerEntity("hearts","\u2665");
    registerEntity("diams","\u2666");
  }
  
  public String resolveEntity(String name) {
    return resolveentities ? entities.get(name.toLowerCase()) : null;
  }
  
  public ParserOptions setResolveEntities(boolean resolve) {
    this.resolveentities = resolve;
    return this;
  }
  
  public boolean getResolveEntities() {
    return this.resolveentities;
  }
  
  public Map getQNameAliasMap() {
    return aliases;
  }
  
  public ParserOptions setQNameAliasMap(Map map) {
    this.aliases = map;
    return this;
  }
  
  public boolean isQNameAliasMappingEnabled() {
    return qnamealiasing;
  }
  
  public ParserOptions setQNameAliasMappingEnabled(boolean enabled) {
    this.qnamealiasing = enabled;
    return this;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy