Commit bb3423fc by Tuomas Riihimäki

EJB:t saa suoraa HostnameFilteriltä hostnamen eikä sitä tarvitse enää kertoa jok…

…a funktiokutsussa uudelleen \o/ Refaktoroitu funktioista Event parametri pois
1 parent cfc80c30
Showing with 1429 additions and 396 deletions
......@@ -28,5 +28,8 @@
<dependent-module archiveName="slf4j-jdk14-1.5.8.jar" deploy-path="/lib" handle="module:/classpath/lib/LanBortal/ExtraLibs/slf4j-jdk14-1.5.8.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="log4j.jar" deploy-path="/lib" handle="module:/classpath/lib/LanBortal/ExtraLibs/log4j.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
</wb-module>
</project-modules>
No preview for this file type
......@@ -3,11 +3,11 @@
<classpathentry kind="src" path="src"/>
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/LanBortalAuthModuleClient"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish v3 Java EE 6"/>
<classpathentry kind="lib" path="/Users/tuomari/bin/glassfishv31_0507_2/glassfish/lib/appserv-rt.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/Users/tuomari/bin/glassfishv3_b10-07_12_2010/glassfish/lib/appserv-rt.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -4,11 +4,11 @@
<source path="ejbModule" includes="" excludes="" output="../LanBortalWeb/as3;"/>
<project path="LanBortalAuthModuleClient"/>
<project path="LanBortalBeansClient"/>
<template kind="REMOTE_DESTINATION" uris="class:org/granite/generator/template/remote.gsp;class:org/granite/generator/template/remoteBase.gsp"/>
<template kind="ENTITY" uris="class:org/granite/generator/template/entity.gsp;class:org/granite/generator/template/entityBase.gsp"/>
<template kind="INTERFACE" uris="class:org/granite/generator/template/interface.gsp"/>
<template kind="ENUM" uris="class:org/granite/generator/template/enum.gsp"/>
<template kind="ENTITY" uris="class:org/granite/generator/template/entity.gsp;class:org/granite/generator/template/entityBase.gsp"/>
<template kind="REMOTE_DESTINATION" uris="class:org/granite/generator/template/remote.gsp;class:org/granite/generator/template/remoteBase.gsp"/>
<template kind="BEAN" uris="class:org/granite/generator/template/bean.gsp;class:org/granite/generator/template/beanBase.gsp"/>
<template kind="ENUM" uris="class:org/granite/generator/template/enum.gsp"/>
<transformer type="org.granite.generator.as3.JavaAs3GroovyTransformer"/>
</gas3>
</graniteProperties>
\ No newline at end of file
......@@ -25,6 +25,11 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.axdt.as3.imp.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
......@@ -32,5 +37,6 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.granite.builder.granitenature</nature>
<nature>org.axdt.as3.imp.nature</nature>
</natures>
</projectDescription>
......@@ -13,6 +13,7 @@ import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class BillBean
*/
......@@ -30,6 +31,8 @@ public class BillBean implements BillBeanLocal {
@EJB
private AuthorisationBeanLocal authbean;
@EJB
private EventBeanLocal eventbean;
/**
* Default constructor.
......@@ -38,13 +41,13 @@ public class BillBean implements BillBeanLocal {
// TODO Auto-generated constructor stub
}
public Bill findById(int eventId, int id) {
if (eventId <= 0 && id <= 0) {
public Bill findById(int id) {
Event event = eventbean.getCurrentEvent();
if (id <= 0) {
return null;
}
Bill bill = billFacade.find(eventId, id);
Event event = bill.getEvent();
User currentuser = userBean.getCurrentUser(event);
Bill bill = billFacade.find(event.getId(), id);
User currentuser = userBean.getCurrentUser();
if (!currentuser.equals(bill.getUser()))
if (!authbean.isAuthorised(currentuser, Right.ADMIN, RightType.READ)) {
......@@ -67,6 +70,4 @@ public class BillBean implements BillBeanLocal {
return new PdfPrinter(bill).output();
}
}
......@@ -13,6 +13,7 @@ import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.ThreadLocalContextHolder;
/**
* Session Bean implementation class EventBean
......@@ -72,6 +73,11 @@ public class EventBean implements EventBeanLocal {
return settings;
}
public Event getCurrentEvent() {
return getEventByHostname((String) ThreadLocalContextHolder.get(HTTP_URL_HOSTNAME));
}
......
......@@ -40,8 +40,8 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
public User tryLogin(String username, String password) {
User user = userfacade.findByLogin(username.trim());
logger.debug("Trying to login as {}", username);
logger.info("Logging test");
logger.debug("Trying to login as {}", username);
logger.info("Logging test");
User ret = null;
if (user != null) {
if (user.checkPassword(password)) {
......
......@@ -19,7 +19,6 @@ import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
......@@ -49,16 +48,18 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
private SecurityBeanLocal secubean;
@EJB
private UserBeanLocal userbean;
@EJB
private EventBeanLocal eventbean;
public void printPlaceMapToStream(OutputStream outputStream, String filetype, Event event, Integer mapId, List<Integer> placeIds) throws IOException, EjbPermissionDeniedException {
public void printPlaceMapToStream(OutputStream outputStream, String filetype, Integer mapId, List<Integer> placeIds) throws IOException, EjbPermissionDeniedException {
User user = userbean.getCurrentUser(event);
User user = userbean.getCurrentUser();
if (!userbean.hasPermission(Permission.TICKET_SALES, user, RolePermission.READ)) {
throw new EjbPermissionDeniedException(secubean, user, "User has no right to view placemap ( TICKET_SALES, READ )");
}
long begin = new Date().getTime();
Integer eventId = event.getId();
Integer eventId = eventbean.getCurrentEvent().getId();
List<Place> selectedPlaceList = new ArrayList<Place>();
......@@ -68,7 +69,7 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
selectedPlaceList.add(placeFacade.find(eventId, id));
}
if (logger.isDebugEnabled()) {
logger.debug("Fetching map for event {}", event);
logger.debug("Fetching map for event {}", eventbean.getCurrentEvent());
logger.debug("Got mapid {}, time {}", mapId, new Date().getTime() - begin);
}
......@@ -83,7 +84,7 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
}
if (map == null) {
throw new EjbPermissionDeniedException(secubean, user, "Map not found with id: " + mapId + " and event id: " + event);
throw new EjbPermissionDeniedException(secubean, user, "Map not found with id: " + mapId + " and event id: " + eventbean.getCurrentEvent());
}
logger.debug("Got map object {}", map);
......@@ -138,7 +139,7 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
return "/PlaceMap" + parameters;
}
public long selectablePlaceCount(User user, Event currentEvent) {
return placeFacade.count(currentEvent);
public long selectablePlaceCount(User user) {
return placeFacade.count(eventbean.getCurrentEvent());
}
}
......@@ -34,6 +34,7 @@ import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.ThreadLocalContextHolder;
import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
/**
......@@ -51,10 +52,6 @@ public class TestDataBean implements TestDataBeanLocal {
@EJB
private EventMapFacade eventMapFacade;
@EJB
private EventStatusBeanLocal eventStatusBean;
@EJB
private EventOrganiserFacade eventOrganiserFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserFacade userFacade;
......@@ -72,7 +69,7 @@ public class TestDataBean implements TestDataBeanLocal {
private RoleBeanLocal role;
@EJB
private UserBeanLocal userbean;
// @PersistenceUnit
// private EntityManagerFactory emf;
//
......@@ -81,8 +78,8 @@ public class TestDataBean implements TestDataBeanLocal {
}
public void writeMap(Event e, long bytes) {
EventMap map = new EventMap(e);
public void writeMap( long bytes) {
EventMap map = new EventMap(eventBean.getCurrentEvent());
map.setName("test" + bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes; ++i) {
......@@ -94,7 +91,7 @@ public class TestDataBean implements TestDataBeanLocal {
}
public EventMap readMap(long bytes) {
return eventMapFacade.findByName("test" + bytes);
}
......@@ -157,8 +154,8 @@ public class TestDataBean implements TestDataBeanLocal {
return u;
}
public Bill createBill(Event e, User u) {
Bill b = new Bill(e);
public Bill createBill( User u) {
Bill b = new Bill(eventBean.getCurrentEvent());
b.setUser(u);
b.setAddr1("Kalle Kävijä");
b.setAddr2("co / Pelivieroitus Ry");
......@@ -205,7 +202,8 @@ public class TestDataBean implements TestDataBeanLocal {
return bl;
}
public EventMap generateTestMap(Event event) {
public EventMap generateTestMap() {
Event event = eventBean.getCurrentEvent();
try {
logger.info("Generating Test Map for event: " + event);
EventMap map = new EventMap(event);
......@@ -233,7 +231,7 @@ public class TestDataBean implements TestDataBeanLocal {
stream.close();
String str = Base64.encodeBase64String(bytes);
logger.debug("Saving image with {} base64 encoded chars", str.length());
map.setMapData(str );
map.setMapData(str);
map.setName("test0");
eventMapFacade.create(map);
......@@ -289,7 +287,8 @@ public class TestDataBean implements TestDataBeanLocal {
}
@Override
public void generateTestCompos(Event event) {
public void generateTestCompos() {
Event event = eventBean.getCurrentEvent();
Compo compo = new Compo(event);
compo.setName("Test compo");
compo.setHoldVoting(false);
......@@ -313,4 +312,9 @@ public class TestDataBean implements TestDataBeanLocal {
Query q = em.createQuery("delete from EventMap");
q.executeUpdate();
}
public void contextTest() {
logger.debug("Hostname: {}",ThreadLocalContextHolder.get("HTTP_URL_HOSTNAME"));
}
}
......@@ -11,13 +11,13 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.enterprise.deploy.spi.Target;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
......@@ -42,11 +42,18 @@ public class UserBean implements UserBeanLocal {
private UserFacade userFacade;
@Resource
private SessionContext context;
@EJB
private RoleFacade roleFacade;
@EJB
private AccessRightBeanLocal accessRightBeanLocal;
@EJB
private SecurityBeanLocal secubean;
@EJB
private EventBeanLocal eventBean;
/**
* Default constructor.
*/
......@@ -64,14 +71,23 @@ public class UserBean implements UserBeanLocal {
return returnUser;
}
public List<User> getUsers() {
public List<User> getUsers() throws EjbPermissionDeniedException {
User curruser = getCurrentUser();
if (curruser == null || !hasPermission(Permission.USER_MANAGEMENT, curruser, RolePermission.READ)) {
throw new EjbPermissionDeniedException(secubean, curruser, "User tried to execute getUsers function with insufficient permissions");
}
List<User> ret = userFacade.findAll();
logger.info("Found {} users from database ", ret.size());
return ret;
}
@Override
public User mergeChanges(User user) {
public User mergeChanges(User user) throws EjbPermissionDeniedException {
User curruser = getCurrentUser();
if (curruser == null || !hasPermission(Permission.USER_MANAGEMENT, curruser, RolePermission.WRITE) || !user.equals(curruser)) {
throw new EjbPermissionDeniedException(secubean, curruser, "User tried to merge someone others data with insufficient permissions");
}
return userFacade.merge(user);
}
......@@ -83,17 +99,15 @@ public class UserBean implements UserBeanLocal {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getNick());
}
public User getLoggedInUserOrNull() {
Principal principal = context.getCallerPrincipal();
User ret = getUser(principal.getName());
return ret;
}
@Override
public User getCurrentUser(Event event) {
User ret = getLoggedInUserOrNull();
public User getCurrentUser() {
Principal principal = context.getCallerPrincipal();
User ret = userFacade.findByLogin(principal.getName());
if (ret == null) {
ret = getDefaultUser(event);
ret = getDefaultUser();
}
return ret;
}
......@@ -102,8 +116,8 @@ public class UserBean implements UserBeanLocal {
* Makes sure default user and public role exist and the user is member of
* the role.
*/
public User getDefaultUser(Event event) {
Role publicRole = roleFacade.getOrCreatePublicRole(event);
public User getDefaultUser() {
Role publicRole = roleFacade.getOrCreatePublicRole(eventBean.getCurrentEvent());
User defaultUser = userFacade.getOrCreateDefaultUser();
if (!defaultUser.getRoles().contains(publicRole)) {
ArrayList<Role> userRoles = new ArrayList<Role>();
......@@ -121,7 +135,7 @@ public class UserBean implements UserBeanLocal {
// TODO: FIX THIS!! really bad idea....
if (user.isSuperadmin()) {
logger.debug("Returning true for superadmin for {} perm {}", target.name(),permission);
logger.debug("Returning true for superadmin for {} perm {}", target.name(), permission);
return true;
}
......
package fi.insomnia.bortal.beans.flash;
public class Dummyclass {
private String name;
private Integer id;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
}
package fi.insomnia.bortal.beans.flash;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
......@@ -13,8 +14,11 @@ import org.granite.messaging.service.annotations.RemoteDestination;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.flash.wrapper.PlaceWrapper;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Place;
......@@ -25,41 +29,47 @@ import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
*/
@Stateless
@RemoteDestination
public class FlashMapBean implements FlashMapBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(FlashMapBean.class);
@EJB
private EventFacade eventFacade;
private EventFacade eventFacade;
@EJB
private EventMapFacade mapFacade;
@PersistenceUnit
private EntityManagerFactory emf;
@EJB
private EventBeanLocal eventbean;
/**
* Default constructor.
* Default constructor.
*/
public FlashMapBean() {
// TODO Auto-generated constructor stub
}
public byte[] getMapBackground(Integer eventId, Integer mapId)
{
logger.debug("Fetching data with eventid {}, mapid {}", eventId, mapId);
EntityManager em = emf.createEntityManager();
EventMap map = em.find(EventMap.class, new EventPk(eventId, mapId));
logger.debug("Got map: {}", map);
return Base64.decodeBase64(map.getMapData());
}
public List<Place> getMapPlaces(Integer eventId, Integer mapId)
{
EventMap map = mapFacade.getMapById(eventId, mapId);
return map.getPlaces();
}
public String getEventById(Integer id)
{
return "returning event with id " + id;
}
public byte[] getMapBackground(Integer mapId) {
Event event = eventbean.getCurrentEvent();
logger.debug("Fetching data with eventid {}, mapid {}", event, mapId);
EntityManager em = emf.createEntityManager();
EventMap map = em.find(EventMap.class, new EventPk(event.getId(), mapId));
logger.debug("Got map: {}", map);
return Base64.decodeBase64(map.getMapData());
}
public List<PlaceWrapper> getMapPlaces(Integer mapId) {
Event event = eventbean.getCurrentEvent();
eventbean.getCurrentEvent();
EventMap map = mapFacade.getMapById(event.getId(), mapId);
List<Place> retplace = map.getPlaces();
List<PlaceWrapper> ret = new ArrayList<PlaceWrapper>();
for (Place p : retplace) {
ret.add(new PlaceWrapper(p));
}
logger.debug("Returning {} places to flash.", ret.size());
return ret;
}
}
package fi.insomnia.bortal.beans.flash;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.beans.flash.wrapper.PlaceWrapper;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.Place;
@Local
public interface FlashMapBeanLocal {
byte[] getMapBackground(Integer eventId, Integer mapId);
List<Place> getMapPlaces(Integer eventId, Integer mapId);
byte[] getMapBackground(Integer mapId);
String getEventById(Integer id);
List<PlaceWrapper> getMapPlaces(Integer mapId);
}
package fi.insomnia.bortal.beans.flash;
import javax.ejb.Local;
import javax.ejb.Stateless;
import org.granite.messaging.service.annotations.RemoteDestination;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author tuomari
*
*The flash user interface sends log messages to the backend via this class.
*/
@Stateless
@RemoteDestination
public class RemoteLogger implements RemoteLoggerLocal{
private static final String PREPEND = "FLASH: ";
private static final Logger logger = LoggerFactory.getLogger(RemoteLogger.class);
public void debug(String msg) {
logger.debug(PREPEND+msg);
}
public void error(String msg) {
logger.error(PREPEND+msg);
}
public void info(String msg) {
logger.info(PREPEND+msg);
}
public void warn(String msg) {
logger.warn(PREPEND+msg);
}
}
package fi.insomnia.bortal.beans.flash;
import javax.ejb.Local;
@Local
public interface RemoteLoggerLocal {
void debug(String msg);
void error(String msg);
void info(String msg);
void warn(String msg);
}
package fi.insomnia.bortal.beans.flash.wrapper;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.Place;
public class PlaceWrapper {
private static final Logger logger = LoggerFactory.getLogger(PlaceWrapper.class);
private int id;
private String code;
private int userid;
private String description;
private String details;
private int groupId;
private int height;
private int versionfield;
private int mapId;
private int mapX;
private int mapY;
private String name;
private int reserver;
private int productid;
private int width;
public PlaceWrapper(Place p) {
id = p.getId().getId();
logger.debug("Creating new PlaceWrapper with id: {}", id);
code = p.getCode();
width = p.getWidth();
description = p.getDescription();
details = p.getDetails();
height = p.getHeight();
versionfield = p.getJpaVersionField();
mapX = p.getMapX();
mapY = p.getMapY();
name = p.getName();
if (p.getMap() != null) {
mapId = p.getMap().getId().getEventId();
}
if (p.getPlaceReserver() != null) {
reserver = p.getPlaceReserver().getId().getId();
}
if (p.getProduct() != null) {
productid = p.getProduct().getId().getId();
}
if (p.getCurrentUser() != null) {
userid = p.getCurrentUser().getId();
}
if (p.getGroup() != null) {
groupId = p.getGroup().getId().getId();
}
}
public int getId() {
return id;
}
public String getCode() {
return code;
}
public int getUserid() {
return userid;
}
public String getDescription() {
return description;
}
public String getDetails() {
return details;
}
public int getGroupId() {
return groupId;
}
public int getHeight() {
return height;
}
public int getVersionfield() {
return versionfield;
}
public int getMapId() {
return mapId;
}
public int getMapX() {
return mapX;
}
public int getMapY() {
return mapY;
}
public String getName() {
return name;
}
public int getReserver() {
return reserver;
}
public int getProductid() {
return productid;
}
public int getWidth() {
return width;
}
}
......@@ -10,7 +10,7 @@ import fi.insomnia.bortal.model.Event;
@Local
public interface BillBeanLocal {
Bill findById(int eventId, int id);
Bill findById( int id);
ByteArrayOutputStream getPdfBillStream(Bill bill);
......
......@@ -5,7 +5,10 @@ import fi.insomnia.bortal.model.Event;
@Local
public interface EventBeanLocal {
static final String HTTP_URL_HOSTNAME = "HTTP_URL_HOSTNAME";
Event getEventByHostname(String hostname);
Event getCurrentEvent();
}
......@@ -18,10 +18,10 @@ import fi.insomnia.bortal.model.User;
@RemoteDestination
public interface PlaceMapBeanLocal {
void printPlaceMapToStream(OutputStream outputStream, String filetype, Event event, Integer mapId, List<Integer> placeIds) throws EjbPermissionDeniedException,IOException;
void printPlaceMapToStream(OutputStream outputStream, String filetype, Integer mapId, List<Integer> placeIds) throws EjbPermissionDeniedException,IOException;
public String getSelectPlaceMapUrl(EventMap activeMap, List<Place> selectedPlaces, User user);
public long selectablePlaceCount(User user, Event currentEvent);
public long selectablePlaceCount(User user);
// public EventMap findMap(int i);
......
......@@ -3,7 +3,6 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.User;
......@@ -11,12 +10,12 @@ import fi.insomnia.bortal.model.User;
public interface TestDataBeanLocal {
EventMap generateTestMap(Event event);
EventMap generateTestMap();
void generateTestPlaces(EventMap map);
Bill createBill(Event e, User u);
Bill createBill(User u);
User createUser();
......@@ -24,14 +23,14 @@ public interface TestDataBeanLocal {
public void printPlacesInfo();
void generateTestCompos(Event event);
void generateTestCompos();
User createAdmin();
EventMap readMap(long bytes);
void writeMap(Event e, long bytes);
void writeMap(long bytes);
void flushMaps();
void contextTest();
}
......@@ -8,6 +8,7 @@ import org.granite.messaging.service.annotations.RemoteDestination;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.User;
......@@ -17,19 +18,21 @@ public interface UserBeanLocal {
User createNewUser(String nick, String password);
List<User> getUsers();
List<User> getUsers() throws EjbPermissionDeniedException;
User getUser(String nick);
User mergeChanges(User currentUser);
User mergeChanges(User currentUser) throws EjbPermissionDeniedException;
User getCurrentUser(Event event);
User getCurrentUser();
User getDefaultUser(Event event);
User getDefaultUser();
boolean hasPermission(Permission target, User user, RolePermission permission);
boolean isCurrentUser(User thisuser);
}
......@@ -9,11 +9,9 @@ public enum BeanRole {
ANONYMOUS, // Unauthenticated web user
USER_BASE, // JAAS access for logged in user
ADMIN_BASE(USER_BASE), // JAAS access to administrative beans
// Admin for the whole system (JAAS, boolean in User)
SUPERADMIN(false, ADMIN_BASE),
ORGANIZATION_ROOT(ADMIN_BASE), // E.g. Vectorama organisation admin
;
private boolean inDatabase;
......
......@@ -12,9 +12,9 @@ public enum Permission {
PERMISSION("Description"),
LOGIN("User can see loginbutton. (only defaultuser should have permission to that one)"),
USER_MANAGEMENT("User has right to manage users.... "),
USER_MANAGEMENT("User has right to view all users(r), modify users(w) "),
TICKET_SALES("User has right to view, and/or buy tickets"),
ROLE_MANAGEMENT("...");
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles");
private String description;
public static Permission getPermission(String name) {
......
......@@ -3,7 +3,7 @@
<persistence-unit name="BortalDb" transaction-type="JTA">
<jta-data-source>jdbc/bortal</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.cache.type.default" value="NONE"/>
......
......@@ -4,6 +4,7 @@
*/
package fi.insomnia.bortal.model;
import java.io.Serializable;
import java.util.Calendar;
import java.util.List;
......@@ -36,9 +37,13 @@ import javax.persistence.Version;
@NamedQuery(name = "Event.findByEndTime", query = "SELECT e FROM Event e WHERE e.endTime = :endTime"),
@NamedQuery(name = "Event.findByName", query = "SELECT e FROM Event e WHERE e.name = :name"),
@NamedQuery(name = "Event.findByReferer", query = "SELECT e FROM Event e WHERE e.referer = :referer") })
public class Event implements ModelInterface<Integer> {
public class Event implements ModelInterface<Integer>, Serializable {
/**
*
*/
private static final long serialVersionUID = 179811358211927126L;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "event_id", nullable = false)
......
......@@ -5,12 +5,14 @@
package fi.insomnia.bortal.model;
import java.io.Serializable;
/**
*
* @author tuukka
*/
public interface EventChildInterface extends ModelInterface<EventPk> {
public interface EventChildInterface extends ModelInterface<EventPk>, Serializable{
public EventPk getId();
public void setId(EventPk id);
......
......@@ -8,6 +8,7 @@ import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
......@@ -40,9 +41,12 @@ import javax.persistence.Version;
@NamedQuery(name = "Place.findByMapY", query = "SELECT p FROM Place p WHERE p.mapY = :mapY"),
@NamedQuery(name = "Place.findByDetails", query = "SELECT p FROM Place p WHERE p.details = :details"),
@NamedQuery(name = "Place.findByCode", query = "SELECT p FROM Place p WHERE p.code = :code")})
public class Place implements EventChildInterface {
public class Place implements EventChildInterface, Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private static final long serialVersionUID = -5314851260772328611L;
@EmbeddedId
private EventPk id;
@Lob
......
......@@ -5,7 +5,6 @@
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -30,7 +29,6 @@ import javax.persistence.Version;
@Table(name = "products")
@NamedQueries( {
@NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"),
@NamedQuery(name = "Product.findByProductName", query = "SELECT p FROM Product p WHERE p.name = :name"),
@NamedQuery(name = "Product.findByPrice", query = "SELECT p FROM Product p WHERE p.price = :price"),
@NamedQuery(name = "Product.findBySort", query = "SELECT p FROM Product p WHERE p.sort = :sort"),
......
package fi.insomnia.bortal.utilities;
import java.util.HashMap;
import java.util.Map;
public class ThreadLocalContextHolder {
private static final ThreadLocal<Map<String, Object>> THREAD_WITH_CONTEXT = new ThreadLocal<Map<String, Object>>();
private ThreadLocalContextHolder() {
}
public static void put(String key, Object payload) {
if (THREAD_WITH_CONTEXT.get() == null) {
THREAD_WITH_CONTEXT.set(new HashMap<String, Object>());
}
THREAD_WITH_CONTEXT.get().put(key, payload);
}
public static Object get(String key) {
return THREAD_WITH_CONTEXT.get().get(key);
}
public static void cleanupThread() {
THREAD_WITH_CONTEXT.remove();
}
}
\ No newline at end of file
Manifest-Version: 1.0
Class-Path: lib/log4j.jar
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<!--
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/tmp/graniteds-pojo.log"/>
<param name="Threshold" value="INFO"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="1MB"/>
<param name="MaxBackupIndex" value="1"/>
<layout class="org.apache.log4j.PatternLayout">
<param
name="ConversionPattern"
value="%d %-5p %X{service} %X{user} [%c] %m%n"/>
</layout>
</appender>
-->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param
name="ConversionPattern"
value="%d{ABSOLUTE} %-5p %X{service} %X{user} [%c{1}] %m%n"/>
</layout>
</appender>
<category name="org.granite">
<priority value="INFO" />
</category>
<category name="org.granite.messaging.webapp.AMFMessageServlet">
<priority value="INFO" />
</category>
<root>
<appender-ref ref="CONSOLE"/>
<!-- appender-ref ref="FILE"/> -->
</root>
</log4j:configuration>
......@@ -62,6 +62,10 @@
<to-view-id>/permissionDenied.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>viewExpired</from-outcome>
<to-view-id>/viewExpired.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/auth/logout.xhtml</to-view-id>
</navigation-case>
......@@ -81,7 +85,9 @@
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory>
</faces-config>
......
......@@ -7,10 +7,7 @@
<security type="org.granite.messaging.service.security.GlassFishV3SecurityService"/>
<tide-components>
<tide-component instance-of="org.granite.tide.ejb.EjbIdentity"/>
<!-- <tide-component annotated-with="org.granite.messaging.service.annotations.RemoteDestination"/>
-->
<tide-component type="fi\.insomnia\.bortal\.beans\.flash\..*"/>
<tide-component annotated-with="javax.ejb.Stateless"/>
<tide-component type="fi\.insomnia\.bortal\.beans\.flash\..*"/>
</tide-components>
</granite-config>
......@@ -37,7 +37,7 @@
</filter>
<filter-mapping>
<filter-name>HostnameFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<servlet-name>*</servlet-name>
</filter-mapping>
<login-config>
<auth-method>FORM</auth-method>
......@@ -83,56 +83,45 @@
<error-code>403</error-code>
<location>/auth/notauthorized.jsf</location>
</error-page>
<!--
#################################
# GRANITEDS STUFF!!! #
# Don't edit! #
# Tuomari #
#################################
-->
<!-- Granite config context listener -->
<listener>
<listener-class>org.granite.config.GraniteConfigListener</listener-class>
</listener>
<error-page>
<exception-type>fi.insomnia.bortal.exceptions.PermissionDeniedException</exception-type>
<location>/auth/notauthorized.jsf</location>
</error-page>
<!-- GDS AMF message filter -->
<filter>
<filter-name>AMFMessageFilter</filter-name>
<filter-class>org.granite.messaging.webapp.AMFMessageFilter</filter-class>
<!--
Uncomment (part of) this block if configs are not present at default locations.
<init-param>
<param-name>servicesConfigPath</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param>
<param-name>graniteConfigPath</param-name>
<param-value>/WEB-INF/granite/granite-config.xml</param-value>
</init-param-->
<!-- ################################# # GRANITEDS STUFF!!! # # Don't edit! # # Tuomari # ################################# -->
<!-- Granite config context listener -->
<listener>
<listener-class>org.granite.config.GraniteConfigListener</listener-class>
</listener>
<!-- GDS AMF message filter -->
<filter>
<filter-name>AMFMessageFilter</filter-name>
<filter-class>org.granite.messaging.webapp.AMFMessageFilter</filter-class>
<!-- Uncomment (part of) this block if configs are not present at default locations. <init-param> <param-name>servicesConfigPath</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <init-param> <param-name>graniteConfigPath</param-name> <param-value>/WEB-INF/granite/granite-config.xml</param-value> </init-param -->
</filter>
</filter>
<filter-mapping>
<filter-name>AMFMessageFilter</filter-name>
<url-pattern>/graniteamf/*</url-pattern>
</filter-mapping>
<!-- GDS AMF Servlet -->
<servlet>
<servlet-name>AMFMessageServlet</servlet-name>
<servlet-class>org.granite.messaging.webapp.AMFMessageServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AMFMessageServlet</servlet-name>
<url-pattern>/graniteamf/*</url-pattern>
</servlet-mapping>
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
<filter-mapping>
<filter-name>AMFMessageFilter</filter-name>
<url-pattern>/graniteamf/*</url-pattern>
</filter-mapping>
<!-- GDS AMF Servlet -->
<servlet>
<servlet-name>AMFMessageServlet</servlet-name>
<servlet-class>org.granite.messaging.webapp.AMFMessageServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AMFMessageServlet</servlet-name>
<url-pattern>/graniteamf/*</url-pattern>
</servlet-mapping>
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref>
</web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.axdt.as3.debug.launcher.type">
<stringAttribute key="ALT_PATH" value="file://${deploy_loc}/${resource_name_noext}.swf"/>
<stringAttribute key="COMPILER_CHOICE" value="org.axdt.flex4sdk.compiler"/>
<booleanAttribute key="FOR_AIR" value="false"/>
<booleanAttribute key="GATHER_LIBS" value="true"/>
<booleanAttribute key="OPEN_SWF" value="true"/>
<stringAttribute key="OPEN_WITH" value="CHOICE_SWFVIEW"/>
<booleanAttribute key="SEARCH_CONFIG" value="true"/>
<booleanAttribute key="USE_ALT_PATH" value="false"/>
<stringAttribute key="target" value="/LanBortalWeb/as3/fi/insomnia/bortal/flash/eventmap/eventmap.mxml"/>
</launchConfiguration>
......@@ -8,10 +8,10 @@
<body>
<object >
<param name="foo" width="1200" height="1200"
value="flash/main.swf?param1=r1239012309hadosl">
<embed width="1200" height="1200"
src="flash/main.swf?param1=r1239012309hadosl"> </embed></param>
<param name="foo" width="640" height="480"
value="flash/eventmap.swf?mapId=1">
<embed width="640" height="480"
src="flash/eventmap.swf?mapId=1"> </embed></param>
</object>
</body>
......
......@@ -19,6 +19,8 @@
<br />
<h:commandButton value="execute map tests" action="#{TestDataView.executeMapTests}" />
<br />
<h:commandButton value="Context Test" action="#{TestDataView.contextTest}" />
<br />
</h:form>
</h:body>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">HelloWorld</ui:define>
<ui:define name="header">Header</ui:define>
<ui:define name="content">
<h1>Permission Denied!</h1>
</ui:define>
<ui:define name="footer">footer</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -17,9 +17,9 @@
<composite:implementation>
<tools:canRead target="LOGIN">
<f:facet name="errorMessage">
<login:logout />
<login:login isOneliner="true" />
</f:facet>
<login:login isOneliner="true" />
<login:logout />
</tools:canRead>
</composite:implementation>
......
......@@ -25,36 +25,36 @@
<h:dataTable border="1" id="rights" value="#{roleView.roleRights}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
<h:outputText value="#{i18n['role.name']}" />
</f:facet>
<h:outputText value="#{rr.accessRight.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
<h:outputText value="#{i18n['role.description']}" />
</f:facet>
<h:outputText value="#{rr.accessRight.name}" />
<h:outputText value="#{rr.accessRight.description}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Read" />
<h:outputText value="#{i18n['role.read'}" />
</f:facet>
<h:selectBooleanCheckbox value="#{rr.read}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Write" />
<h:outputText value="#{i18n['role.write']" />
</f:facet>
<h:selectBooleanCheckbox value="#{rr.write}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Execute" />
<h:outputText value="#{i18n['role.execute']" />
</f:facet>
<h:selectBooleanCheckbox value="#{rr.execute}" />
</h:column>
<h:column>
<h:commandButton value="Save" action="#{roleView.editRoleRight}" />
<h:commandButton value="#{i18n['role.edit.save']" action="#{roleView.editRoleRight}" />
</h:column>
</h:dataTable>
</h:form>
......
......@@ -12,9 +12,11 @@
<ui:composition>
<h:panelGrid>
<h:outputText value="#{i18n['role.name']}" /><h:inputText value="#{roleView.role.name}" />
<h:panelGrid columns="2">
<h:outputText value="#{i18n['role.name']}" />
<h:inputText value="#{roleView.role.name}" />
<h:outputText value="#{i18n['role.parents']}" />
<h:selectManyListbox value="#{roleView.role.parents}">
<f:selectItems var="par" itemLabel="${par.name}" value="#{roleView.possibleParents}" />
</h:selectManyListbox>
......
......@@ -24,7 +24,7 @@
<f:facet name="header">
<h:outputText value="#" />
</f:facet>
<h:outputText value="#{role.id}" />
<h:outputText value="#{role.id.id}" />
</h:column>
<h:column>
<f:facet name="header">
......
......@@ -27,9 +27,9 @@
<h:outputLabel value="#{i18n['user.town']}:" /><h:inputText value="#{userView.user.town}" />
<h:outputLabel value="#{i18n['user.sex']}:" />
<h:selectOneRadio id="sex" value="#{userView.user.gender}">
<f:selectItem id="undefined" itemLabel="#{i18n['global.sex.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['global.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['global.sex.FEMALE']}" itemValue="FEMALE" />
<f:selectItem id="undefined" itemLabel="#{i18n['user.gender.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['user.gender.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.gender.FEMALE']}" itemValue="FEMALE" />
</h:selectOneRadio>
<h:commandButton action="#{userView.saveUser()}" value="#{i18n['save']}" />
</h:panelGrid>
......
......@@ -59,7 +59,7 @@
<f:facet name="header">
<h:outputText value="Sex" />
</f:facet>
<h:outputText value="#{i18n[concat['global.sex.,#user.gender']]}" />
<h:outputText value="#{i18n[concat['user.gender.,#user.gender']]}" />
</h:column>
<h:column rendered="#{sessionHandler.canWrite('USER_MANAGEMENT') }">
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">HelloWorld</ui:define>
<ui:define name="header">Header</ui:define>
<ui:define name="content">
<h1>View expired!</h1>
<p>Please refresh the page.</p>
</ui:define>
<ui:define name="footer">footer</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -18,12 +18,14 @@ package fi.insomnia.bortal.beans {
private var _authbean:AuthorisationBeanLocal;
private var _billFacade:BillFacade;
private var _eventbean:EventBeanLocal;
private var _secubean:SecurityBeanLocal;
private var _userBean:UserBeanLocal;
public function readExternal(input:IDataInput):void {
_authbean = input.readObject() as AuthorisationBeanLocal;
_billFacade = input.readObject() as BillFacade;
_eventbean = input.readObject() as EventBeanLocal;
_secubean = input.readObject() as SecurityBeanLocal;
_userBean = input.readObject() as UserBeanLocal;
}
......@@ -31,6 +33,7 @@ package fi.insomnia.bortal.beans {
public function writeExternal(output:IDataOutput):void {
output.writeObject(_authbean);
output.writeObject(_billFacade);
output.writeObject(_eventbean);
output.writeObject(_secubean);
output.writeObject(_userBean);
}
......
......@@ -22,6 +22,10 @@ package fi.insomnia.bortal.beans {
private var _eventStatusBean:EventStatusBeanLocal;
private var _userFacade:UserFacade;
public function get currentEvent():Event {
return null;
}
public function readExternal(input:IDataInput):void {
_eventFacade = input.readObject() as EventFacade;
_eventOrganiserFacade = input.readObject() as EventOrganiserFacade;
......
......@@ -7,6 +7,10 @@
package fi.insomnia.bortal.beans {
import fi.insomnia.bortal.model.Event;
public interface EventBeanLocal {
function get currentEvent():Event;
}
}
\ No newline at end of file
......@@ -17,12 +17,14 @@ package fi.insomnia.bortal.beans {
public class PlaceMapBeanBase implements IExternalizable, PlaceMapBeanLocal {
private var _eventMapFacade:EventMapFacade;
private var _eventbean:EventBeanLocal;
private var _placeFacade:PlaceFacade;
private var _secubean:SecurityBeanLocal;
private var _userbean:UserBeanLocal;
public function readExternal(input:IDataInput):void {
_eventMapFacade = input.readObject() as EventMapFacade;
_eventbean = input.readObject() as EventBeanLocal;
_placeFacade = input.readObject() as PlaceFacade;
_secubean = input.readObject() as SecurityBeanLocal;
_userbean = input.readObject() as UserBeanLocal;
......@@ -30,6 +32,7 @@ package fi.insomnia.bortal.beans {
public function writeExternal(output:IDataOutput):void {
output.writeObject(_eventMapFacade);
output.writeObject(_eventbean);
output.writeObject(_placeFacade);
output.writeObject(_secubean);
output.writeObject(_userbean);
......
......@@ -7,7 +7,6 @@
package fi.insomnia.bortal.beans {
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.User;
import java.io.OutputStream;
......@@ -27,10 +26,10 @@ package fi.insomnia.bortal.beans {
_initRemote = true;
}
public function printPlaceMapToStream(arg0:OutputStream, arg1:String, arg2:Event, arg3:Number, arg4:ListCollectionView):void {
public function printPlaceMapToStream(arg0:OutputStream, arg1:String, arg2:Number, arg3:ListCollectionView):void {
if (!_initRemote)
initRemote();
getOperation("printPlaceMapToStream").send(arg0, arg1, arg2, arg3, arg4);
getOperation("printPlaceMapToStream").send(arg0, arg1, arg2, arg3);
}
public function getSelectPlaceMapUrl(arg0:EventMap, arg1:ListCollectionView, arg2:User):void {
......@@ -39,10 +38,10 @@ package fi.insomnia.bortal.beans {
getOperation("getSelectPlaceMapUrl").send(arg0, arg1, arg2);
}
public function selectablePlaceCount(arg0:User, arg1:Event):void {
public function selectablePlaceCount(arg0:User):void {
if (!_initRemote)
initRemote();
getOperation("selectablePlaceCount").send(arg0, arg1);
getOperation("selectablePlaceCount").send(arg0);
}
public function addOperationListener(op:Function, type:String, handler:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void {
......
......@@ -12,7 +12,6 @@ package fi.insomnia.bortal.beans {
import fi.insomnia.bortal.facade.CompoEntryFacade;
import fi.insomnia.bortal.facade.CompoFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.UserFacade;
import flash.utils.IDataInput;
......@@ -30,8 +29,6 @@ package fi.insomnia.bortal.beans {
private var _em:EntityManager;
private var _eventBean:EventBeanLocal;
private var _eventMapFacade:EventMapFacade;
private var _eventOrganiserFacade:EventOrganiserFacade;
private var _eventStatusBean:EventStatusBeanLocal;
private var _placeFacade:PlaceFacade;
private var _role:RoleBeanLocal;
private var _userFacade:UserFacade;
......@@ -45,8 +42,6 @@ package fi.insomnia.bortal.beans {
_em = input.readObject() as EntityManager;
_eventBean = input.readObject() as EventBeanLocal;
_eventMapFacade = input.readObject() as EventMapFacade;
_eventOrganiserFacade = input.readObject() as EventOrganiserFacade;
_eventStatusBean = input.readObject() as EventStatusBeanLocal;
_placeFacade = input.readObject() as PlaceFacade;
_role = input.readObject() as RoleBeanLocal;
_userFacade = input.readObject() as UserFacade;
......@@ -61,8 +56,6 @@ package fi.insomnia.bortal.beans {
output.writeObject(_em);
output.writeObject(_eventBean);
output.writeObject(_eventMapFacade);
output.writeObject(_eventOrganiserFacade);
output.writeObject(_eventStatusBean);
output.writeObject(_placeFacade);
output.writeObject(_role);
output.writeObject(_userFacade);
......
......@@ -19,9 +19,19 @@ package fi.insomnia.bortal.beans {
private var _accessRightBeanLocal:AccessRightBeanLocal;
private var _context:SessionContext;
private var _eventBean:EventBeanLocal;
private var _roleFacade:RoleFacade;
private var _secubean:SecurityBeanLocal;
private var _userFacade:UserFacade;
public function get currentUser():User {
return null;
}
public function get defaultUser():User {
return null;
}
public function get users():ListCollectionView {
return null;
}
......@@ -29,14 +39,18 @@ package fi.insomnia.bortal.beans {
public function readExternal(input:IDataInput):void {
_accessRightBeanLocal = input.readObject() as AccessRightBeanLocal;
_context = input.readObject() as SessionContext;
_eventBean = input.readObject() as EventBeanLocal;
_roleFacade = input.readObject() as RoleFacade;
_secubean = input.readObject() as SecurityBeanLocal;
_userFacade = input.readObject() as UserFacade;
}
public function writeExternal(output:IDataOutput):void {
output.writeObject(_accessRightBeanLocal);
output.writeObject(_context);
output.writeObject(_eventBean);
output.writeObject(_roleFacade);
output.writeObject(_secubean);
output.writeObject(_userFacade);
}
}
......
......@@ -7,10 +7,15 @@
package fi.insomnia.bortal.beans {
import fi.insomnia.bortal.model.User;
import mx.collections.ListCollectionView;
public interface UserBeanLocal {
function get currentUser():User;
function get defaultUser():User;
function get users():ListCollectionView;
}
}
\ No newline at end of file
......@@ -22,22 +22,16 @@ package fi.insomnia.bortal.beans.flash {
_initRemote = true;
}
public function getMapBackground(arg0:Number, arg1:Number):void {
public function getMapBackground(arg0:Number):void {
if (!_initRemote)
initRemote();
getOperation("getMapBackground").send(arg0, arg1);
getOperation("getMapBackground").send(arg0);
}
public function getMapPlaces(arg0:Number, arg1:Number):void {
public function getMapPlaces(arg0:Number):void {
if (!_initRemote)
initRemote();
getOperation("getMapPlaces").send(arg0, arg1);
}
public function getEventById(arg0:Number):void {
if (!_initRemote)
initRemote();
getOperation("getEventById").send(arg0);
getOperation("getMapPlaces").send(arg0);
}
public function addOperationListener(op:Function, type:String, handler:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void {
......@@ -45,8 +39,6 @@ package fi.insomnia.bortal.beans.flash {
this.getOperation("getMapBackground").addEventListener(type, handler, useCapture, priority, useWeakReference);
if (op == this.getMapPlaces)
this.getOperation("getMapPlaces").addEventListener(type, handler, useCapture, priority, useWeakReference);
if (op == this.getEventById)
this.getOperation("getEventById").addEventListener(type, handler, useCapture, priority, useWeakReference);
}
public function removeOperationListener(op:Function, event:String, handler:Function):void {
......@@ -54,8 +46,6 @@ package fi.insomnia.bortal.beans.flash {
this.getOperation("getMapBackground").removeEventListener(event, handler);
if (op == this.getMapPlaces)
this.getOperation("getMapPlaces").removeEventListener(event, handler);
if (op == this.getEventById)
this.getOperation("getEventById").removeEventListener(event, handler);
}
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* NOTE: this file is only generated if it does not exist. You may safely put
* your custom code here.
*/
package fi.insomnia.bortal.beans.flash {
[Bindable]
[RemoteClass(alias="fi.insomnia.bortal.beans.flash.PlaceWrapper")]
public class PlaceWrapper extends PlaceWrapperBase {
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE
* THE GENERATOR. INSTEAD, EDIT THE INHERITED CLASS (PlaceWrapper.as).
*/
package fi.insomnia.bortal.beans.flash {
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
[Bindable]
public class PlaceWrapperBase implements IExternalizable {
private var _code:String;
private var _description:String;
private var _details:String;
private var _groupId:int;
private var _height:int;
private var _id:int;
private var _mapId:int;
private var _mapX:int;
private var _mapY:int;
private var _name:String;
private var _productid:int;
private var _reserver:int;
private var _userid:int;
private var _versionfield:int;
private var _width:int;
[Bindable(event="unused")]
public function get code():String {
return _code;
}
[Bindable(event="unused")]
public function get description():String {
return _description;
}
[Bindable(event="unused")]
public function get details():String {
return _details;
}
[Bindable(event="unused")]
public function get groupId():int {
return _groupId;
}
[Bindable(event="unused")]
public function get height():int {
return _height;
}
[Bindable(event="unused")]
public function get id():int {
return _id;
}
[Bindable(event="unused")]
public function get mapId():int {
return _mapId;
}
[Bindable(event="unused")]
public function get mapX():int {
return _mapX;
}
[Bindable(event="unused")]
public function get mapY():int {
return _mapY;
}
[Bindable(event="unused")]
public function get name():String {
return _name;
}
[Bindable(event="unused")]
public function get productid():int {
return _productid;
}
[Bindable(event="unused")]
public function get reserver():int {
return _reserver;
}
[Bindable(event="unused")]
public function get userid():int {
return _userid;
}
[Bindable(event="unused")]
public function get versionfield():int {
return _versionfield;
}
[Bindable(event="unused")]
public function get width():int {
return _width;
}
public function readExternal(input:IDataInput):void {
_code = input.readObject() as String;
_description = input.readObject() as String;
_details = input.readObject() as String;
_groupId = input.readObject() as int;
_height = input.readObject() as int;
_id = input.readObject() as int;
_mapId = input.readObject() as int;
_mapX = input.readObject() as int;
_mapY = input.readObject() as int;
_name = input.readObject() as String;
_productid = input.readObject() as int;
_reserver = input.readObject() as int;
_userid = input.readObject() as int;
_versionfield = input.readObject() as int;
_width = input.readObject() as int;
}
public function writeExternal(output:IDataOutput):void {
output.writeObject(_code);
output.writeObject(_description);
output.writeObject(_details);
output.writeObject(_groupId);
output.writeObject(_height);
output.writeObject(_id);
output.writeObject(_mapId);
output.writeObject(_mapX);
output.writeObject(_mapY);
output.writeObject(_name);
output.writeObject(_productid);
output.writeObject(_reserver);
output.writeObject(_userid);
output.writeObject(_versionfield);
output.writeObject(_width);
}
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* NOTE: this file is only generated if it does not exist. You may safely put
* your custom code here.
*/
package fi.insomnia.bortal.beans.flash {
[RemoteClass(alias="fi.insomnia.bortal.beans.flash.RemoteLogger")]
public class RemoteLogger extends RemoteLoggerBase {
}
}
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE
* THE GENERATOR. INSTEAD, EDIT THE INHERITED CLASS (RemoteLogger.as).
*/
package fi.insomnia.bortal.beans.flash {
import mx.messaging.ChannelSet;
import mx.messaging.config.ServerConfig;
import mx.rpc.remoting.mxml.RemoteObject;
public class RemoteLoggerBase extends RemoteObject {
private var _initRemote:Boolean = false;
private function initRemote():void {
destination = "";
channelSet = new ChannelSet();
channelSet.addChannel(ServerConfig.getChannel(""));
_initRemote = true;
}
public function debug(arg0:String):void {
if (!_initRemote)
initRemote();
getOperation("debug").send(arg0);
}
public function error(arg0:String):void {
if (!_initRemote)
initRemote();
getOperation("error").send(arg0);
}
public function info(arg0:String):void {
if (!_initRemote)
initRemote();
getOperation("info").send(arg0);
}
public function warn(arg0:String):void {
if (!_initRemote)
initRemote();
getOperation("warn").send(arg0);
}
public function addOperationListener(op:Function, type:String, handler:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void {
if (op == this.debug)
this.getOperation("debug").addEventListener(type, handler, useCapture, priority, useWeakReference);
if (op == this.error)
this.getOperation("error").addEventListener(type, handler, useCapture, priority, useWeakReference);
if (op == this.info)
this.getOperation("info").addEventListener(type, handler, useCapture, priority, useWeakReference);
if (op == this.warn)
this.getOperation("warn").addEventListener(type, handler, useCapture, priority, useWeakReference);
}
public function removeOperationListener(op:Function, event:String, handler:Function):void {
if (op == this.debug)
this.getOperation("debug").removeEventListener(event, handler);
if (op == this.error)
this.getOperation("error").removeEventListener(event, handler);
if (op == this.info)
this.getOperation("info").removeEventListener(event, handler);
if (op == this.warn)
this.getOperation("warn").removeEventListener(event, handler);
}
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE
* THE GENERATOR.
*/
package fi.insomnia.bortal.beans.flash {
public interface RemoteLoggerLocal {
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* NOTE: this file is only generated if it does not exist. You may safely put
* your custom code here.
*/
package fi.insomnia.bortal.beans.flash.wrapper {
[Bindable]
[RemoteClass(alias="fi.insomnia.bortal.beans.flash.wrapper.PlaceWrapper")]
public class PlaceWrapper extends PlaceWrapperBase {
}
}
\ No newline at end of file
/**
* Generated by Gas3 v2.1.0 (Granite Data Services).
*
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE
* THE GENERATOR. INSTEAD, EDIT THE INHERITED CLASS (PlaceWrapper.as).
*/
package fi.insomnia.bortal.beans.flash.wrapper {
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
[Bindable]
public class PlaceWrapperBase implements IExternalizable {
private var _code:String;
private var _description:String;
private var _details:String;
private var _groupId:int;
private var _height:int;
private var _id:int;
private var _mapId:int;
private var _mapX:int;
private var _mapY:int;
private var _name:String;
private var _productid:int;
private var _reserver:int;
private var _userid:int;
private var _versionfield:int;
private var _width:int;
[Bindable(event="unused")]
public function get code():String {
return _code;
}
[Bindable(event="unused")]
public function get description():String {
return _description;
}
[Bindable(event="unused")]
public function get details():String {
return _details;
}
[Bindable(event="unused")]
public function get groupId():int {
return _groupId;
}
[Bindable(event="unused")]
public function get height():int {
return _height;
}
[Bindable(event="unused")]
public function get id():int {
return _id;
}
[Bindable(event="unused")]
public function get mapId():int {
return _mapId;
}
[Bindable(event="unused")]
public function get mapX():int {
return _mapX;
}
[Bindable(event="unused")]
public function get mapY():int {
return _mapY;
}
[Bindable(event="unused")]
public function get name():String {
return _name;
}
[Bindable(event="unused")]
public function get productid():int {
return _productid;
}
[Bindable(event="unused")]
public function get reserver():int {
return _reserver;
}
[Bindable(event="unused")]
public function get userid():int {
return _userid;
}
[Bindable(event="unused")]
public function get versionfield():int {
return _versionfield;
}
[Bindable(event="unused")]
public function get width():int {
return _width;
}
public function readExternal(input:IDataInput):void {
_code = input.readObject() as String;
_description = input.readObject() as String;
_details = input.readObject() as String;
_groupId = input.readObject() as int;
_height = input.readObject() as int;
_id = input.readObject() as int;
_mapId = input.readObject() as int;
_mapX = input.readObject() as int;
_mapY = input.readObject() as int;
_name = input.readObject() as String;
_productid = input.readObject() as int;
_reserver = input.readObject() as int;
_userid = input.readObject() as int;
_versionfield = input.readObject() as int;
_width = input.readObject() as int;
}
public function writeExternal(output:IDataOutput):void {
output.writeObject(_code);
output.writeObject(_description);
output.writeObject(_details);
output.writeObject(_groupId);
output.writeObject(_height);
output.writeObject(_id);
output.writeObject(_mapId);
output.writeObject(_mapX);
output.writeObject(_mapY);
output.writeObject(_name);
output.writeObject(_productid);
output.writeObject(_reserver);
output.writeObject(_userid);
output.writeObject(_versionfield);
output.writeObject(_width);
}
}
}
\ No newline at end of file
/**
* @author tuomari
*/
package fi.insomnia.bortal.flash {
import org.granite.tide.BaseContext;
import org.granite.tide.events.TideResultEvent;
import org.granite.tide.events.TideFaultEvent;
import mx.controls.Alert;
public class LocalLogger {
private var _context:BaseContext;
public function LocalLogger(tide:BaseContext) {
_context = tide;
}
private var _log:Boolean = false;
public function debug(msg:String):void
{
if(!log)
{
return;
}
_context.remoteLogger.debug(msg,ret,err);
}
public function info(msg:String):void
{
if(!log)
{
return;
}
_context.remoteLogger.info(msg,ret,err);
}
public function error(msg:String):void
{
if(!log)
{
return;
}
_context.remoteLogger.error(msg,ret,err);
}
public function warn(msg:String):void
{
if(!log)
{
return;
}
_context.remoteLogger.warn(msg,ret,err);
}
public function set log(value:Boolean):void {
_log = value;
}
public function get log():Boolean {
return _log;
}
private function ret(event:TideResultEvent):void
{
//Alert.show("Log returned","Log", Alert.OK);
}
private function err(event:TideFaultEvent):void
{
Alert.show("Error sending log. Stop loggin", "Tide error", Alert.OK);
trace("Error sending log.. stop logging");
_log = false;
}
}
}
\ No newline at end of file
/**
* @author tuomari
*/
package fi.insomnia.bortal.flash.eventmap {
import org.granite.tide.ejb.Ejb;
import org.granite.tide.ejb.Context;
import org.granite.tide.ejb.Identity;
import org.granite.tide.events.TideUIEvent;
import org.granite.tide.service.DefaultServiceInitializer;
import org.granite.tide.data.events.TideDataConflictsEvent;
import org.granite.tide.data.Conflicts;
import mx.events.CloseEvent;
import org.granite.tide.events.TideResultEvent;
import org.granite.tide.events.TideFaultEvent;
import mx.core.Application;
import mx.controls.Label;
import mx.controls.Text;
import mx.controls.Image;
import mx.controls.Alert;
import mx.collections.ListCollectionView;
import mx.collections.IViewCursor
import fi.insomnia.bortal.beans.EventBean;
import fi.insomnia.bortal.flash.LocalLogger;
import fi.insomnia.bortal.beans.flash.wrapper.PlaceWrapper;
public class EventMapper {
private var _app:Application;
private var _logger:LocalLogger;
[Bindable]
private var _bgImg : Image;
[Bindable] [In]
public var _identity:Identity;
private var _tideContext:Context = Ejb.getInstance().getEjbContext();
private var _mapId:Number;
public function EventMapper( application: Application) {
// identity.isLoggedIn();
_logger = new LocalLogger(_tideContext);
_logger.log = true;
_bgImg = new Image();
_app = application;
_mapId = _app.parameters.mapId;
_tideContext.flashMapBean.getMapBackground(_mapId, bgResult, bgFault);
_tideContext.flashMapBean.getMapPlaces(_mapId,placesResult,placeFault);
_logger.debug("Initialized EventMapper");
}
private function bgResult(event:TideResultEvent):void {
_bgImg.data = event.result
_app.addChild(_bgImg);
}
private function bgFault(event:TideFaultEvent):void {
// Alert.show("Error communicating with backend.\nPlease try again.","Network error", Alert.OK);
Alert.show(event.fault.toString(), "Background Fault", Alert.OK);
}
private function placeFault(event:TideFaultEvent):void {
// Alert.show("Error communicating with backend.\nPlease try again.","Network error", Alert.OK);
Alert.show(event.fault.toString(), "Place fault", Alert.OK);
}
private function placesResult(event:TideResultEvent):void {
_logger.debug("got places");
var places:ListCollectionView = event.result as ListCollectionView;
var placeIter:IViewCursor = places.createCursor();
_logger.debug("Iterating over places");
while( !placeIter.afterLast )
{
var rowElement:Object = placeIter.current;
_logger.debug("Got bject from iterator: " + rowElement);
var placeobj:PlaceObject = new PlaceObject(_tideContext, rowElement as PlaceWrapper);
_logger.debug("Adding placeobj as child to bgImg");
_bgImg.addChild(placeobj);
_logger.debug("Added place: " + placeobj.id);
placeIter.moveNext();
}
}
}
}
\ No newline at end of file
/**
* @author tuomari
*/
package fi.insomnia.bortal.flash.eventmap {
import fi.insomnia.bortal.flash.LocalLogger;
import fi.insomnia.bortal.beans.flash.wrapper.PlaceWrapper;
import org.granite.tide.BaseContext;
import mx.containers.Canvas;
public class PlaceObject extends Canvas{
private var _place:PlaceWrapper;
private var _tideContext:BaseContext;
private var _log:LocalLogger;
public function PlaceObject(context:BaseContext, p:PlaceWrapper) {
_log = new LocalLogger(context);
_tideContext = context;
_place = p;
x = 1
this.width = p.width;
this.height = p.height;
this.x = p.mapX;
this.y = p.mapY;
this.setStyle('backgroundColor',0x00CC00);
graphics.lineStyle(2);
graphics.beginFill(0xFF0000);
graphics.drawRect(4,4,width-8, height-8);
graphics.endFill();
_log.debug("Added place: "+ p.id);
}
}
}
\ No newline at end of file
......@@ -3,18 +3,18 @@
<compiler>
<!-- keep-generated-actionscript>true</keep-generated-actionscript> -->
<include-libraries>
<library>../../../../../flashlibs/granite-essentials.swc</library>
<library>../../../../../../flashlibs/granite-essentials.swc</library>
</include-libraries>
<services>../../../../../WebContent/WEB-INF/flex/services-config.xml</services>
<debug>false</debug>
<services>../../../../../../WebContent/WEB-INF/flex/services-config.xml</services>
<debug>true</debug>
<define>
<name>CONFIG::Debug</name>
<value>false</value>
<value>true</value>
</define>
<define>
<name>CONFIG::Debugging</name>
<value>false</value>
<value>true</value>
</define>
<show-actionscript-warnings>true</show-actionscript-warnings>
<show-binding-warnings>true</show-binding-warnings>
......
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="Ejb.getInstance().initApplication()" creationComplete="init();" layout="absolute">
<mx:Script>
<![CDATA[
import org.granite.tide.ejb.Ejb;
private function init():void {
var mapper:EventMapper = new EventMapper(this);
}
]]>
</mx:Script>
</mx:Application>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="Ejb.getInstance().initApplication()" creationComplete="init();" layout="absolute">
<mx:Text id="teksti" text="Foobar123"></mx:Text>
<mx:Script>
<![CDATA[
import org.granite.tide.ejb.Ejb;
import org.granite.tide.ejb.Context;
import org.granite.tide.ejb.Identity;
import org.granite.tide.events.TideUIEvent;
import org.granite.tide.service.DefaultServiceInitializer;
import org.granite.tide.data.events.TideDataConflictsEvent;
import org.granite.tide.data.Conflicts;
import mx.events.CloseEvent;
import org.granite.tide.events.TideResultEvent;
import org.granite.tide.events.TideFaultEvent;
import mx.controls.Label;
import mx.controls.Text;
import mx.controls.Image;
import fi.insomnia.bortal.beans.EventBean;
import mx.controls.Alert;
//Ejb.getInstance().addComponentWithFactory("serviceInitializer", DefaultServiceInitializer,
// { contextRoot: "/graniteds-tide-ejb3" });
// Ejb.getInstance().addModule(AddressBookModule);
private var tideContext:Context = Ejb.getInstance().getEjbContext();
private var text1:Label;
[Bindable]
private var startupimg : Image;
private function init():void {
identity.isLoggedIn();
text1 = new Label();
text1.x = 50;
text1.y = 80;
text1.text = "Flashparam 3 Map: "+ parameters.param1 ;//+ " Username: " + identity.username + " LoggedIn: " + identity.isLoggedIn();
this.addChild(text1);
tideContext.flashMapBean.getMapBackground(1,1, eventhandler,helloFault);
// Ejb.getInstance().getEjbContext().addEventListener(TideDataConflictsEvent.DATA_CONFLICTS, conflictsHandler);
}
private function eventhandler(event:TideResultEvent):void {
var text2:Label = new Label();
text2.x = 50;
text2.y = 100;
text2.text = "Got result4!!";
this.addChild(text2);
var text3:Label = new Label();
text3.x = 50;
text3.y = 150;
var bgimg:Image = new Image();
bgimg.data = event.result;
this.addChild(bgimg);
var txt3:String = "null";
if(event.result != null)
{
txt3 = event.result.name;
}
text3.text = txt3;
this.addChild(text3);
}
private function helloFault(event:TideFaultEvent):void {
var text2:Text = new Text();
text2.x = 50;
text2.y = 100;
text2.text = event.fault.toString();
this.addChild(text2);
}
private var _conflicts:Conflicts;
private function conflictsHandler(event:TideDataConflictsEvent):void {
_conflicts = event.conflicts;
Alert.show("Someone else has modified the person you are currently working on.\nDo you want to keep your modifications ?",
"Modification conflict", Alert.YES | Alert.NO, null, conflictsCloseHandler);
}
private function conflictsCloseHandler(event:CloseEvent):void {
if (event.detail == Alert.YES)
_conflicts.acceptAllClient();
else
_conflicts.acceptAllServer();
}
[Bindable] [In]
public var identity:Identity;
]]>
</mx:Script>
</mx:Application>
\ No newline at end of file
......@@ -3,8 +3,6 @@ package fi.insomnia.bortal;
import java.io.IOException;
import java.security.AccessController;
import javax.ejb.AccessLocalException;
import javax.ejb.EJBAccessException;
import javax.security.auth.Subject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
......@@ -13,20 +11,21 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.utilities.ThreadLocalContextHolder;
/**
* Servlet Filter implementation class HostnameFilter
*/
public class HostnameFilter implements Filter {
private static final String HTTP_URL_HOSTNAME = "HTTP_URL_HOSTNAME";
private static final Logger logger = LoggerFactory.getLogger(HostnameFilter.class);
/**
* Default constructor.
*/
......@@ -50,9 +49,8 @@ public class HostnameFilter implements Filter {
if (request != null && request instanceof HttpServletRequest) {
httpRequest = ((HttpServletRequest) request);
StringBuffer url = httpRequest.getRequestURL();
Subject subj = Subject.getSubject(AccessController.getContext());
logger.warn("request URL: {}", url);
logger.debug("request URL: {}", url);
int beginindex = 7; // Let's skip http://
int slashindex = url.indexOf("/", beginindex);
......@@ -65,23 +63,16 @@ public class HostnameFilter implements Filter {
if (lastindex < 0) {
lastindex = url.length() - 1;
}
logger.warn("begin: {}, last {}", beginindex, lastindex);
String hostname = url.substring(beginindex, lastindex);
logger.info("Setting hostname to {} ", hostname);
httpRequest.getSession().setAttribute(
HTTP_URL_HOSTNAME, hostname);
logger.debug("Setting hostname to {} ", hostname);
httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME, hostname);
ThreadLocalContextHolder.put(EventBeanLocal.HTTP_URL_HOSTNAME, hostname);
}
// pass the request along the filter chain
chain.doFilter(request, response);
}
private void error401(ServletResponse response) throws IOException {
if (response instanceof HttpServletResponse) {
((HttpServletResponse) response).sendError(401);
} else {
logger.warn("Error sending errorcode! response not http but {}" + response.getClass());
}
ThreadLocalContextHolder.cleanupThread();
}
/**
......@@ -91,10 +82,10 @@ public class HostnameFilter implements Filter {
// Nothing...
}
public static String getHostname(HttpSession sess) {
public static String getCurrentHostname(HttpSession sess) {
String ret = null;
if (sess != null) {
Object retObj = sess.getAttribute(HTTP_URL_HOSTNAME);
Object retObj = sess.getAttribute(EventBeanLocal.HTTP_URL_HOSTNAME);
if (retObj != null)
ret = retObj.toString();
}
......
package fi.insomnia.bortal;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.application.Application;
......@@ -14,17 +15,26 @@ import javax.faces.context.FacesContext;
*/
public class I18n {
public static ResourceBundle GetResourceBundle() {
public static ResourceBundle getResourceBundle() {
FacesContext facesContext = FacesContext.getCurrentInstance();
Application app = facesContext.getApplication();
ResourceBundle bundle = app.getResourceBundle(facesContext, "i18n");
return bundle;
}
public static String Get(String key) {
String value = GetResourceBundle().getString(key);
public static String get(String key) {
String value = null;
try {
value = getResourceBundle().getString(key);
} catch (MissingResourceException e) {
value = null;
}
if (key == null) {
return "########";
value = "########";
} else if (value == null) {
value = "???" + key + "???";
}
return value;
}
......
package fi.insomnia.bortal.exceptions;
import java.util.Iterator;
import java.util.Map;
import javax.faces.FacesException;
import javax.faces.application.NavigationHandler;
import javax.faces.application.ViewExpiredException;
import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerWrapper;
import javax.faces.context.FacesContext;
import javax.faces.event.ExceptionQueuedEvent;
import javax.faces.event.ExceptionQueuedEventContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BortalExceptionHandler extends ExceptionHandlerWrapper {
private static final Logger logger = LoggerFactory.getLogger(BortalExceptionHandler.class);
private ExceptionHandler wrapped;
public BortalExceptionHandler(ExceptionHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public ExceptionHandler getWrapped() {
return wrapped;
}
@Override
public void handle() throws FacesException {
logger.debug("Handling exceptions");
for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
Throwable t = context.getException();
if (t instanceof ViewExpiredException) {
errorpage(i, t, "viewExpired");
} else if (t instanceof PermissionDeniedException) {
errorpage(i, t, "permissionDenied");
}
}
// At this point, the queue will not contain any ViewExpiredEvents.
// Therefore, let the parent handle them.
getWrapped().handle();
}
private void errorpage(Iterator<ExceptionQueuedEvent> i, Throwable t, String navigateTo) {
ViewExpiredException vee = (ViewExpiredException) t;
FacesContext fc = FacesContext.getCurrentInstance();
Map<String, Object> requestMap = fc.getExternalContext().getRequestMap();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
try {
// Push some useful stuff to the request scope for
// use in the page
requestMap.put("currentViewId", vee.getViewId());
nav.handleNavigation(fc, null, navigateTo);
fc.renderResponse();
} finally {
i.remove();
}
}
}
package fi.insomnia.bortal.exceptions;
import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerFactory;
public class BortalExceptionHandlerFactory extends ExceptionHandlerFactory {
private ExceptionHandlerFactory parent;
public BortalExceptionHandlerFactory(ExceptionHandlerFactory parent) {
this.parent = parent;
}
@Override
public ExceptionHandler getExceptionHandler() {
ExceptionHandler result = parent.getExceptionHandler();
result = new BortalExceptionHandler(result);
return result;
}
}
......@@ -10,6 +10,10 @@ public class PermissionDeniedException extends RuntimeException {
bean.logPermissionDenied(user, this);
}
public PermissionDeniedException(EjbPermissionDeniedException e)
{
}
/**
*
*/
......
......@@ -65,19 +65,7 @@ public class SessionHandler {
return sess;
}
public String getHostname() {
HttpSession sess = getHttpSession();
String ret = "";
if (sess != null) {
ret = HostnameFilter.getHostname(getHttpSession());
}
return ret;
}
public Event getCurrentEvent() {
String hostname = getHostname();
return eventbean.getEventByHostname(hostname);
}
public boolean hasPermission(Permission target, RolePermission permission) {
if (target == null) {
......@@ -122,11 +110,11 @@ public class SessionHandler {
this.thisuser = getUser();
impersonating = false;
} else if (canExecute("user")) {
secubean.logMessage(userbean.getCurrentUser(getCurrentEvent()), "Successfully impersonating user id: " + user.getId() + " and login: " + user.getLogin());
secubean.logMessage(userbean.getCurrentUser(), "Successfully impersonating user id: " + user.getId() + " and login: " + user.getLogin());
this.thisuser = user;
impersonating = true;
} else {
secubean.logMessage(userbean.getCurrentUser(getCurrentEvent()), "User tried to impersonate as id: " + user.getId() + " login: " + user.getLogin() + " but did not have enough rights");
secubean.logMessage(userbean.getCurrentUser(), "User tried to impersonate as id: " + user.getId() + " login: " + user.getLogin() + " but did not have enough rights");
}
}
......@@ -135,7 +123,7 @@ public class SessionHandler {
boolean iscurruser = userbean.isCurrentUser(thisuser);
logger.debug("Current user {}", (thisuser == null) ? "null" : thisuser.getNick());
if (thisuser == null || (!impersonating && !iscurruser)) {
thisuser = userbean.getCurrentUser(getCurrentEvent());
thisuser = userbean.getCurrentUser();
}
return thisuser;
......
......@@ -76,7 +76,7 @@ public class PlaceMap extends HttpServlet {
response.setContentType("image/jpeg");
ostream = response.getOutputStream();
placemapBean.printPlaceMapToStream(ostream, "jpeg", getEvent(request), mapId, placeIds);
placemapBean.printPlaceMapToStream(ostream, "jpeg", mapId, placeIds);
logger.debug("Flushing ostream");
ostream.flush();
/*
......@@ -100,11 +100,7 @@ public class PlaceMap extends HttpServlet {
}
}
private Event getEvent(HttpServletRequest request) {
String hostname = HostnameFilter.getHostname(request.getSession());
return eventBean.getEventByHostname(hostname);
}
public void addPlacesToMap() {
}
......
......@@ -50,9 +50,8 @@ public class PrintBill extends HttpServlet {
private void ouput(HttpServletRequest request, HttpServletResponse response) throws IOException {
Event event = eventbean.getEventByHostname(HostnameFilter.getHostname(request.getSession()));
Integer billid = getIntegerParameter(request, BILL_ID);
Bill bill = billentity.findById(event.getId(), billid);
Bill bill = billentity.findById( billid);
if (bill == null) {
return;
}
......
......@@ -4,9 +4,11 @@
*/
package fi.insomnia.bortal.view;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;
......@@ -42,6 +44,8 @@ public class MapView {
private SessionHandler sessionHandler;
private EventMap activeMap = null;
private List<Place> selectedPlaces = new ArrayList<Place>();
@EJB
private EventBeanLocal eventBean;
// private Place selectedPlace = null;
......@@ -93,9 +97,9 @@ public class MapView {
public EventMap getActiveMap() {
if (activeMap == null) {
if (sessionHandler.getCurrentEvent().getEventMaps().size() >= 1) {
activeMap = sessionHandler.getCurrentEvent().getEventMaps().get(0);
Event event = eventBean.getCurrentEvent();
if (event.getEventMaps().size() >= 1) {
activeMap = event.getEventMaps().get(0);
}
}
......@@ -126,7 +130,7 @@ public class MapView {
}
public String placeLeftToSelect() {
long totalPlaces = placeMapBean.selectablePlaceCount(sessionHandler.getUser(), sessionHandler.getCurrentEvent());
long totalPlaces = placeMapBean.selectablePlaceCount(sessionHandler.getUser());
return (totalPlaces - selectedPlaces.size()) + "";
}
......
......@@ -4,6 +4,7 @@
*/
package fi.insomnia.bortal.view;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.enums.Permission;
......@@ -35,6 +36,8 @@ public class RoleView {
private SessionHandler sessionhandler;
@EJB
private EventBeanLocal eventbean;
@EJB
private RoleBeanLocal roleBean;
private static final Logger logger = LoggerFactory.getLogger(RoleView.class);
......@@ -55,7 +58,7 @@ public class RoleView {
public DataModel<RoleRight> getRoleRights() {
if (rolerights == null) {
logger.info("Fetching new rolerights from database");
rolerights = new ListDataModel<RoleRight>(roleBean.getEventRoleRights(sessionhandler.getCurrentEvent(), role));
rolerights = new ListDataModel<RoleRight>(roleBean.getEventRoleRights(eventbean.getCurrentEvent(), role));
}
return rolerights;
}
......@@ -111,7 +114,7 @@ public class RoleView {
*/
public Role getRole() {
if (role == null) {
role = new Role(sessionhandler.getCurrentEvent());
role = new Role(eventbean.getCurrentEvent());
}
return role;
}
......
......@@ -39,12 +39,11 @@ public class TestDataView {
public void generateData() {
Event event = getSessionhandler().getCurrentEvent();
User user = testdatabean.createUser();
User admin = testdatabean.createAdmin();
testdatabean.createBill(event, user);
EventMap map = testdatabean.generateTestMap(event);
testdatabean.createBill( user);
EventMap map = testdatabean.generateTestMap();
testdatabean.generateTestPlaces(map);
......@@ -52,12 +51,11 @@ public class TestDataView {
}
public void generateMapTests() {
Event event = getSessionhandler().getCurrentEvent();
testdatabean.flushMaps();
testdatabean.generateTestMap(event);
testdatabean.generateTestMap();
for (long i = 100; i < 1024 * 100; i += 100) {
logger.debug("Writing data with {} chars", i);
testdatabean.writeMap(event, i);
testdatabean.writeMap( i);
}
}
......@@ -92,4 +90,9 @@ public class TestDataView {
return null;
}
public void contextTest()
{
testdatabean.contextTest();
}
}
......@@ -3,18 +3,23 @@ package fi.insomnia.bortal.view;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.I18n;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.JaasBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.User;
......@@ -49,10 +54,16 @@ public class UserView {
}
public String createUser() {
if (!getSessionhandler().canWrite(Permission.USER_MANAGEMENT.name())) {
if (!getSessionhandler().canWrite(Permission.USER_MANAGEMENT)) {
// Give message to administration what happened here.
throw new PermissionDeniedException(securitybean, getSessionhandler().getUser(), "User " + getSessionhandler().getUser() + " does not have permission to create user!");
}
if(null != userBean.getUser(login))
{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("userview.userExists")));
return "create";
}
logger.info("Saving user");
// Luodaan uusi käyttäjä UserBeanin funktiolla createNewUser jolle
......@@ -63,19 +74,28 @@ public class UserView {
password = "";
if (getUser() == null) {
logger.warn("Could not create user. function returned null!");
return "fault";
return "create";
}
return "edit";
}
public String saveUser() {
setUser( userBean.mergeChanges(getUser()));
try {
setUser(userBean.mergeChanges(getUser()));
} catch (EjbPermissionDeniedException e) {
throw new PermissionDeniedException(e);
}
return "userSave";
}
public ListDataModel<User> getUsers() {
List<User> users = userBean.getUsers();
List<User> users;
try {
users = userBean.getUsers();
} catch (EjbPermissionDeniedException e) {
throw new PermissionDeniedException(e);
}
items = new ListDataModel<User>(users);
logger.info("Fetching users. Found {}", items.getRowCount());
......@@ -87,7 +107,6 @@ public class UserView {
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
......
user.username=K\u00E4ytt\u00E4j\u00E4tunnus
user.realname=Nimi
user.password=Salasana
......@@ -5,8 +6,10 @@ user.email=S\u00E4hk\u00F6postiosoite
user.phone=Puhelinnumero
user.bankaccount=Tilinumero
user.bank=Pankki
save=Tallenna
cancel=Peruuta
user.gender.UNDEFINED=Mrittelemtt
user.gender.MALE=Mies
user.gender.FEMALE=Nainen
login.username=K\u00E4ytt\u00E4j\u00E4tunnus:
login.password=Salasana:
......@@ -21,6 +24,13 @@ nasty.user=paha k\u00E4ytt\u00E4j\u00E4 ei yrit\u00E4 haxoroida meid\u00E4n soft
product.name=Tuote
product.price=Hinta
global.sex.UNDEFINED=Mrittelemtt
global.sex.MALE=Mies
global.sex.FEMALE=Nainen
\ No newline at end of file
role.name=Rooli
role.description=Roolin kuvaus
role.read=Luku
role.write=Kirjoitus
role.execute=Suoritus
save=Tallenna
cancel=Peruuta
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!