Commit 71dd6834 by Tuukka Kivilahti

Merge branch 'logofuu' into 'master'

Change logo to be a cacheable one

Event logo was created dynamically for every request through the whole stack, straight from database. Each requests logo had also a unique url, which made caching the logo impossible. In the end we were using more time creating the logo than serving requests.

Change logo to be served from /dydata/logo which can be easily cached. Also, if event has no logo image set, create one from logo propertys textvalue.

See merge request !281
2 parents f7f04f68 27d99487
......@@ -95,21 +95,7 @@ public class JaasBean implements MoyaRealmBeanRemote {
user = eventUser.getUser();
}
// no user found, let's see if user is stupid and using email-address instead of username
// this is how it work's in theory, on practice, the fucking UserPrincipal get it's principal
// from used loginname, so, let's do this shit on loginview
/*if(user == null) {
List<User> users = userfacade.findByEmail(username);
// this must be 1, if there is more, it would just be quessing
logger.info("found by email some users {} ",users.size());
if(users.size() == 1) {
user = users.get(0);
eventUser = userbean.getEventUser(user,false);
}
}*/
logger.info("User '{}' with '{}' ", user, username);
// If there is no eventuser found, try to create one.
......
......@@ -31,12 +31,7 @@
<img src="#{request.contextPath}/resources/templates/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{!empty layoutView.headerimage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{empty layoutView.headerimage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
</c:otherwise>
</c:choose>
......
......@@ -31,12 +31,7 @@
<img src="#{request.contextPath}/resources/templates/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{!empty layoutView.headerimage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{empty layoutView.headerimage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
</c:otherwise>
</c:choose>
......
......@@ -25,12 +25,7 @@
<img src="#{request.contextPath}/resources/templates/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{!empty layoutView.headerimage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{empty layoutView.headerimage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
<!-- <img src="#{request.contextPath}/resources/templates/insomnia2/img/logo.png" />
<h1>STREAM INTRA</h1> -->
</c:otherwise>
......
......@@ -51,12 +51,7 @@
<img src="#{request.contextPath}/resources/templates/moyav2/img/dev_logo.png" alt="Development" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{layoutView.headerIsImage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{!layoutView.headerIsImage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
</c:otherwise>
</c:choose>
</h:link>
......
......@@ -90,10 +90,7 @@
<img src="#{request.contextPath}/resources/templates/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage id="eventlogo" rendered="#{layoutView.headerIsImage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{!layoutView.headerIsImage}">
<h1><h:outputText value="#{layoutView.headertext}" /></h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
</c:otherwise>
</c:choose>
</h:link>
......
......@@ -69,12 +69,7 @@
<img src="#{request.contextPath}/resources/templates/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{layoutView.headerIsImage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{!layoutView.headerIsImage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<img id="eventlogo" src="#{request.contextPath}/dydata/logo/#{layoutView.logoid}" />
</c:otherwise>
</c:choose>
</h:link>
......
......@@ -18,6 +18,11 @@
*/
package fi.codecrew.moya.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
......@@ -27,6 +32,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.imageio.ImageIO;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
......@@ -104,10 +110,26 @@ public class FileDownloadServlet extends GenericImageServlet {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
else if (urlparts.get(0).equals("logo")) {
// Urlparts.get(1) == event.id. But no need to check, Just return the logo for this event
LanEventProperty logo = orgbean.getProperty(LanEventPropertyKey.EVENT_LOGO);
if (logo != null) {
ret.setData(logo.getByteValue());
ret.setImagetype(logo.getByteMime());
String mime = logo.getByteMime();
byte[] data = logo.getByteValue();
if (mime == null || data == null || data.length == 0) {
try {
mime = "image/png";
data = makeImage(logo.getTextvalue()).toByteArray();
} catch (IOException e) {
mime = null;
data = null;
logger.warn("Error creating image from logo " + logo, e);
}
}
if (mime != null || data != null) {
ret.setData(data);
ret.setImagetype(mime);
}
}
} else if (urlparts.get(0).equals("cardtemplate") && urlparts.size() > 2)
{
......@@ -196,4 +218,24 @@ public class FileDownloadServlet extends GenericImageServlet {
}
private ByteArrayOutputStream makeImage(String textvalue) throws IOException {
logger.info("Trying to create image from text {}", textvalue);
int w = 400;
int h = 45;
BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = bufferedImage.createGraphics();
// graphics.setComposite(AlphaComposite.Clear);
graphics.setColor(new Color(0, 0, 0, 0));
graphics.fillRect(0, 0, w, h);
graphics.setColor(Color.WHITE);
graphics.setFont(new Font("Arial Black", Font.BOLD, 45));
graphics.drawString(textvalue, 10, h);
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", ostr);
return ostr;
}
}
......@@ -62,8 +62,6 @@ public class LayoutView implements Serializable {
private transient EventBeanLocal eventbean;
@EJB
private transient PermissionBeanLocal permbean;
private StreamedContent headerimage;
private String headertext;
@Inject
private SessionStore sessionStore;
@EJB
......@@ -165,6 +163,8 @@ public class LayoutView implements Serializable {
return rb;
}
public String getHeader() {
return new StringBuilder().append(eventbean.getCurrentEvent().getName()).append(" - ")
......@@ -172,58 +172,8 @@ public class LayoutView implements Serializable {
}
// public String header() {
// logger.info("Context {}", context);
// UIViewRoot root = context.getViewRoot();
// Map<String, Object> viewmap = root.getViewMap(false);
// if (viewmap != null) {
// for (Entry<String, Object> entry : viewmap.entrySet()) {
// logger.info("Got entry {}: {}", entry.getKey(), entry.getValue());
// }
// }
// logger.info("Attrmap");
// if (context.getAttributes() != null) {
// for (Entry<Object, Object> e : context.getAttributes().entrySet()) {
// logger.info("Got attr {}: {}", e.getKey(), e.getValue());
// }
// }
// return "";
// }
public boolean getHeaderIsImage()
{
return getHeaderimage() != null;
}
public StreamedContent getHeaderimage() {
if (headertext == null && headerimage == null)
{
LanEventProperty logo = eventbean.getProperty(LanEventPropertyKey.EVENT_LOGO);
if (logo != null)
{
logger.info("Logo is not null. mime {}, bytes {}", logo.getByteMime(), logo.getByteValue().length);
if (logo.getByteMime() == null || logo.getByteValue() == null || logo.getByteValue().length == 0) {
headertext = logo.getTextvalue();
} else {
headerimage = new DefaultStreamedContent(new ByteArrayInputStream(logo.getByteValue()), logo.getByteMime());
}
} else {
headertext = "logo_not_set";
}
}
return headerimage;
}
public void setHeaderimage(StreamedContent headerimage) {
this.headerimage = headerimage;
}
public String getHeadertext() {
return headertext;
}
public void setHeadertext(String headertext) {
this.headertext = headertext;
public Integer getLogoid(){
return eventbean.getCurrentEvent().getId();
}
public void setPageName(String menuChange) {
......
......@@ -1009,7 +1009,7 @@ placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi
placetoken.placelist = Omat paikat
placetoken.token = Paikkakoodi
placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt! Tarkista koodi.
placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n.
placetoken.topText = Voit yhdist\u00E4\u00E4 toisen k\u00E4ytt\u00E4j\u00E4n sinulle ostaman paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n.
poll.answer = Vastaa kyselyyn
poll.begin = Avaa kysely
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!