de.micromata.genome.gwiki.page.impl.wiki.fragment.GWikiFragmentImage.java Source code

Java tutorial

Introduction

Here is the source code for de.micromata.genome.gwiki.page.impl.wiki.fragment.GWikiFragmentImage.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.fragment;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;

import de.micromata.genome.gwiki.model.AuthorizationFailedException;
import de.micromata.genome.gwiki.page.GWikiContext;
import de.micromata.genome.gwiki.page.RenderModes;
import de.micromata.genome.gwiki.page.impl.wiki.MacroAttributesUtils;

public class GWikiFragmentImage extends GWikiFragmentBase {

    private static final long serialVersionUID = 4699829156802232146L;

    /**
     * requestAttribute.
     * 
     * Contains a set of included image pageIds
     */
    public static final String WIKIGENINCLUDEDIMAGES = "WIKIGENINCLUDEDIMAGES";

    public static final String WIKI_MAX_IMAGE_WIDTH = "WIKI_MAX_IMAGE_WIDTH";

    private String target;

    private String width;

    private String height;

    private String border;

    private String alt;

    private String hspace;

    private String vspace;

    private String style;

    private String styleClass;

    private String thumbnail;

    public GWikiFragmentImage(String target) {
        this.target = target;
        if (target != null) {
            int idx = target.indexOf('|');
            if (idx != -1) {
                String rest = target.substring(idx + 1);
                this.target = target.substring(0, idx);
                Map<String, String> m = MacroAttributesUtils.decode(rest);
                try {
                    BeanUtilsBean.getInstance().populate(this, m);
                } catch (Exception ex) {
                    throw new RuntimeException("Invalid image arguments: " + ex.getMessage(), ex);
                }
            }
        }

    }

    @Override
    public List<GWikiFragment> getChilds() {
        return Collections.emptyList();
    }

    @Override
    public void getSource(StringBuilder sb) {
        sb.append("!").append(target);
        if (StringUtils.isNotEmpty(width) == true) {
            sb.append("|").append("width=").append(width);
        }
        if (StringUtils.isNotEmpty(height) == true) {
            sb.append("|").append("height=").append(height);
        }
        if (StringUtils.isNotEmpty(border) == true) {
            sb.append("|").append("border=").append(border);
        }
        if (StringUtils.isNotEmpty(alt) == true) {
            sb.append("|").append("alt=").append(alt);
        }
        if (StringUtils.isNotEmpty(hspace) == true) {
            sb.append("|").append("hspace=").append(hspace);
        }
        if (StringUtils.isNotEmpty(vspace) == true) {
            sb.append("|").append("vspace=").append(vspace);
        }
        if (StringUtils.isNotEmpty(style) == true) {
            sb.append("|").append("style=").append(style);
        }
        if (StringUtils.isNotEmpty(styleClass) == true) {
            sb.append("|").append("class=").append(styleClass);
        }
        if (StringUtils.isNotEmpty(thumbnail) == true) {
            sb.append("|").append("thumbnail=").append(thumbnail);
        }
        sb.append("!");
    }

