Package com.floreysoft.jmte.message

Source Code of com.floreysoft.jmte.message.ResourceBundleMessage

package com.floreysoft.jmte.message;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

import com.floreysoft.jmte.Engine;
import com.floreysoft.jmte.token.Token;

public class ResourceBundleMessage implements Message {

  protected static String getTemplate(ResourceBundle bundle, String key,
      String fallback) {
    return key != null && bundle.containsKey(key) ? bundle.getString(key)
        : fallback;
  }
 
  private final String messageCode;

  public ResourceBundleMessage(String messageCode) {
    this.messageCode = messageCode;
  }

  private String locationCode = "location";
  private String prefixCode = "prefix";
  private String frameCode = "frame";
  private Map<String, Object> argumentModel = new HashMap<String, Object>();
  private String baseName = "com.floreysoft.jmte.message.messages";

  public ResourceBundleMessage useLocationCode(String locationCode) {
    this.locationCode = locationCode;
    return this;
  }

  public ResourceBundleMessage onToken(Token token) {
    this.argumentModel.put("token", token);
    return this;
  }

  public ResourceBundleMessage usePrefixCode(String prefixCode) {
    this.prefixCode = prefixCode;
    return this;
  }

  public ResourceBundleMessage useFrameCode(String frameCode) {
    this.frameCode = frameCode;
    return this;
  }

  public ResourceBundleMessage withModel(Map<String, Object> model) {
    if (model != null) {
      this.argumentModel.putAll(model);
    }
    return this;
  }

  public ResourceBundleMessage withBaseName(String baseName) {
    this.baseName = baseName;
    return this;
  }

  public String getMessageCode() {
    return messageCode;
  }

  public String getLocationCode() {
    return locationCode;
  }

  public String getPrefixCode() {
    return prefixCode;
  }

  public String getFrameCode() {
    return frameCode;
  }

  public Map<String, Object> getArgumentModel() {
    return argumentModel;
  }

  public String getBaseName() {
    return baseName;
  }

  @Override
  public String format() {
    return format(new Locale("en"));
  }

  @Override
  public String format(Locale locale) {
    final ResourceBundle messages = ResourceBundle.getBundle(baseName, locale);
    final String frameTemplate = getTemplate(messages, frameCode, "${prefix} ${location}: ${message}");
    final String prefixTemplate = getTemplate(messages, prefixCode, "");
    final String locationTemplate = getTemplate(messages, locationCode, "");
    final String messageTemplate = getTemplate(messages, messageCode, "");
   
    Engine engine = new Engine();
    engine.setErrorHandler(new InternalErrorHandler());
    argumentModel.put("prefix", engine.transform(prefixTemplate, argumentModel));
    argumentModel.put("location", engine.transform(locationTemplate, argumentModel));
    argumentModel.put("message", engine.transform(messageTemplate, argumentModel));
   
    String transformed = engine.transform(frameTemplate, argumentModel);
    return transformed;

  }

  @Override
  public String formatPlain() {
    return formatPlain(new Locale("en"));
  }

  @Override
  public String formatPlain(Locale locale) {
    final ResourceBundle messages = ResourceBundle.getBundle(baseName, locale);
    final String messageTemplate = getTemplate(messages, messageCode, "");
   
    Engine engine = new Engine();
    engine.setErrorHandler(new InternalErrorHandler());
    String transformed = engine.transform(messageTemplate, argumentModel);
    return transformed;
  }
}
TOP

Related Classes of com.floreysoft.jmte.message.ResourceBundleMessage

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.