Package org.freeplane.features.format

Source Code of org.freeplane.features.format.Scanner

/*
*  Freeplane - mind map editor
*  Copyright (C) 2011 Volker Boerchers
*
*  This file author is Volker Boerchers
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 2 of the License, or
*  (at your option) any later version.
*
*  This program 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 General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.features.format;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.freeplane.core.util.TextUtils;
import org.freeplane.n3.nanoxml.XMLElement;

/** Scanner.scan(string) uses a number of Parsers to convert string into a Number, a Date or whatever. */
public class Scanner {
  private static final String ELEM_SCANNER = "scanner";
  private static final String ATTRIB_LOCALE = "locale";
  private static final String ATTRIB_DEFAULT = "default";
  private static final String ELEM_CHECKFIRSTCHAR = "checkfirstchar";
  private static final String ATTRIB_DISABLED = "disabled";
  private static final String ATTRIB_CHARS = "chars";
  private final ArrayList<String> locales;
  private final boolean isDefault;
  private String firstChars;
  private boolean checkFirstChars;
  private ArrayList<Parser> parsers = new ArrayList<Parser>();

  public Scanner(String[] locales, boolean isDefault) {
    this.locales = new ArrayList<String>(Arrays.asList(locales));
    this.isDefault = isDefault;
    validate();
  }

  private void validate() {
    if (locales.isEmpty())
      throw new IllegalArgumentException("attribute " + ATTRIB_LOCALE + " is mandatory and may not be empty");
  }

  public ArrayList<String> getLocales() {
    return locales;
  }

  public boolean isDefault() {
    return isDefault;
  }

  public String getFirstChars() {
    return firstChars;
  }

  public void setFirstChars(String firstChars) {
    this.firstChars = firstChars;
    checkFirstChars = !TextUtils.isEmpty(firstChars);
  }

  public void addParser(Parser parser) {
    parsers.add(parser);
  }

    public List<Parser> getParsers() {
        return new ArrayList<Parser>(parsers);
    }

  public XMLElement toXml() {
    final XMLElement xmlElement = new XMLElement(ELEM_SCANNER);
    xmlElement.setAttribute(ATTRIB_LOCALE, StringUtils.join(locales.iterator(), ","));
    if (isDefault)
    xmlElement.setAttribute(ATTRIB_DEFAULT, "true");
    xmlElement.addChild(firstCharsToXml());
    for (Parser parser : parsers) {
      xmlElement.addChild(parser.toXml());
    }
    return xmlElement;
  }

  private XMLElement firstCharsToXml() {
    final XMLElement xmlElement = new XMLElement(ELEM_CHECKFIRSTCHAR);
    if (checkFirstChars)
      xmlElement.setAttribute(ATTRIB_CHARS, firstChars);
    else
      xmlElement.setAttribute(ATTRIB_DISABLED, "true");
    return xmlElement;
  }

  public boolean localeMatchesExactly(String locale) {
    return locales.contains(locale);
  }

  public boolean countryMatches(String locale) {
    return locales.contains(locale.replaceFirst("_.*", ""));
  }

  public Object parse(String string) {
    if (TextUtils.isEmpty(string) || (checkFirstChars && firstChars.indexOf(string.charAt(0)) == -1))
      return string;
    if(string.charAt(0) == '\'')
        return string;
    for (Parser parser : parsers) {
      final Object object = parser.parse(string);
      if (object != null)
        return object;
    }
    return string;
  }
}
TOP

Related Classes of org.freeplane.features.format.Scanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.