Commit cb63614a by Tuomas Riihimäki

Eeeeh..

PNG generation example
Billing hide property for event
1 parent 172e4d00
Manifest-Version: 1.0
Class-Path: MoyaBeansClient.jar
MoyaUtilities.jar
Class-Path: lib/commons-imaging-1.0-SNAPSHOT.jar
lib/MoyaUtilities.jar
lib/MoyaBeansClient.jar
package fi.codecrew.moya.beans;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOInvalidTreeException;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.stream.ImageOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pdfjet.CoreFont;
import com.pdfjet.Image;
......@@ -26,6 +40,7 @@ import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.util.MassPrintResult;
import fi.codecrew.moya.utilities.BarcodeUtils;
/**
* Session Bean implementation class CardPrintBean
......@@ -46,6 +61,7 @@ public class CardPrintBean implements CardPrintBeanLocal {
private UserFacade userfacade;
@EJB
private BarcodeBean barcodeBean;
private static final Logger logger = LoggerFactory.getLogger(CardPrintBean.class);
/**
* Default constructor.
......@@ -208,6 +224,94 @@ public class CardPrintBean implements CardPrintBeanLocal {
return mpr;
}
@Override
public byte[] constructPNG(EventUser user) throws Exception {
PrintedCard card = cardTemplateBean.checkPrintedCard(user);
logger.info("Printing card {}", card);
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getUser().getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
BufferedImage outimage = new BufferedImage(base.getWidth(), base.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = outimage.createGraphics();
// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
g.drawImage(base, 0, 0, base.getWidth(), base.getHeight(), null);
// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
// null);
g.drawImage(face, 60, 300, 320, 400, null);
g.setFont(new Font("Century gothic", Font.PLAIN, 70));
// g.drawString(nick, 595 -
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840);
g.drawString(user.getUser().getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 45));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getUser().getFirstnames()).append(" ").append(user.getUser().getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
// g.getFontMetrics().charsWidth(name.toCharArray(), 0, name.length()),
// 890);
//
// g.drawString(owner.getId().toString(), 60, 948);
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
String barcodeString = String.valueOf(user.getUser().getCreated().getTime().getTime());
barcodeString = barcodeString.substring(barcodeString.length() - 12);
BufferedImage image = ImageIO.read(BarcodeUtils.getBarcodeEAN(barcodeString));
g.drawImage(image, 0, base.getHeight() - 120, base.getWidth(), 120, null);
g.dispose();
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
for (Iterator<ImageWriter> pngWriter = ImageIO.getImageWritersByFormatName("png"); pngWriter.hasNext();)
{
ImageWriter writer = pngWriter.next();
logger.info("Trying to write with writer {}", writer);
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) {
continue;
}
setDPI(metadata);
final ImageOutputStream stream = ImageIO.createImageOutputStream(ostr);
try {
writer.setOutput(stream);
writer.write(metadata, new IIOImage(outimage, null, metadata), writeParam);
} finally {
stream.close();
}
break;
}
// ImageIO.write(outimage, "png", ostr);
byte[] ret = ostr.toByteArray();
logger.info("Returning {} bytes for pngimage", ret.length);
// double meter2inchRatio = 1d / 0.0254d;
// int dpi = 300;
// int dim = (int) (dpi * meter2inchRatio) + 1;
return ret;
}
private ByteArrayInputStream convertBufferedImageToPng(BufferedImage img)
throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
......@@ -216,4 +320,25 @@ public class CardPrintBean implements CardPrintBeanLocal {
return new ByteArrayInputStream(outStream.toByteArray());
}
private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {
// for PMG, it's dots per millimeter
double dotsPerMilli = 1.0 * 300 / 10 / 2.54;
IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
horiz.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
vert.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode dim = new IIOMetadataNode("Dimension");
dim.appendChild(horiz);
dim.appendChild(vert);
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
root.appendChild(dim);
metadata.mergeTree("javax_imageio_1.0", root);
}
}
......@@ -120,6 +120,8 @@ public class JaasBean implements MoyaRealmBeanRemote {
}
if (!usr.getUser().isAnonymous()) {
// all logged in users should be able to logout :)
roleset.add(UserPermission.LOGOUT.name());
roleset.add(SpecialPermission.USER.name());
}
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
......
......@@ -4,11 +4,16 @@ import java.util.List;
import javax.ejb.Local;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.util.MassPrintResult;
@Local
public interface CardPrintBeanLocal {
public MassPrintResult getUserCardsAsPrintablePdf(List<Integer> userIdList) throws Exception;
public MassPrintResult getUserCardAsPrintablePdf(Integer userId) throws Exception;
public void acceptMassPrintResult(MassPrintResult mpr);
byte[] constructPNG(EventUser user) throws Exception;
}
......@@ -12,7 +12,9 @@ public enum LanEventPropertyKey {
PLACECODE_FROM_USER(Type.BOOL, null),
PLACECODE_PRINT_ONLY_OWN(Type.BOOL, null),
CHECK_BILL_STATS_PERMISSION(Type.BOOL, null),
GATHER_OTHER_BILL_INFO(Type.BOOL, null), ;
GATHER_OTHER_BILL_INFO(Type.BOOL, null),
ALLOW_BILLING(Type.BOOL, null);
;
private enum Type {
TEXT, DATE, DATA, BOOL
......
......@@ -17,8 +17,9 @@ public enum UserPermission implements IAppPermission {
MANAGE_HTTP_SESSION, // ("Manage http sessions"),
INVITE_USERS, // ("Invite users"),
READ_ORGROLES, // ("View organization roles"),
WRITE_ORGROLES, VITUTTAAKO, // ("Modify organization roles"),
;
WRITE_ORGROLES, // ("Modify organization roles"),
VITUTTAAKO,
LOGGED_IN_USER;
public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY";
......
package fi.codecrew.moya.utilities;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_ColorSpace;
import java.awt.color.ICC_Profile;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOException;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.common.bytesource.ByteSource;
import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
import org.apache.commons.imaging.formats.jpeg.segments.Segment;
import org.apache.commons.imaging.formats.jpeg.segments.UnknownSegment;
public class JpegReader {
public static final int COLOR_TYPE_RGB = 1;
public static final int COLOR_TYPE_CMYK = 2;
public static final int COLOR_TYPE_YCCK = 3;
private int colorType = COLOR_TYPE_RGB;
private boolean hasAdobeMarker = false;
public BufferedImage readImage(File file) throws IOException, ImageReadException {
colorType = COLOR_TYPE_RGB;
hasAdobeMarker = false;
ImageInputStream stream = ImageIO.createImageInputStream(file);
Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);
while (iter.hasNext()) {
ImageReader reader = iter.next();
reader.setInput(stream);
BufferedImage image;
ICC_Profile profile = null;
try {
image = reader.read(0);
} catch (IIOException e) {
colorType = COLOR_TYPE_CMYK;
checkAdobeMarker(file);
profile = Imaging.getICCProfile(file);
WritableRaster raster = (WritableRaster) reader.readRaster(0, null);
if (colorType == COLOR_TYPE_YCCK)
convertYcckToCmyk(raster);
if (hasAdobeMarker)
convertInvertedColors(raster);
image = convertCmykToRgb(raster, profile);
}
return image;
}
return null;
}
public void checkAdobeMarker(File file) throws IOException, ImageReadException {
JpegImageParser parser = new JpegImageParser();
ByteSource byteSource = new ByteSourceFile(file);
@SuppressWarnings("rawtypes")
List<Segment> segments = parser.readSegments(byteSource, new int[] { 0xffee }, true);
if (segments != null && segments.size() >= 1) {
UnknownSegment app14Segment = (UnknownSegment) segments.get(0);
byte[] data = app14Segment.bytes;
if (data.length >= 12 && data[0] == 'A' && data[1] == 'd' && data[2] == 'o' && data[3] == 'b' && data[4] == 'e')
{
hasAdobeMarker = true;
int transform = app14Segment.bytes[11] & 0xff;
if (transform == 2)
colorType = COLOR_TYPE_YCCK;
}
}
}
public static void convertYcckToCmyk(WritableRaster raster) {
int height = raster.getHeight();
int width = raster.getWidth();
int stride = width * 4;
int[] pixelRow = new int[stride];
for (int h = 0; h < height; h++) {
raster.getPixels(0, h, width, 1, pixelRow);
for (int x = 0; x < stride; x += 4) {
int y = pixelRow[x];
int cb = pixelRow[x + 1];
int cr = pixelRow[x + 2];
int c = (int) (y + 1.402 * cr - 178.956);
int m = (int) (y - 0.34414 * cb - 0.71414 * cr + 135.95984);
y = (int) (y + 1.772 * cb - 226.316);
if (c < 0)
c = 0;
else if (c > 255)
c = 255;
if (m < 0)
m = 0;
else if (m > 255)
m = 255;
if (y < 0)
y = 0;
else if (y > 255)
y = 255;
pixelRow[x] = 255 - c;
pixelRow[x + 1] = 255 - m;
pixelRow[x + 2] = 255 - y;
}
raster.setPixels(0, h, width, 1, pixelRow);
}
}
public static void convertInvertedColors(WritableRaster raster) {
int height = raster.getHeight();
int width = raster.getWidth();
int stride = width * 4;
int[] pixelRow = new int[stride];
for (int h = 0; h < height; h++) {
raster.getPixels(0, h, width, 1, pixelRow);
for (int x = 0; x < stride; x++)
pixelRow[x] = 255 - pixelRow[x];
raster.setPixels(0, h, width, 1, pixelRow);
}
}
public static BufferedImage convertCmykToRgb(Raster cmykRaster, ICC_Profile cmykProfile) throws IOException {
if (cmykProfile == null)
cmykProfile = ICC_Profile.getInstance(JpegReader.class.getResourceAsStream("ISOcoated_v2_300_eci.icc"));
ICC_ColorSpace cmykCS = new ICC_ColorSpace(cmykProfile);
BufferedImage rgbImage = new BufferedImage(cmykRaster.getWidth(), cmykRaster.getHeight(), BufferedImage.TYPE_INT_RGB);
WritableRaster rgbRaster = rgbImage.getRaster();
ColorSpace rgbCS = rgbImage.getColorModel().getColorSpace();
ColorConvertOp cmykToRgb = new ColorConvertOp(cmykCS, rgbCS, null);
cmykToRgb.filter(cmykRaster, rgbRaster);
return rgbImage;
}
}
......@@ -19,6 +19,7 @@
<h:inputText id="paidDate" value="#{billEditView.bill.paidDate}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" />
<h:inputText id="billnr" value="#{billEditView.bill.billNumber}" />
......
......@@ -23,7 +23,7 @@
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</ui:fragment>
<br />
<bill:showBill bill="#{billEditView.bill}" />
......
......@@ -11,15 +11,16 @@
<h:outputText rendered="#{billListView.bills.rowCount le 0}" value="#{i18n['bills.noBills']}" />
<ui:fragment rendered="#{billListView.canWriteBill}">
<!-- koyhan miehen confirmaationappi: -->
<input type="button" class="ui-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" style="padding: 3px;" value="#{i18n['bill.markPaid.show']}" onclick="showMarkPaidButtons();" />
<input type="button" class="ui-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" style="padding: 3px;" value="#{i18n['bill.markPaid.show']}"
onclick="showMarkPaidButtons();" />
</ui:fragment>
<h:form rendered="#{billListView.bills.rowCount gt 0}">
<p:dataTable styleClass="bordertable" id="billList" value="#{billListView.bills}" var="bill"
rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}" >
<p:dataTable styleClass="bordertable" id="billList" value="#{billListView.bills}" var="bill" rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}">
<p:column rendered="#{billListView.canWriteBill}">
<f:facet name="header">
......@@ -60,9 +61,8 @@
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" />
</h:outputText>
</p:column>
<p:column>
<ui:fragment rendered="#{!bill.expired}">
<p:column rendered="#{(!bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING')) or billListView.canWriteBill}">
<ui:fragment>
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id}" target="_blank">#{i18n['bill.printBill']}</a>
</ui:fragment>
</p:column>
......@@ -87,7 +87,7 @@
</h:form>
<script type="text/javascript">
<script type="text/javascript">
function showMarkPaidButtons() {
$(".markPaidButton").removeAttr('disabled');
}
......
......@@ -43,6 +43,7 @@
<h:outputText rendered="#{cc.attrs.bill.expired}" id="expired" value="#{i18n['bill.isExpired']}" />
</h:panelGrid>
<h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:outputLabel for="address" value="#{i18n['bill.address']}:" />
<h:panelGroup id="address">
......@@ -66,15 +67,15 @@
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.billAddress4}" value="&lt;br />" escape="false" />
<h:outputText id="recAddr4" value="#{cc.attrs.bill.event.organiser.billAddress4}" />
</h:panelGroup>
<h:outputLabel rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankName1}" for="bankname1" value="#{i18n['eventorg.bankName1']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankName1}" id="bankname1" value="#{cc.attrs.bill.event.organiser.bankName1}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankNumber1}" for="banknumber1" value="#{i18n['eventorg.bankNumber1']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankNumber1}" id="banknumber1" value="#{cc.attrs.bill.event.organiser.bankNumber1}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankName2}" for="bankname2" value="#{i18n['eventorg.bankName2']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankName2}" id="bankname2" value="#{cc.attrs.bill.event.organiser.bankName2}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankNumber2}" for="banknumber2" value="#{i18n['eventorg.bankNumber2']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and !empty cc.attrs.bill.event.organiser.bankNumber2}" id="banknumber2" value="#{cc.attrs.bill.event.organiser.bankNumber2}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankName1}" for="bankname1" value="#{i18n['eventorg.bankName1']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankName1}" id="bankname1" value="#{cc.attrs.bill.event.organiser.bankName1}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankNumber1}" for="banknumber1" value="#{i18n['eventorg.bankNumber1']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankNumber1}" id="banknumber1" value="#{cc.attrs.bill.event.organiser.bankNumber1}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankName2}" for="bankname2" value="#{i18n['eventorg.bankName2']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankName2}" id="bankname2" value="#{cc.attrs.bill.event.organiser.bankName2}" />
<h:outputLabel rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankNumber2}" for="banknumber2" value="#{i18n['eventorg.bankNumber2']}" />
<h:outputText rendered="#{!cc.attrs.bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING') and !empty cc.attrs.bill.event.organiser.bankNumber2}" id="banknumber2" value="#{cc.attrs.bill.event.organiser.bankNumber2}" />
</h:panelGrid>
......
......@@ -5,6 +5,7 @@
*/
package fi.codecrew.moya.handler;
import java.util.EnumMap;
import java.util.TimeZone;
import javax.ejb.EJB;
......@@ -22,6 +23,7 @@ import fi.codecrew.moya.beans.RoleBeanLocal;
import fi.codecrew.moya.clientutils.BortalLocalContextHolder;
import fi.codecrew.moya.enums.apps.IAppPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEventProperty;
import fi.codecrew.moya.model.LanEventPropertyKey;
/**
......@@ -94,6 +96,30 @@ public class SessionHandler {
return getTemplatePath() + "/template.xhtml";
}
private EnumMap<LanEventPropertyKey, Boolean> boolPropertyCache = new EnumMap<>(LanEventPropertyKey.class);
public boolean isEventBoolProperty(String property)
{
LanEventPropertyKey prop = LanEventPropertyKey.valueOf(property);
if (!prop.isBoolean()) {
throw new RuntimeException("Trying to fetch boolean value for non-boolean property!");
}
boolean value = false;
if (boolPropertyCache.containsKey(prop)) {
value = boolPropertyCache.get(prop);
} else {
LanEventProperty propertyValue = eventbean.getProperty(prop);
if (propertyValue == null) {
if (prop.getDefaultvalue() != null && prop.getDefaultvalue().equals("1"))
value = true;
} else {
value = propertyValue.isBooleanValue();
}
boolPropertyCache.put(prop, value);
}
return value;
}
// public boolean hasPermission(String target, String permission) {
// RolePermission perm = RolePermission.valueOf(permission.toUpperCase());
// // RolePermission perm = null;
......
......@@ -63,7 +63,7 @@ public abstract class GenericImageServlet extends HttpServlet {
}
@SuppressWarnings("unused")
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
private static final Logger logger = LoggerFactory.getLogger(GenericImageServlet.class);
protected abstract ImageMover getImagedata();
......
package fi.codecrew.moya.servlet;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.UserImage;
/**
* Servlet implementation class UploadServlet
*/
public class UserCardPngServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
// private final Pattern lhMatcher =
// Pattern.compile("^(10|127).[0-9.]*|(0:)*1%0");
private static final Logger logger = LoggerFactory.getLogger(UserCardPngServlet.class);
private static final Pattern URLPATTERN = Pattern.compile("([^./]+)");
// /dydata/(userimage|...)/stuff...
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
List<String> urlparts = new ArrayList<String>();
if (super.request.getPathInfo() != null)
{
Matcher matcher = URLPATTERN.matcher(super.request.getPathInfo());
logger.info("urlparts {}", urlparts);
while (matcher.find()) {
urlparts.add(matcher.group());
}
}
if (urlparts.isEmpty()) {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
} else if (urlparts.get(0).equals("userimage") && urlparts.size() > 2) {
int imageid = Integer.parseInt(urlparts.get(1));
UserImage image = userbean.findUserimageFORCE(imageid);
if (image != null)
{
ret.setData(image.getImageData());
ret.setImagetype(image.getMimeType());
}
}
if (ret.getImagetype() == null) {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
// protected ImageMover getImagedata2() {
// ImageMover ret = new ImageMover();
// UserImage image =
// userbean.findUserimageFORCE(super.getIdParam("imageid"));
// if (image != null) { // &&
// // if (permbean.isCurrentUser(image.getUser()) ||
// // permbean.hasPermission(UserPermission.MODIFY) ||
// // lhMatcher.matcher(request.getLocalAddr()).matches())
// // {
// ret.setData(image.getImageData());
// ret.setImagetype(image.getMimeType());
// // }
// // else
// // {
// // ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
// // }
//
// } else
// {
// ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
// }
// return ret;
//
// }
}
package fi.codecrew.moya.servlet;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
......@@ -17,7 +15,6 @@ import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pdfjet.Box;
import com.pdfjet.CoreFont;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
......@@ -94,66 +91,6 @@ public class UserCardServlet extends GenericImageServlet {
}
private byte[] mkCardJpeg(PrintedCard card) throws IOException {
EventUser user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user
.getUser().getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card
.getTemplate().getImage()));
BufferedImage outimage = new BufferedImage(base.getWidth(),
base.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = outimage.createGraphics();
// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
g.drawImage(base, 0, 0, base.getWidth(), base.getHeight(), null);
// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
// null);
g.drawImage(face, 60, 300, 320, 400, null);
g.setFont(new Font("Century gothic", Font.PLAIN, 70));
// g.drawString(nick, 595 -
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840);
g.drawString(user.getUser().getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 45));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getUser().getFirstnames()).append(" ")
.append(user.getUser().getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
// g.getFontMetrics().charsWidth(name.toCharArray(), 0, name.length()),
// 890);
//
// g.drawString(owner.getId().toString(), 60, 948);
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
String barcodeString = String.valueOf(user.getUser().getCreated()
.getTime().getTime());
barcodeString = barcodeString.substring(barcodeString.length() - 12);
BufferedImage image = ImageIO.read(BarcodeUtils
.getBarcodeEAN(barcodeString));
g.drawImage(image, 0, base.getHeight() - 120, base.getWidth(), 120,
null);
g.dispose();
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(outimage, "jpeg", ostr);
return ostr.toByteArray();
}
// 300 dpi, 1016 px pituus, 648 px leveys,
// 85,5 mm x 54,0 mm
private byte[] mkCard(PrintedCard card) throws Exception {
......@@ -190,7 +127,7 @@ public class UserCardServlet extends GenericImageServlet {
Image faceImage = new Image(pdf,
convertBufferedImageToPng(faceBufferedImage), ImageType.PNG);
faceImage.setPosition(15.5, 70.0);
faceImage.scaleBy((410.0/faceImage.getHeight()));
faceImage.scaleBy((410.0 / faceImage.getHeight()));
faceImage.drawOn(page);
// Render texts
......@@ -202,7 +139,7 @@ public class UserCardServlet extends GenericImageServlet {
TextLine nickTextLine = new TextLine(nickFont);
nickTextLine.setText(user.getUser().getNick());
nickTextLine.setPosition(19.0, 193.0);
nickTextLine.setColor(new double[] {1.0, 1.0, 1.0});
nickTextLine.setColor(new double[] { 1.0, 1.0, 1.0 });
nickTextLine.drawOn(page);
// Smaller font
......@@ -215,14 +152,14 @@ public class UserCardServlet extends GenericImageServlet {
TextLine wholeNameText = new TextLine(font);
wholeNameText.setText(wholeName);
wholeNameText.setPosition(17.0, 212.0);
wholeNameText.setColor(new double[] {1.0, 1.0, 1.0});
wholeNameText.setColor(new double[] { 1.0, 1.0, 1.0 });
wholeNameText.drawOn(page);
// Role text
TextLine roleTextLine = new TextLine(font);
roleTextLine.setText(card.getTemplate().getName());
roleTextLine.setPosition(17.0, 223.0);
roleTextLine.setColor(new double[] {1.0, 1.0, 1.0});
roleTextLine.setColor(new double[] { 1.0, 1.0, 1.0 });
roleTextLine.drawOn(page);
// Barcode
......
package fi.codecrew.moya.servlet;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.CardPrintBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.UserImage;
import fi.codecrew.moya.model.EventUser;
/**
* Servlet implementation class UploadServlet
*/
public class UserImageServlet extends GenericImageServlet {
@WebServlet(urlPatterns = "/png")
public class UserPngImageServlet extends GenericImageServlet {
public UserPngImageServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
*
......@@ -32,40 +34,33 @@ public class UserImageServlet extends GenericImageServlet {
@EJB
private transient PermissionBeanLocal permbean;
@EJB
private CardPrintBeanLocal cardprint;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
// private final Pattern lhMatcher =
// Pattern.compile("^(10|127).[0-9.]*|(0:)*1%0");
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
private static final Pattern URLPATTERN = Pattern.compile("([^./]+)");
private static final Logger logger = LoggerFactory.getLogger(UserPngImageServlet.class);
// /dydata/(userimage|...)/stuff...
@Override
protected ImageMover getImagedata() {
EventUser usr = permbean.getCurrentUser();
logger.info("Trying to print imagedata for user {}", usr);
ImageMover ret = new ImageMover();
Matcher matcher = URLPATTERN.matcher(super.request.getPathInfo());
List<String> urlparts = new ArrayList<String>();
logger.info("urlparts {}", urlparts);
while (matcher.find()) {
urlparts.add(matcher.group());
}
if (usr != null) {
try {
if (urlparts.isEmpty()) {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
} else if (urlparts.get(0).equals("userimage") && urlparts.size() > 2) {
int imageid = Integer.parseInt(urlparts.get(1));
UserImage image = userbean.findUserimageFORCE(imageid);
if (image != null)
byte[] img = cardprint.constructPNG(usr);
if (img.length > 0)
{
ret.setData(image.getImageData());
ret.setImagetype(image.getMimeType());
ret.setData(img);
ret.setImagetype("image/png");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
......@@ -75,7 +70,6 @@ public class UserImageServlet extends GenericImageServlet {
return ret;
}
// protected ImageMover getImagedata2() {
// ImageMover ret = new ImageMover();
// UserImage image =
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!