001/* 002 * flattr4j - A Java library for Flattr 003 * 004 * Copyright (C) 2011 Richard "Shred" Körber 005 * http://flattr4j.shredzone.org 006 * 007 * This program is free software: you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License / GNU Lesser 009 * General Public License as published by the Free Software Foundation, 010 * either version 3 of the License, or (at your option) any later version. 011 * 012 * Licensed under the Apache License, Version 2.0 (the "License"); 013 * you may not use this file except in compliance with the License. 014 * 015 * This program is distributed in the hope that it will be useful, 016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 018 */ 019package org.shredzone.flattr4j.web.tag; 020 021import java.io.IOException; 022 023import javax.servlet.jsp.JspException; 024import javax.servlet.jsp.tagext.BodyTagSupport; 025 026import org.shredzone.flattr4j.model.Category; 027import org.shredzone.flattr4j.model.CategoryId; 028import org.shredzone.flattr4j.model.Language; 029import org.shredzone.flattr4j.model.LanguageId; 030import org.shredzone.flattr4j.model.User; 031import org.shredzone.flattr4j.model.UserId; 032import org.shredzone.flattr4j.web.ButtonType; 033import org.shredzone.flattr4j.web.builder.LoaderBuilder; 034 035/** 036 * A tag that creates the JavaScript loader tag. 037 * 038 * @author Richard "Shred" Körber 039 */ 040public class LoaderTag extends BodyTagSupport { 041 private static final long serialVersionUID = -5892160942069969373L; 042 043 private LoaderBuilder builder; 044 private String var; 045 private String scope; 046 047 public void setBare(boolean bare) { 048 setupBuilder(); 049 if (bare) builder.bare(); 050 } 051 052 public void setManual(boolean manual) { 053 setupBuilder(); 054 if (manual) builder.manual(); 055 } 056 057 public void setHttps(boolean https) { 058 setupBuilder(); 059 if (https) builder.https(); 060 } 061 062 public void setPopout(boolean popout) { 063 setupBuilder(); 064 builder.popout(popout); 065 } 066 067 public void setUser(Object user) { 068 setupBuilder(); 069 if (user instanceof UserId) { 070 builder.user((UserId) user); 071 } else { 072 builder.user(User.withId(user.toString())); 073 } 074 } 075 076 public void setButton(Object type) { 077 setupBuilder(); 078 if (type instanceof ButtonType) { 079 builder.button((ButtonType) type); 080 } else { 081 builder.button(ButtonType.valueOf(type.toString().toUpperCase())); 082 } 083 } 084 085 public void setLanguage(Object language) { 086 setupBuilder(); 087 if (language instanceof LanguageId) { 088 builder.language((LanguageId) language); 089 } else { 090 builder.language(Language.withId(language.toString())); 091 } 092 } 093 094 public void setCategory(Object category) { 095 setupBuilder(); 096 if (category instanceof CategoryId) { 097 builder.category((CategoryId) category); 098 } else { 099 builder.category(Category.withId(category.toString())); 100 } 101 } 102 103 public void setPrefix(String prefix) { 104 setupBuilder(); 105 builder.prefix(prefix); 106 } 107 108 public void setVar(String var) { 109 this.var = var; 110 } 111 112 public void setScope(String scope) { 113 this.scope = scope; 114 } 115 116 @Override 117 public int doStartTag() throws JspException { 118 setupBuilder(); 119 return EVAL_BODY_INCLUDE; 120 } 121 122 @Override 123 public int doEndTag() throws JspException { 124 String tag = builder.toString(); 125 126 if (var != null) { 127 TagUtils.setScopedAttribute(pageContext, var, tag, scope); 128 129 } else { 130 try { 131 pageContext.getOut().print(tag); 132 } catch (IOException ex) { 133 throw new JspException(ex); 134 } 135 } 136 137 disposeBuilder(); 138 return EVAL_PAGE; 139 } 140 141 /** 142 * Creates a new builder instance, if not already done. 143 */ 144 protected void setupBuilder() { 145 if (builder == null) { 146 builder = new LoaderBuilder(); 147 } 148 } 149 150 /** 151 * Disposes the builder instance. 152 */ 153 protected void disposeBuilder() { 154 builder = null; 155 } 156 157}