    @Override
    @SuppressWarnings("unchecked")
    public boolean render(GWikiContext ctx) {
        if (RenderModes.NoImages.isSet(ctx.getRenderMode()) == true) {
            return true;
        }
        String lwidth = width;
        String ltarget = target;
        if (RenderModes.LocalImageLinks.isSet(ctx.getRenderMode()) == true) {

            String o = ObjectUtils.toString(ctx.getRequestAttribute(WIKI_MAX_IMAGE_WIDTH));
            if (o != null && lwidth == null) {
                lwidth = o;
            }
        }
        Set<String> set = (Set<String>) ctx.getRequestAttribute(WIKIGENINCLUDEDIMAGES);
        if (set != null) {
            set.add(ltarget);
        }
        if (StringUtils.isNotEmpty(thumbnail) == true) {
            ctx.append("<a class='showimage' href='" + StringEscapeUtils.escapeXml(ltarget) + "'>");
        }
        if (GWikiFragmentLink.isGlobalUrl(target) == true) {
            // ctx.append("<img src='", target, "'>");
        } else {
            if (RenderModes.GlobalImageLinks.isSet(ctx.getRenderMode()) == true) {
                ltarget = ctx.globalUrl(target);
            } else if (RenderModes.LocalImageLinks.isSet(ctx.getRenderMode()) == true) {
                ltarget = target;
            } else {
                ltarget = ctx.localUrl(target);
            }
        }
        ctx.append("<img src='", StringEscapeUtils.escapeXml(ltarget), "'");
        if (StringUtils.isNotEmpty(lwidth) == true) {
            ctx.append(" width='", StringEscapeUtils.escapeXml(lwidth), "'");
        }
        if (StringUtils.isNotEmpty(height) == true) {
            ctx.append(" height='", StringEscapeUtils.escapeXml(height), "'");
        }
        if (StringUtils.isNotEmpty(border) == true) {
            ctx.append(" border='", StringEscapeUtils.escapeXml(border), "'");
        }
        if (StringUtils.isNotEmpty(alt) == true) {
            ctx.append(" alt='", StringEscapeUtils.escapeXml(alt), "'");
        } else {
            ctx.append(" alt=''");
        }
        if (StringUtils.isNotEmpty(hspace) == true) {
            ctx.append(" hspace='", StringEscapeUtils.escapeXml(hspace), "'");
        }
        if (StringUtils.isNotEmpty(width) == true) {
            ctx.append(" width='", StringEscapeUtils.escapeXml(width), "'");
        }
        if (StringUtils.isNotEmpty(style) == true) {
            ctx.append(" style='", StringEscapeUtils.escapeXml(style), "'");
        }

        String tstyleClass = "weditimg";
        if (StringUtils.isNotEmpty(styleClass) == true) {
            tstyleClass += " " + styleClass;
        }
        if (StringUtils.isNotEmpty(thumbnail) == true) {
            if (thumbnail.equals("small") == true || thumbnail.equals("large") == true) {
                tstyleClass += " " + thumbnail;
            } else {
                tstyleClass += " mediumThumb";
            }
        }
        ctx.append(" class='", StringEscapeUtils.escapeXml(tstyleClass), "'");
        if (RenderModes.ForRichTextEdit.isSet(ctx.getRenderMode()) == true) {
            ctx.append(" data-wiki-url='", StringEscapeUtils.escapeXml(target), "'");
            ctx.append(" data-wiki-height='", StringEscapeUtils.escapeXml(height), "'");
            ctx.append(" data-wiki-width='", StringEscapeUtils.escapeXml(width), "'");
            ctx.append(" data-wiki-style='", StringEscapeUtils.escapeXml(style), "'");
            ctx.append(" data-wiki-styleClass='", StringEscapeUtils.escapeXml(styleClass), "'");
            ctx.append(" data-wiki-thumbnail='", StringEscapeUtils.escapeXml(thumbnail), "'");

        }
        ctx.append("/>");
        if (StringUtils.isNotEmpty(thumbnail) == true) {
            ctx.append("</a>");
        }
        return true;
    }

    @Override
    public boolean requirePrepareHeader(GWikiContext ctx) {
        return StringUtils.isNotEmpty(thumbnail) == true;
    }

    @Override
    public void prepareHeader(GWikiContext ctx) {
        if (StringUtils.isNotEmpty(thumbnail) == true) {
            ctx.getRequiredJs().add("static/js/jquery.thumbs.js");
        }
        super.prepareHeader(ctx);
    }

    @Override
    public void ensureRight(GWikiContext ctx) throws AuthorizationFailedException {
        // empty
    }

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public String getWidth() {
        return width;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }

    public String getBorder() {
        return border;
    }

    public void setBorder(String border) {
        this.border = border;
    }

    public String getAlt() {
        return alt;
    }

    public void setAlt(String alt) {
        this.alt = alt;
    }

    public String getHspace() {
        return hspace;
    }

    public void setHspace(String hspace) {
        this.hspace = hspace;
    }

    public String getVspace() {
        return vspace;
    }

    public void setVspace(String vspace) {
        this.vspace = vspace;
    }

    public String getStyle() {
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getStyleClass() {
        return styleClass;
    }

    public void setStyleClass(String styleClass) {
        this.styleClass = styleClass;
    }

    public String getThumbnail() {
        return thumbnail;
    }

    public void setThumbnail(String thumpnail) {
        this.thumbnail = thumpnail;
    }

}