Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Codecrew
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
30
Merge Requests
2
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 12e50381
authored
Feb 04, 2017
by
Tuomas Riihimäki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add timelapse possibility to legacy placemap image generator
1 parent
3747c7f2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
142 additions
and
127 deletions
code/moya-web/pom.xml
code/moya-web/src/main/java/fi/codecrew/moya/servlet/PlaceMapServlet.java
code/moya-web/pom.xml
View file @
12e5038
...
@@ -35,8 +35,11 @@
...
@@ -35,8 +35,11 @@
<artifactId>
primefaces-extensions
</artifactId>
<artifactId>
primefaces-extensions
</artifactId>
<version>
${primefaces.extensions}
</version>
<version>
${primefaces.extensions}
</version>
</dependency>
</dependency>
<dependency>
<groupId>
joda-time
</groupId>
<artifactId>
joda-time
</artifactId>
<version>
2.3
</version>
</dependency>
<dependency>
<dependency>
<groupId>
org.primefaces.themes
</groupId>
<groupId>
org.primefaces.themes
</groupId>
<artifactId>
all-themes
</artifactId>
<artifactId>
all-themes
</artifactId>
...
...
code/moya-web/src/main/java/fi/codecrew/moya/servlet/PlaceMapServlet.java
View file @
12e5038
...
@@ -43,6 +43,8 @@ import javax.servlet.http.HttpServlet;
...
@@ -43,6 +43,8 @@ import javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
fi.codecrew.moya.enums.apps.UserPermission
;
import
org.joda.time.format.ISODateTimeFormat
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -58,7 +60,6 @@ import fi.codecrew.moya.model.Place;
...
@@ -58,7 +60,6 @@ import fi.codecrew.moya.model.Place;
import
fi.codecrew.moya.utilities.moyamessage.MoyaEventType
;
import
fi.codecrew.moya.utilities.moyamessage.MoyaEventType
;
/**
/**
*
* @author tuukka
* @author tuukka
*/
*/
@WebServlet
(
"/PlaceMap"
)
@WebServlet
(
"/PlaceMap"
)
...
@@ -85,23 +86,19 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -85,23 +86,19 @@ public class PlaceMapServlet extends HttpServlet {
private
static
final
String
PARAMETER_EVENT_MAP_ID
=
"mapid"
;
private
static
final
String
PARAMETER_EVENT_MAP_ID
=
"mapid"
;
private
static
final
String
PARAMETER_USER_ID
=
"userid"
;
private
static
final
String
PARAMETER_USER_ID
=
"userid"
;
private
static
final
String
PARAMETER_TOKEN
=
"token"
;
private
static
final
String
PARAMETER_TOKEN
=
"token"
;
private
static
final
String
PARAMETER_DATE
=
"date"
;
/**
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
* methods.
*
*
* @param request
* @param request servlet request
* servlet request
* @param response servlet response
* @param response
* @throws ServletException if a servlet-specific error occurs
* servlet response
* @throws IOException if an I/O error occurs
* @throws ServletException
* if a servlet-specific error occurs
* @throws IOException
* if an I/O error occurs
*/
*/
protected
void
processRequest
(
HttpServletRequest
request
,
protected
void
processRequest
(
HttpServletRequest
request
,
HttpServletResponse
response
)
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
throws
ServletException
,
IOException
{
logger
.
debug
(
"Begin processing request"
);
logger
.
debug
(
"Begin processing request"
);
// response.setContentType("text/html;charset=UTF-8");
// response.setContentType("text/html;charset=UTF-8");
...
@@ -112,13 +109,7 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -112,13 +109,7 @@ public class PlaceMapServlet extends HttpServlet {
// PARAMETER_SELECTED_PLACE_ID);
// PARAMETER_SELECTED_PLACE_ID);
Integer
mapId
=
getIntegerParameter
(
request
,
PARAMETER_EVENT_MAP_ID
);
Integer
mapId
=
getIntegerParameter
(
request
,
PARAMETER_EVENT_MAP_ID
);
String
timelapseDate
=
request
.
getParameter
(
PARAMETER_DATE
);
Integer
userId
=
getIntegerParameter
(
request
,
PARAMETER_USER_ID
);
String
userToken
=
request
.
getParameter
(
PARAMETER_TOKEN
);
EventMap
map
=
placeBean
.
findMap
(
mapId
);
EventMap
map
=
placeBean
.
findMap
(
mapId
);
logger
.
debug
(
"Mapid: {}"
,
mapId
);
logger
.
debug
(
"Mapid: {}"
,
mapId
);
...
@@ -128,24 +119,47 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -128,24 +119,47 @@ public class PlaceMapServlet extends HttpServlet {
logger
.
warn
(
"Error handling map {}!"
,
map
);
logger
.
warn
(
"Error handling map {}!"
,
map
);
response
.
setStatus
(
HttpServletResponse
.
SC_NOT_FOUND
);
response
.
setStatus
(
HttpServletResponse
.
SC_NOT_FOUND
);
ostream
.
print
(
"Map error!"
);
ostream
.
print
(
"Map error!"
);
return
;
}
else
{
}
String
[]
splittype
=
map
.
getMimeType
().
split
(
"/"
);
String
[]
splittype
=
map
.
getMimeType
().
split
(
"/"
);
String
type
=
"png"
;
String
type
=
"png"
;
if
(
splittype
.
length
>
0
)
if
(
splittype
.
length
>
0
)
{
type
=
splittype
[
splittype
.
length
-
1
];
type
=
splittype
[
splittype
.
length
-
1
];
}
response
.
setContentType
(
map
.
getMimeType
());
response
.
setContentType
(
map
.
getMimeType
());
printPlaceMapToStream
(
ostream
,
type
,
map
,
userId
,
userToken
);
logger
.
debug
(
"Flushing ostream"
);
if
(
timelapseDate
==
null
||
timelapseDate
.
trim
().
isEmpty
())
{
ostream
.
flush
();
Integer
userId
=
getIntegerParameter
(
request
,
PARAMETER_USER_ID
);
String
userToken
=
request
.
getParameter
(
PARAMETER_TOKEN
);
EventUser
user
=
null
;
if
(
userToken
!=
null
)
{
user
=
barcodeBean
.
getUserFromLongTextCode
(
userToken
);
}
}
}
catch
(
EJBException
e
)
{
if
(!
permbean
.
hasPermission
(
MapPermission
.
VIEW
)
&&
user
==
null
)
{
loggerbean
.
sendMessage
(
MoyaEventType
.
USER_INSUFFICIENT_PERMISSIONS
,
permbean
.
getCurrentUser
(),
"User tried to print the placemap to stream without sufficient permissions"
);
throw
new
EJBAccessException
(
"Not enough permissions to print placemap"
);
}
// Find for user only with sufficient permissions
if
(
user
!=
null
&&
userId
!=
0
&&
permbean
.
hasPermission
(
UserPermission
.
VIEW_ALL
))
{
user
=
userBean
.
findByUserId
(
userId
,
false
);
}
printPlaceMapToStream
(
ostream
,
type
,
map
,
user
);
}
else
{
Date
date
=
ISODateTimeFormat
.
dateTime
().
parseDateTime
(
timelapseDate
).
toDate
();
printTimelapseToStream
(
ostream
,
type
,
map
,
date
);
}
ostream
.
flush
();
}
catch
(
EJBException
e
)
{
logger
.
debug
(
"Permission denied. Returning SC_FORBIDDEN!"
);
logger
.
debug
(
"Permission denied. Returning SC_FORBIDDEN!"
);
response
.
setContentType
(
"text/html;charset=UTF-8"
);
response
.
setContentType
(
"text/html;charset=UTF-8"
);
...
@@ -161,80 +175,36 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -161,80 +175,36 @@ public class PlaceMapServlet extends HttpServlet {
}
}
}
}
private
void
printPlaceMapToStream
(
OutputStream
outputStream
,
String
filetype
,
EventMap
map
,
Integer
userid
,
String
userToken
)
throws
IOException
private
void
printTimelapseToStream
(
OutputStream
ostr
,
String
filetype
,
EventMap
map
,
Date
date
)
throws
IOException
{
{
BufferedImage
image
=
drawMap
(
map
,
new
TimelapsePicker
(
date
));
ImageIO
.
write
(
image
,
filetype
,
ostr
);
EventUser
user
=
null
;
if
(
userToken
!=
null
)
user
=
barcodeBean
.
getUserFromLongTextCode
(
userToken
);
if
(!
permbean
.
hasPermission
(
MapPermission
.
VIEW
)
&&
user
==
null
)
{
loggerbean
.
sendMessage
(
MoyaEventType
.
USER_INSUFFICIENT_PERMISSIONS
,
permbean
.
getCurrentUser
(),
"User tried to print the placemap to stream without sufficient permissions"
);
throw
new
EJBAccessException
(
"Not enough permissions to print placemap"
);
}
}
long
begin
=
new
Date
().
getTime
();
// List<Place> selectedPlaceList = placeBean.findPlaces(placeIds);
private
void
printPlaceMapToStream
(
OutputStream
outputStream
,
String
filetype
,
EventMap
map
,
EventUser
user
)
throws
IOException
{
// logger.debug("SelectedPlaceList: size {}, {} ",
// selectedPlaceList.size(), selectedPlaceList);
// map = eventMapFacade.find(eventId, mapId);
// if (map == null) {
// throw new PermissionDeniedException(secubean, user,
// "Map not found with id: " + mapId + " and event id: " +
// eventbean.getCurrentEvent());
// }
// logger.debug("Got map object {}", map);
List
<
Place
>
places
=
map
.
getPlaces
();
List
<
Place
>
userplaces
=
null
;
List
<
Place
>
userplaces
=
null
;
if
(
user
!=
null
)
{
userplaces
=
placeBean
.
findPlacePrintlistForUser
(
user
);
if
(
userid
!=
null
&&
userid
!=
0
)
{
EventUser
placesForUser
=
userBean
.
findByUserId
(
userid
,
false
);
if
(
user
!=
null
)
{
userplaces
=
placeBean
.
findPlacePrintlistForUser
(
placesForUser
);
}
}
// Yes this is is in correct order.
if
(
user
==
null
)
{
user
=
permbean
.
getCurrentUser
();
}
}
if
(
user
!=
null
)
{
BufferedImage
image
=
drawMap
(
map
,
new
LegacyColorPicker
(
user
,
userplaces
));
userplaces
=
placeBean
.
findPlacePrintlistForUser
(
user
);
ImageIO
.
write
(
image
,
filetype
,
outputStream
);
}
}
private
BufferedImage
drawMap
(
EventMap
map
,
PlaceColorPicker
colorPicker
)
throws
IOException
{
if
(
user
==
null
)
user
=
permbean
.
getCurrentUser
();
// List<Place> selectedPlaces = placemapBean.findSelectedPlaces(map);
BufferedImage
image
=
ImageIO
.
read
(
new
ByteArrayInputStream
(
map
.
getMapData
()));
BufferedImage
image
=
ImageIO
.
read
(
new
ByteArrayInputStream
(
map
.
getMapData
()));
Graphics2D
g2d
=
image
.
createGraphics
();
Graphics2D
g2d
=
image
.
createGraphics
();
for
(
Place
place
:
places
)
{
for
(
Place
place
:
map
.
getPlaces
())
{
if
(
userplaces
!=
null
)
{
drawPlace
(
place
,
g2d
,
colorPicker
);
if
(
userplaces
.
contains
(
place
))
{
drawPlace
(
place
,
g2d
,
user
,
true
,
true
);
}
else
{
drawPlace
(
place
,
g2d
,
user
,
true
,
false
);
}
}
else
{
drawPlace
(
place
,
g2d
,
user
,
false
,
false
);
}
}
return
image
;
}
}
// BufferedImage image = map.getMapWithPlaces(, selectedPlaces);
logger
.
debug
(
"Prewrite {}"
,
new
Date
().
getTime
()
-
begin
);
ImageIO
.
write
(
image
,
filetype
,
outputStream
);
logger
.
debug
(
"postwrite {}"
,
new
Date
().
getTime
()
-
begin
);
}
/***
/***
* Convert request parameter into integer
* Convert request parameter into integer
...
@@ -243,8 +213,7 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -243,8 +213,7 @@ public class PlaceMapServlet extends HttpServlet {
* @param parameter
* @param parameter
* @return
* @return
*/
*/
private
static
Integer
getIntegerParameter
(
HttpServletRequest
request
,
private
static
Integer
getIntegerParameter
(
HttpServletRequest
request
,
String
parameter
)
{
String
parameter
)
{
try
{
try
{
String
valueString
=
request
.
getParameter
(
parameter
);
String
valueString
=
request
.
getParameter
(
parameter
);
Integer
value
=
Integer
.
parseInt
(
valueString
);
Integer
value
=
Integer
.
parseInt
(
valueString
);
...
@@ -254,42 +223,35 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -254,42 +223,35 @@ public class PlaceMapServlet extends HttpServlet {
return
null
;
return
null
;
}
}
// <editor-fold defaultstate="collapsed"
// <editor-fold defaultstate="collapsed"
// desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
// desc="HttpServlet methods. Click on the + sign on the left to edit the
// code.">
/**
/**
* Handles the HTTP <code>GET</code> method.
* Handles the HTTP <code>GET</code> method.
*
*
* @param request
* @param request servlet request
* servlet request
* @param response servlet response
* @param response
* @throws ServletException if a servlet-specific error occurs
* servlet response
* @throws IOException if an I/O error occurs
* @throws ServletException
* if a servlet-specific error occurs
* @throws IOException
* if an I/O error occurs
*/
*/
@Override
@Override
protected
void
doGet
(
HttpServletRequest
request
,
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
throws
ServletException
,
IOException
{
processRequest
(
request
,
response
);
processRequest
(
request
,
response
);
}
}
/**
/**
* Handles the HTTP <code>POST</code> method.
* Handles the HTTP <code>POST</code> method.
*
*
* @param request
* @param request servlet request
* servlet request
* @param response servlet response
* @param response
* @throws ServletException if a servlet-specific error occurs
* servlet response
* @throws IOException if an I/O error occurs
* @throws ServletException
* if a servlet-specific error occurs
* @throws IOException
* if an I/O error occurs
*/
*/
@Override
@Override
protected
void
doPost
(
HttpServletRequest
request
,
protected
void
doPost
(
HttpServletRequest
request
,
HttpServletResponse
response
)
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
throws
ServletException
,
IOException
{
processRequest
(
request
,
response
);
processRequest
(
request
,
response
);
}
}
...
@@ -309,13 +271,52 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -309,13 +271,52 @@ public class PlaceMapServlet extends HttpServlet {
private
static
final
Color
BORDER_COLOR
=
Color
.
BLACK
;
private
static
final
Color
BORDER_COLOR
=
Color
.
BLACK
;
private
static
final
Color
LOCKED_COLOR
=
Color
.
DARK_GRAY
;
private
static
final
Color
LOCKED_COLOR
=
Color
.
DARK_GRAY
;
private
static
void
drawPlace
(
Place
p
,
Graphics2D
g
,
EventUser
user
,
boolean
onlyFrame
,
boolean
hilight
)
{
private
static
interface
PlaceColorPicker
{
if
(
p
.
isDisabled
())
{
Color
getColor
(
Place
p
);
return
;
}
}
Color
color
=
null
;
if
(!
onlyFrame
)
{
public
static
class
TimelapsePicker
implements
PlaceColorPicker
{
private
final
Date
date
;
public
TimelapsePicker
(
Date
date
)
{
this
.
date
=
date
;
}
@Override
public
Color
getColor
(
Place
p
)
{
if
(
p
.
getReserverSlot
()
!=
null
&&
date
.
after
(
p
.
getReserverSlot
().
getUsed
()))
{
return
RESERVED_COLOR
;
}
return
null
;
}
}
public
static
class
LegacyColorPicker
implements
PlaceColorPicker
{
private
final
EventUser
user
;
// private final boolean onlyFrame;
// private final boolean hilight;
private
final
List
<
Place
>
userplaces
;
// public LegacyColorPicker(EventUser u, boolean onlyFrame, boolean
// hilight) {
// this.user = u;
// this.onlyFrame = onlyFrame;
// this.hilight = hilight;
// }
public
LegacyColorPicker
(
EventUser
user2
,
List
<
Place
>
userplaces
)
{
this
.
user
=
user2
;
this
.
userplaces
=
userplaces
;
}
public
Color
getColor
(
Place
p
)
{
Color
color
=
null
;
// Check if we wan
if
(
userplaces
==
null
)
{
if
(!
p
.
isBuyable
())
{
if
(!
p
.
isBuyable
())
{
logger
.
debug
(
"Setting color as locked place."
);
logger
.
debug
(
"Setting color as locked place."
);
color
=
LOCKED_COLOR
;
color
=
LOCKED_COLOR
;
...
@@ -326,8 +327,7 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -326,8 +327,7 @@ public class PlaceMapServlet extends HttpServlet {
color
=
SELECTED_COLOR
;
color
=
SELECTED_COLOR
;
}
else
if
(
user
.
equals
(
p
.
getCurrentUser
())
}
else
if
(
user
.
equals
(
p
.
getCurrentUser
())
||
(
p
.
getGroup
()
!=
null
&&
user
.
equals
(
p
.
getGroup
().
getCreator
()))
||
(
p
.
getGroup
()
!=
null
&&
user
.
equals
(
p
.
getGroup
().
getCreator
()))
||
(
p
.
getPlaceReserver
()
!=
null
&&
user
.
equals
(
p
||
(
p
.
getPlaceReserver
()
!=
null
&&
user
.
equals
(
p
.
getPlaceReserver
().
getUser
())))
{
.
getPlaceReserver
().
getUser
())))
{
color
=
OWNED_COLOR
;
color
=
OWNED_COLOR
;
// logger.debug("Setting place owned {}", p);
// logger.debug("Setting place owned {}", p);
...
@@ -335,7 +335,8 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -335,7 +335,8 @@ public class PlaceMapServlet extends HttpServlet {
color
=
RESERVED_COLOR
;
color
=
RESERVED_COLOR
;
// logger.debug("Setting place Reserved {}", p);
// logger.debug("Setting place Reserved {}", p);
}
else
if
(
p
.
getProduct
()
!=
null
&&
p
.
getProduct
()
!=
null
&&
p
.
getProduct
().
getColor
()
!=
null
&&
!
p
.
getProduct
().
getColor
().
isEmpty
())
{
}
else
if
(
p
.
getProduct
()
!=
null
&&
p
.
getProduct
()
!=
null
&&
p
.
getProduct
().
getColor
()
!=
null
&&
!
p
.
getProduct
().
getColor
().
isEmpty
())
{
try
{
try
{
color
=
Color
.
decode
(
p
.
getProduct
().
getColor
());
color
=
Color
.
decode
(
p
.
getProduct
().
getColor
());
}
catch
(
NumberFormatException
x
)
{
}
catch
(
NumberFormatException
x
)
{
...
@@ -343,19 +344,30 @@ public class PlaceMapServlet extends HttpServlet {
...
@@ -343,19 +344,30 @@ public class PlaceMapServlet extends HttpServlet {
}
}
}
else
{
}
else
{
// too much debugging -TKjne
// too much debugging -TKjne
// logger.debug("Nothing special for this place. Color should be default.");
// logger.debug("Nothing special for this place. Color
// should be default.");
}
}
}
else
if
(
userplaces
.
contains
(
p
))
{
color
=
OWNED_COLOR
;
}
return
color
;
}
}
}
if
(
hilight
)
{
;
color
=
OWNED_COLOR
;
private
static
void
drawPlace
(
Place
p
,
Graphics2D
g
,
PlaceColorPicker
colorPicker
)
{
if
(
p
.
isDisabled
())
{
return
;
}
}
Color
color
=
colorPicker
.
getColor
(
p
);
if
(
color
!=
null
)
{
if
(
color
!=
null
)
{
//
logger.debug("Setting fill color: {} for p", color, p);
//
logger.debug("Setting fill color: {} for p", color, p);
g
.
setColor
(
color
);
g
.
setColor
(
color
);
g
.
fill
(
new
Rectangle
(
p
.
getMapX
()+
1
,
p
.
getMapY
()+
1
,
p
.
getWidth
()-
1
,
p
.
getHeight
()-
1
));
g
.
fill
(
new
Rectangle
(
p
.
getMapX
()
+
1
,
p
.
getMapY
()
+
1
,
p
.
getWidth
()
-
1
,
p
.
getHeight
()
-
1
));
}
}
g
.
setColor
(
BORDER_COLOR
);
g
.
setColor
(
BORDER_COLOR
);
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment