Commit 33e96587 by Petri Jarvisalo

Merge branch 'devel' of codecrew.fi:bortal into devel

2 parents 02ec364b c9b01cc0
package fi.codecrew.moya.beans;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
......@@ -225,11 +229,59 @@ public class UserBean implements UserBeanLocal {
throw new EJBAccessException("No permission to upload image as another user");
}
ByteArrayInputStream imagestream = new ByteArrayInputStream(image);
BufferedImage bimage;
try {
bimage = ImageIO.read(imagestream);
} catch (IOException e) {
throw new RuntimeException(e);
}
int maxImageWidth = 1000;
int maxImageHeight = 1000;
if(bimage.getWidth() > maxImageWidth || bimage.getHeight() > maxImageHeight) {
int w = bimage.getWidth();
int h = bimage.getHeight();
if(w > h) {
h = (int) (((double) h/ (double) w)* (double) maxImageWidth);
w = maxImageWidth;
} else {
w = (int) (((double) w/ (double) h)* (double) maxImageHeight);
h = maxImageHeight;
}
logger.info("scaling image to {} x {}", w, h);
BufferedImage resized = new BufferedImage(w, h, bimage.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(bimage, 0, 0, w, h, 0, 0, bimage.getWidth(), bimage.getHeight(), null);
g.dispose();
bimage = resized;
}
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
try {
ImageIO.write(bimage, "png", naamaout);
} catch (IOException e) {
throw new RuntimeException(e);
}
UserImage userimage = null;
userimage = new UserImage(user.getUser());
userimage.setMimeType(contentType);
userimage.setImageData(image);
userimage.setImageData(naamaout.toByteArray());
userimage.setName(filename);
userimage.setDescription(description);
......
......@@ -10,7 +10,7 @@
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<!-- Production | Development -->
<param-value>Production</param-value>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
......@@ -71,11 +71,7 @@
<servlet-name>PlaceMap</servlet-name>
<servlet-class>fi.codecrew.moya.servlet.PlaceMap</servlet-class>
</servlet>
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
......@@ -146,6 +142,13 @@
<servlet-name>PlaceGroupPdf</servlet-name>
<url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping>
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
......
......@@ -12,28 +12,31 @@
</f:metadata>
<ui:define name="content">
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:panelGrid columns="3">
<h:form>
<p:poll interval="1" listener="#{incomingView.polledRead}" />
</h:form>
<h:panelGrid columns="3">
<h:panelGroup>
<user:edit commitaction="#{incomingView.saveUser()}" commitvalue="#{i18n['user.save']}" />
<user:edit commitaction="#{incomingView.saveUser()}" commitvalue="#{i18n['user.save']}" camAlwaysOn="true" />
</h:panelGroup>
<h:panelGroup>
<h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.7317073170731707" image="/dydata/userimage/#{userView.user.currentImage.id}.jpg" />
<h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" />
<h:commandButton action="#{userView.cancelCrop}" value="#{i18n['user.cropImage']}" />
</h:form>
</h:panelGroup>
<h:panelGroup>
<h:form>
<user:previewAndPrintCard />
<p:commandButton action="#{userView.acceptPrintedCard()}" value="accept printed card" />
<p:graphicImage url="/dydata/usercard/#{userView.user.user.id}.png" width="300" /><br />
<h:commandButton action="#{incomingView.printCard}" value="#{i18n['print']}" />
</h:form>
</h:panelGroup>
</h:panelGrid>
......
......@@ -22,9 +22,9 @@ xmlns:reader="http://java.sun.com/jsf/composite/cditools/reader"
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
<h:outputText value="#{i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{rr}" />
<h:outputText value="#{rr.identification}" />
</h:column>
<h:column>
<h:commandButton action="#{readerListDataView.selectReader}" value="#{i18n['reader.select']}" />
......
......@@ -7,6 +7,7 @@
<composite:interface>
<composite:attribute name="creating" required="false" default="false" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
<composite:attribute name="camAlwaysOn" required="false" default="false" />
</composite:interface>
<composite:implementation>
......@@ -19,20 +20,25 @@
<h:panelGroup>
<ui:fragment rendered="#{not empty userView.user.id}">
<p:dialog id="chartPanel" for="webcamButton" modal="true" dynamic="true" widgetVar="webcamDialog">
<p:dialog rendered="#{!cc.attrs.camAlwaysOn}" id="chartPanel" for="webcamButton" modal="true" dynamic="true" widgetVar="webcamDialog">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" />
<p:commandButton type="button" value="Capture" onclick="pc.capture()" />
</p:dialog>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.user.currentImage}">
<img style="width: 150px;" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.img" alt="image" />
</ui:fragment>
<br />
<p:commandButton id="webcamButton" value="#{i18n['userimage.webcam']}" onclick="webcamDialog.show()" type="button" />
<p:commandButton rendered="#{!cc.attrs.camAlwaysOn}" id="webcamButton" value="#{i18n['userimage.webcam']}" onclick="webcamDialog.show()" type="button" />
<br />
<br />
<ui:fragment rendered="#{cc.attrs.camAlwaysOn}">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" />
<p:commandButton type="button" value="Capture" onclick="pc.capture()" />
</ui:fragment>
<p:fileUpload id="uploadfile" required="TRUE" requiredMessage="Required!" invalidSizeMessage="#{i18n['user.imageTooBig']}" sizeLimit="1024" value="#{userView.image}" mode="simple" />
<p:message for="uploadfile" />
......
......@@ -9,9 +9,12 @@
<composite:implementation>
<div>
<p:graphicImage url="/dydata/usercard/#{userView.user.user.id}.png" width="300" /><br />
<p:commandButton action="#{userView.prepareCardDownload()}" rendered="#{userView.waitForAcceptance==false}" value="print card" ajax="true" update="@form" onclick="PrimeFaces.monitorDownload(start, stop)">
<p:fileDownload value="#{userView.streamedFile}" />
</p:commandButton>
</div>
</composite:implementation>
</html>
......
......@@ -47,6 +47,9 @@
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<img width="300" rendered="#{!empty userView.user.currentImage}" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.jpg" alt="image" />
<!-- <ui:fragment rendered="#{!empty userView.user.currentImage}">
<img width="300" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.img" alt="image" />
<div>
......
......@@ -33,7 +33,11 @@ public class PrintedCardRestPojo {
@XmlElement(name = "cardTemplate")
public String getTemplate()
{
return card.getTemplate().getName();
String ret = null;
if (card.getTemplate() != null)
ret = card.getTemplate().getName();
return ret;
}
@XmlElement(name = "username")
......
......@@ -17,13 +17,16 @@ import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.CardPrintBeanLocal;
import fi.codecrew.moya.beans.CardTemplateBeanLocal;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEventProperty;
import fi.codecrew.moya.model.LanEventPropertyKey;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.UserImage;
/**
......@@ -41,6 +44,13 @@ public class FileDownloadServlet extends GenericImageServlet {
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient CardTemplateBeanLocal cardbean;
@EJB
private transient CardPrintBeanLocal cardprint;
@EJB
private transient PermissionBeanLocal permbean;
......@@ -57,6 +67,14 @@ public class FileDownloadServlet extends GenericImageServlet {
private static final Pattern URLPATTERN = Pattern.compile("([^./]+)");
/**
* Usage MoyaWeb/dydata/format/
* possible formats
* logo
* userimage/<eventuserid>.jpg
* cardtemplate/<cardtemplateid>.png
* usercard/
*/
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
......@@ -117,6 +135,28 @@ public class FileDownloadServlet extends GenericImageServlet {
}
}
}else if (urlparts.get(0).equals("usercard") && urlparts.size() > 2)
{
int userid = Integer.parseInt(urlparts.get(1));
EventUser usr = userbean.findByUserId(userid);
logger.info("Trying to print usercard for user {}", usr);
if (usr != null) {
PrintedCard card = cardbean.checkPrintedCard(usr);
try {
byte[] img = cardprint.constructPNG(card);
if (img.length > 0)
{
ret.setData(img);
ret.setImagetype("image/png");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (ret.getImagetype() == null) {
......
......@@ -27,6 +27,7 @@ import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.ReaderBeanLocal;
import fi.codecrew.moya.beans.RoleBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.CardTemplate;
import fi.codecrew.moya.model.EventUser;
......@@ -167,6 +168,7 @@ public class UserView extends GenericCDIView {
userbean.saveCroppedImage(user.getUser().getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(),
croppedImage.getWidth(), croppedImage.getHeight());
user = userbean.getEventUser(newImage.getUser());
} catch (IOException e) {
logger.info("Error converting image", e);
......@@ -318,6 +320,8 @@ public class UserView extends GenericCDIView {
if(readerView.getBarcode() != null && !readerView.getBarcode().isEmpty()) {
card.setBarcode(readerView.getBarcode());
card.setCardState(CardState.VALIDATED);
logger.debug("barcode {} to card {} ",readerView.getBarcode(),card.getUser().getNick());
cardBean.saveCard(card);
} else if(readerView.getReaderEvent() != null) {
......
package fi.codecrew.moya.web.flow;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
......@@ -7,9 +8,16 @@ import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.CardTemplateBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.ReaderBeanLocal;
import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.reader.ReaderNameContainer;
import fi.codecrew.moya.web.cdiview.reader.ReaderView;
import fi.codecrew.moya.web.cdiview.user.UserView;
......@@ -29,6 +37,17 @@ public class IncomingView extends GenericCDIView {
@Inject
private ReaderView readerView;
@Inject
private ReaderNameContainer namecontainer;
@EJB
private CardTemplateBeanLocal cardBean;
@EJB
private PermissionBeanLocal permBean;
public void initView() {
super.beginConversation();
......@@ -37,7 +56,10 @@ public class IncomingView extends GenericCDIView {
private boolean initialized = false;
public void initPrintCardView() {
if(!permbean.hasPermission(UserPermission.MODIFY) || namecontainer.getReaderId() == null || namecontainer.getReaderId() <= 0) {
super.navihandler.redirectNavigation("index.jsf");
}
if (!initialized) {
logger.debug("INITIALIZING!!!!");
initializePoller();
......@@ -79,6 +101,7 @@ public class IncomingView extends GenericCDIView {
// still there, it must be "clean" barcode
if (userview.getUser() != null) {
userview.attachBarcodeToCard();
}
}
......@@ -99,5 +122,21 @@ public class IncomingView extends GenericCDIView {
//userview.prepareCardDownload();
return "printCard";
}
public String printCard() {
PrintedCard card = cardBean.checkPrintedCard(user);
card.setCardState(CardState.VALIDATED);
cardBean.saveCard(card);
return null;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!