org.beangle.struts2.view.component.UIBean.java Source code

Java tutorial

Introduction

Here is the source code for org.beangle.struts2.view.component.UIBean.java

Source

/* Copyright c 2005-2012.
 * Licensed under GNU  LESSER General Public License, Version 3.
 * http://www.gnu.org/licenses
 */
package org.beangle.struts2.view.component;

import java.io.Writer;
import java.util.Collections;
import java.util.Map;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.CharUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.TextProviderHelper;
import org.beangle.commons.lang.StrUtils;
import org.beangle.struts2.view.template.TemplateEngine;
import org.beangle.struts2.view.template.Theme;
import org.beangle.struts2.view.template.ThemeStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.ValueStack;

/**
 * @author chaostone
 */
public abstract class UIBean extends Component {
    final protected static transient Random RANDOM = new Random();

    protected Logger log = LoggerFactory.getLogger(UIBean.class);

    protected String id;

    protected String name;
    protected String label;
    protected String title;
    protected String required;

    protected Theme theme;
    protected Theme defaultTheme;

    public UIBean(ValueStack stack) {
        super(stack);
    }

    protected void evaluateParams() {
    }

    @Override
    public boolean end(Writer writer, String body) {
        evaluateParams();
        try {
            mergeTemplate(writer);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return false;
    }

    protected void mergeTemplate(Writer writer) throws Exception {
        Form myform = findAncestor(Form.class);
        if (myform == null || myform.editable(this)) {
            TemplateEngine engine = getContainer().getInstance(TemplateEngine.class);
            engine.render(getTheme().getTemplatePath(getClass(), engine.getSuffix()), stack, writer, this);
        } else {
            log.info(this.name + " is hidden");
        }
    }

    /**
     * ???
     * 
     * @return  ?
     */
    public String getParameterString() {
        StringBuilder sb = new StringBuilder(parameters.size() * 10);
        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
            String key = entry.getKey();
            if ("cssClass".equals(key))
                key = "class";
            sb.append(" ").append(key).append("=\"").append(entry.getValue().toString()).append("\"");
        }
        return sb.toString();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    protected Theme getTheme() {
        if (null == theme) {
            ThemeStack themestack = (ThemeStack) stack.getContext().get(Theme.THEME_STACK);
            if (null != themestack) {
                theme = themestack.peek();
            }
            if (theme == null) {
                theme = defaultTheme;
            }
            if (null == theme) {
                theme = (Theme) stack.getContext().get(Theme.THEME);
            }
            return theme;
        } else {
            return theme;
        }
    }

    public void setTheme(String theme) {
        this.theme = new Theme(theme);
    }

    /**
     * ?
     * 
     * @param text
     * @return ????.??
     */
    protected String getText(String text) {
        return getText(text, text);
    }

    protected String getText(String text, String defaultText) {
        if (StringUtils.isEmpty(text))
            return defaultText;
        if (!CharUtils.isAsciiAlpha(text.charAt(0)))
            return defaultText;
        if (-1 == text.indexOf('.') || -1 < text.indexOf(' ')) {
            return defaultText;
        } else {
            return TextProviderHelper.getText(text, defaultText, Collections.emptyList(), stack, false);
        }
    }

    protected String getRequestURI() {
        HttpServletRequest req = (HttpServletRequest) stack.getContext().get(ServletActionContext.HTTP_REQUEST);
        return req.getRequestURI();
    }

    protected Object getValue(Object obj, String property) {
        stack.push(obj);
        try {
            return stack.findValue(property);
        } finally {
            stack.pop();
        }
    }

    protected Container getContainer() {
        return (Container) stack.getContext().get(ActionContext.CONTAINER);
    }

    protected String render(String uri) {
        if (StringUtils.isNotEmpty(uri) && uri.startsWith("/")) {
            uri = ServletActionContext.getRequest().getContextPath() + uri;
        }
        uri = getContainer().getInstance(ActionUrlRender.class).render(getRequestURI(), uri);
        if (uri.indexOf("?") < 0) {
            uri += "?";
        }
        uri += "&t=" + System.currentTimeMillis();
        return uri;
    }

    protected void generateIdIfEmpty() {
        if (StringUtils.isEmpty(this.id)) {
            int nextInt = RANDOM.nextInt();
            nextInt = (nextInt == Integer.MIN_VALUE) ? Integer.MAX_VALUE : Math.abs(nextInt);
            this.id = Theme.getTemplateName(getClass()) + String.valueOf(nextInt);
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLabel() {
        //return label;
        if (StringUtils.isNotEmpty(label) && label.indexOf("+") >= 0) {
            String subtitle = label.substring(0, label.indexOf("+"));
            return getText(subtitle) + getText(label.substring(label.indexOf("+") + 1, label.length()));
        }
        return getText(label);
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public String getRequired() {
        return required;
    }

    public void setRequired(String required) {
        this.required = required;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public Theme getDefaultTheme() {
        return defaultTheme;
    }

    public void setDefaultTheme(Theme defaultTheme) {
        this.defaultTheme = defaultTheme;
    }

}