Package com.floreysoft.jmte.token

Source Code of com.floreysoft.jmte.token.StringToken

package com.floreysoft.jmte.token;

import java.util.List;

import com.floreysoft.jmte.NamedRenderer;
import com.floreysoft.jmte.Renderer;
import com.floreysoft.jmte.TemplateContext;
import com.floreysoft.jmte.encoder.Encoder;
import com.floreysoft.jmte.renderer.RawRenderer;

public class StringToken extends ExpressionToken {
  // ${<h1>,address(NIX),</h1>;long(full)}
  private final String defaultValue; // NIX
  private final String prefix; // <h1>
  private final String suffix; // </h1>
  private final String rendererName; // long
  private final String parameters; // full

  public StringToken() {
    this("", "", null, null, null, null, null);
  }

  public StringToken(String text, String variableName, String defaultValue,
      String prefix, String suffix, String rendererName, String parameters) {
    super(variableName);
    this.defaultValue = defaultValue;
    this.prefix = prefix;
    this.suffix = suffix;
    this.rendererName = rendererName;
    this.parameters = parameters;
    setText(text);
  }

  public StringToken(String variableName) {
    this(variableName, variableName, null, null, null, null, null);
  }

  public StringToken(String text, List<String> segments, String variableName,
      String defaultValue, String prefix, String suffix,
      String rendererName, String parameters) {
    super(segments, variableName);
    this.defaultValue = defaultValue;
    this.prefix = prefix;
    this.suffix = suffix;
    this.rendererName = rendererName;
    this.parameters = parameters;
    setText(text);
  }

  public StringToken(List<String> segments, String variableName) {
    super(segments, variableName);
    this.defaultValue = null;
    this.prefix = null;
    this.suffix = null;
    this.rendererName = null;
    this.parameters = null;
  }

  public String getPrefix() {
    return prefix;
  }

  public String getSuffix() {
    return suffix;
  }

  public String getDefaultValue() {
    return defaultValue;
  }

  @SuppressWarnings("unchecked")
  @Override
  public Object evaluate(TemplateContext context) {
    boolean rawRendering = false;
    final Object value = evaluatePlain(context);

    final String renderedResult;
    if (value == null || value.equals("")) {
      renderedResult = defaultValue != null ? defaultValue : "";
    } else {
      String namedRendererResult = null;
      if (rendererName != null && !rendererName.equals("")) {
        final NamedRenderer rendererForName = context
            .resolveNamedRenderer(rendererName);
        if (rendererForName != null) {
          if (rendererForName instanceof RawRenderer) {
            rawRendering = true;
          }
          namedRendererResult = rendererForName.render(value, parameters, context.locale);
        }
      }
      if (namedRendererResult != null) {
        renderedResult = namedRendererResult;
      } else {
        final Renderer<Object> rendererForClass = (Renderer<Object>) context
            .resolveRendererForClass(value.getClass());
        if (rendererForClass != null) {
          if (rendererForClass instanceof RawRenderer) {
            rawRendering = true;
          }
          renderedResult = rendererForClass.render(value, context.locale);
        } else {
          renderedResult = value.toString();
        }
      }
    }

    if (renderedResult == null || renderedResult.equals("")) {
      return renderedResult;
    } else {
      final String prefixedRenderedResult = (prefix != null ? prefix : "") + renderedResult + (suffix != null ? suffix : "");
      Encoder encoder = context.getEncoder();
      if (!rawRendering && encoder != null) {
        final String encodedPrefixedRenderedResult = encoder.encode(prefixedRenderedResult);
        return encodedPrefixedRenderedResult;
      } else {
        return prefixedRenderedResult;
      }
    }
  }

  public String getRendererName() {
    return rendererName;
  }

  public String getParameters() {
    return parameters;
  }

  @Override
  public String emit() {
    StringBuilder sb = new StringBuilder();
    if ( prefix != null ) {
      sb.append(prefix).append(',');
    }
    sb.append(getExpression());
    if ( defaultValue != null ) {
      sb.append('(').append(defaultValue).append(')');
    }
    if ( suffix != null ) {
      sb.append(',').append(suffix);
    }
    if ( rendererName != null ) {
      sb.append(';').append(rendererName);
    }
    if ( parameters != null ) {
      sb.append('(').append(parameters).append(')');
    }
    return sb.toString();
  }
}
TOP

Related Classes of com.floreysoft.jmte.token.StringToken

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.