de.micromata.genome.gwiki.page.impl.wiki.MacroAttributes.java Source code

Java tutorial

Introduction

Here is the source code for de.micromata.genome.gwiki.page.impl.wiki.MacroAttributes.java

Source

//
// Copyright (C) 2010-2016 Roger Rene Kommer & Micromata GmbH
//
// Licensed 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.
//

package de.micromata.genome.gwiki.page.impl.wiki;

import java.io.Serializable;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import de.micromata.genome.gwiki.model.GWikiProps;
import de.micromata.genome.gwiki.page.impl.wiki.fragment.GWikiFragmentChildContainer;
import de.micromata.genome.gwiki.utils.WebUtils;

/**
 * parse and Held command args
 * 
 * @author Roger Rene Kommer (r.kommer@micromata.de)
 * 
 */
public class MacroAttributes implements Serializable {
    public static final String DEFAULT_VALUE_KEY = "defaultValue";

    private static final long serialVersionUID = -2591357184191470111L;

    private String cmd;

    private GWikiProps args = new GWikiProps();

    private String body;

    private GWikiFragmentChildContainer childFragment;

    private String requestPrefix;

    public MacroAttributes() {

    }

    /**
     * Make a deep copy except childFragment, which only be shallow copied.
     * 
     * @param other
     */
    public MacroAttributes(MacroAttributes other) {
        this.cmd = other.cmd;
        this.body = other.body;
        this.args = new GWikiProps(other.args);
        this.childFragment = other.childFragment;
        this.requestPrefix = other.requestPrefix;
    }

    public MacroAttributes(String text) {
        parse(text);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        toString(sb);
        return sb.toString();
    }

    public String escapeValue(String value) {
        if (StringUtils.indexOfAny(value, new char[] { '|', '}', '{', '=' }) == -1) {
            return value;
        }
        return '"' + WebUtils.escapeJavaScript(value) + '"';
    }

    public void toString(StringBuilder sb) {
        sb.append("{");
        toHeadContent(sb);
        sb.append("}");
    }

    public void toHeadContent(StringBuilder sb) {
        sb.append(getCmd());
        if (getArgs().isEmpty() == true) {
            return;
        }
        String defSt = getDefaultValue();
        sb.append(":");
        boolean preBar = false;
        if (defSt != null) {
            sb.append(escapeValue(defSt));
            preBar = true;
        }
        for (Map.Entry<String, String> me : getArgs().getMap().entrySet()) {
            if (MacroAttributes.DEFAULT_VALUE_KEY.equals(me.getKey()) == true) {
                continue;
            }
            if (preBar == true) {
                sb.append("|");
            }
            sb.append(me.getKey()).append("=").append(escapeValue(me.getValue()));
            preBar = true;
        }

    }

    public void parse(String text) {
        // format cmd:key=value|key=value
        int idx = text.indexOf(':');
        if (idx == -1) {
            cmd = text;
            return;
        }
        cmd = text.substring(0, idx);
        String argstr = text.substring(idx + 1);
        args = new GWikiProps(MacroAttributesUtils.decode(argstr));
        return;
    }

    public static String escape(String k) {
        k = StringUtils.replace(k, "\\", "\\\\");
        k = StringUtils.replace(k, "|", "\\|");
        k = StringUtils.replace(k, "=", "\\=");
        return k;

    }

    public static String encode(Map<String, String> map) {
        if (map == null) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        boolean isFirst = true;
        for (Map.Entry<String, String> me : map.entrySet()) {
            if (isFirst == false) {
                sb.append("|");
            }
            isFirst = false;
            String k = me.getKey();
            k = escape(k);
            sb.append(k).append("=");
            String v = me.getValue();
            v = escape(v);
            sb.append(v);
        }
        return sb.toString();
    }

    public String getDefaultValue() {
        return getArgs().getStringValue(DEFAULT_VALUE_KEY);
    }

    public String getCmd() {
        return cmd;
    }

    public void setCmd(String cmd) {
        this.cmd = cmd;
    }

    public GWikiProps getArgs() {
        return args;
    }

    public void setArgs(GWikiProps args) {
        this.args = args;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public GWikiFragmentChildContainer getChildFragment() {
        return childFragment;
    }

    public void setChildFragment(GWikiFragmentChildContainer childFragment) {
        this.childFragment = childFragment;
    }

    public String getRequestPrefix() {
        return requestPrefix;
    }

    public void setRequestPrefix(String requestPrefix) {
        this.requestPrefix = requestPrefix;
    }

}