Commit df5c63e1 by Juho Juopperi

Terminal related stuff etc.

1 parent 7c2f4e43
...@@ -19,18 +19,17 @@ public class BortalCertificateLoginModule extends AppservCertificateLoginModule ...@@ -19,18 +19,17 @@ public class BortalCertificateLoginModule extends AppservCertificateLoginModule
while (st.hasMoreTokens()) { while (st.hasMoreTokens()) {
String next = st.nextToken(); // Set the appname:OU as the group. String next = st.nextToken();
// At this point, one has the application name and the DN of // the
// certificate. A suitable login decision can be made here.
if (next.startsWith("CN=")) { if (next.startsWith("CN=")) {
commitUserAuthentication(new String[] { getAppName() + ":" String cn = next.substring(3);
+ next.substring(3) }); log("Committing user auth: " + cn);
commitUserAuthentication(new String[] { cn });
return; return;
} }
} }
throw new LoginException("No OU found.");
throw new LoginException("No CN found.");
} }
private void log(String s) { private void log(String s) {
......
package fi.insomnia.bortal.beans;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
public class BootstrapBean implements BootstrapBeanLocal {
@EJB
UserFacade userFacade;
public BootstrapBean() {
}
public void saneDefaults() {
User adminUser = userFacade.findByLogin("admin");
if (adminUser == null) {
adminUser = new User();
adminUser.setLogin("admin");
adminUser.setSuperadmin(true);
adminUser.resetPassword("admin");
userFacade.create(adminUser);
}
}
}
...@@ -63,7 +63,8 @@ import fi.insomnia.bortal.model.User; ...@@ -63,7 +63,8 @@ import fi.insomnia.bortal.model.User;
SpecialPermission.S_SUPERADMIN, SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER, SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS SpecialPermission.S_ANONYMOUS,
"terminal"
}) })
public class PermissionBean implements PermissionBeanLocal { public class PermissionBean implements PermissionBeanLocal {
...@@ -161,4 +162,12 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -161,4 +162,12 @@ public class PermissionBean implements PermissionBeanLocal {
} }
return defaultUser; return defaultUser;
} }
public String getPrincipal() {
Principal principal = context.getCallerPrincipal();
logger.debug("Principal: {}", principal);
String principalName = principal.getName();
logger.debug("Principal is {}", principalName);
return principalName;
}
} }
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface BootstrapBeanLocal {
void saneDefaults();
}
...@@ -24,6 +24,8 @@ public interface PermissionBeanLocal { ...@@ -24,6 +24,8 @@ public interface PermissionBeanLocal {
User getAnonUser(); User getAnonUser();
String getPrincipal();
// boolean hasPermission(String perm); // boolean hasPermission(String perm);
} }
...@@ -19,7 +19,6 @@ public class GenericEntity extends EntityEquals implements ModelInterface<Intege ...@@ -19,7 +19,6 @@ public class GenericEntity extends EntityEquals implements ModelInterface<Intege
@Id @Id
@Column(name = ID_COLUMN, nullable = false) @Column(name = ID_COLUMN, nullable = false)
// @ReturnInsert(returnOnly=true)
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; private Integer id;
......
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
<application> <application>
<resource-bundle> <resource-bundle>
<base-name>fi.insomnia.bortal.resources.i18n</base-name> <base-name>fi.insomnia.bortal.terminal.resources.i18n</base-name>
<var>i18n</var> <var>i18n</var>
</resource-bundle> </resource-bundle>
<message-bundle>fi.insomnia.bortal.resources.i18n</message-bundle> <message-bundle>fi.insomnia.bortal.terminal.resources.i18n</message-bundle>
<!-- Legal Country codes: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm --> <!-- Legal Country codes: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm -->
<!-- Assigned Country codes: --> <!-- Assigned Country codes: -->
......
<glassfish-web-app error-url=""> <glassfish-web-app error-url="">
<!--
<security-role-mapping> <security-role-mapping>
<role-name>allusers</role-name> <role-name>allusers</role-name>
<group-name>allusers</group-name> <group-name>allusers</group-name>
...@@ -9,5 +10,6 @@ ...@@ -9,5 +10,6 @@
<role-name>terminal</role-name> <role-name>terminal</role-name>
<group-name>terminal</group-name> <group-name>terminal</group-name>
</security-role-mapping> </security-role-mapping>
-->
</glassfish-web-app> </glassfish-web-app>
\ No newline at end of file
...@@ -61,13 +61,14 @@ ...@@ -61,13 +61,14 @@
<url-pattern>*.wtf</url-pattern> <url-pattern>*.wtf</url-pattern>
</web-resource-collection> </web-resource-collection>
<auth-constraint> <auth-constraint>
<role-name>allusers</role-name> <role-name>terminal</role-name>
</auth-constraint> </auth-constraint>
<user-data-constraint> <user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint> </user-data-constraint>
</security-constraint> </security-constraint>
<!--
<security-role> <security-role>
<description>All authenticated users</description> <description>All authenticated users</description>
<role-name>allusers</role-name> <role-name>allusers</role-name>
...@@ -77,7 +78,7 @@ ...@@ -77,7 +78,7 @@
<description>Sales Terminal</description> <description>Sales Terminal</description>
<role-name>terminal</role-name> <role-name>terminal</role-name>
</security-role> </security-role>
-->
<persistence-unit-ref> <persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name> <persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref> </persistence-unit-ref>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!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" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" 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> <h:head>
<title></title> <title></title>
</h:head> </h:head>
<h:body> <h:body>
<h1>Hurrdurr</h1> <h1>Hurrdurr</h1>
<p>abba #{request.contextPath} beef</p>
<p>foo #{testView5.getDummy()} baz</p>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<f:view locale="fi_FI">
<ui:insert name="metadata" />
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{i18n['global.eventname']}" />
</title>
<link rel="stylesheet" type="text/css"
href="#{request.contextPath}/resources/style/insomnia1/style.css" />
</h:head>
<h:body>
<div id="wrapper">
<div id="content">
<div id="cwrap">
<h:messages globalOnly="true" />
<ui:insert name="content" />
</div>
</div>
<div id="footer">#{i18n['global.copyright']}</div>
</div>
</h:body>
</f:view>
</html>
\ No newline at end of file
package fi.insomnia.bortal.terminal.handler;
import java.io.IOException;
import java.io.Serializable;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ConversationScoped
public class NavigationHandler implements Serializable {
private static final long serialVersionUID = -5985927646178070598L;
private static final Logger logger = LoggerFactory
.getLogger(NavigationHandler.class);
private String destNavi;
@Inject
private transient Conversation conversation;
public void saveDestination(String pageid) {
if (conversation.isTransient()) {
conversation.begin();
}
this.destNavi = pageid;
}
public void redirectToSaved() {
if (destNavi == null || destNavi.isEmpty()) {
HttpServletRequest req = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
destNavi = req.getContextPath();
}
redirectNavigation(destNavi);
}
public void redirectNavigation(String destinationUrl) {
try {
FacesContext.getCurrentInstance().getExternalContext()
.redirect(destinationUrl);
} catch (IOException e) {
logger.warn("Redirect failed!", e);
}
}
public void forward(String navigation) {
FacesContext fcont = FacesContext.getCurrentInstance();
javax.faces.application.NavigationHandler navihand = fcont
.getApplication().getNavigationHandler();
navihand.handleNavigation(fcont, null, navigation);
}
}
package fi.insomnia.bortal.terminal.handler;
import java.util.TimeZone;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.User;
@Named()
@RequestScoped
public class SessionHandler {
private static final Logger logger = LoggerFactory
.getLogger(SessionHandler.class);
@Inject
private HttpServletRequest httprequest;
@EJB
private RoleBeanLocal rolebean;
@EJB
private EventBeanLocal eventbean;
@EJB
private PermissionBeanLocal permbean;
public TimeZone getTimezone() {
return TimeZone.getTimeZone("Europe/Helsinki");
}
public String getLocale() {
// TODO: Locale selection code missing
// return "en_ST_v7";
//return "fi_IN_XIII";
return "fi_FI";
}
public String getLayout() {
// TODO: layout selection code missing!!
// return "stream1";
return "insomnia2";
}
public String getDateFormat() {
return "dd.MM.yyyy";
}
public String getDatetimeFormat() {
return "dd.MM.yyyy HH:mm";
}
public boolean hasPermission(IAppPermission permission) {
if (permission == null) {
logger.warn("permission is null");
throw new RuntimeException("Empty target or permission!");
}
boolean ret = permbean.hasPermission(permission);
return ret;
}
public boolean isLoggedIn() {
boolean ret = permbean.isLoggedIn();
return ret;
}
public boolean isSuperadmin() {
return permbean.getCurrentUser().isSuperadmin();
}
public User getCurrentUser() {
return permbean.getCurrentUser();
}
public String flushCache() {
return eventbean.flushCache();
}
private String preurlString = null;
public String getRequestPreUrl() {
if (preurlString == null) {
Object ext = FacesContext.getCurrentInstance().getExternalContext()
.getRequest();
if (ext instanceof HttpServletRequest) {
StringBuffer url = ((HttpServletRequest) ext).getRequestURL();
preurlString = url.substring(0, url.indexOf("/", 8));
} else {
preurlString = "";
}
}
return preurlString;
}
public boolean isInDevelopmentMode() {
return BortalLocalContextHolder.isInDevelopmentMode();
}
}
global.copyright=Copyright left right
\ No newline at end of file
package fi.insomnia.bortal.terminal.view;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
@Named("testView5")
@RequestScoped
public class TestView implements Serializable {
private static final long serialVersionUID = -2872232867536069020L;
private static final Logger logger = LoggerFactory.getLogger(TestView.class);
@EJB
private PermissionBeanLocal permissionBean;
public String getPrincipal() {
logger.debug("PermissionBean: {}", permissionBean);
return permissionBean.getPrincipal();
}
public String getDummy() {
return "bar";
}
}
...@@ -34,7 +34,8 @@ import fi.insomnia.bortal.model.PossibleAnswer; ...@@ -34,7 +34,8 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@RequestScoped @RequestScoped
public class TestDataView { public class TestDataView {
private static final Logger logger = LoggerFactory.getLogger(TestDataView.class); private static final Logger logger = LoggerFactory
.getLogger(TestDataView.class);
@EJB @EJB
private TestDataBeanLocal testdatabean; private TestDataBeanLocal testdatabean;
...@@ -58,12 +59,16 @@ public class TestDataView { ...@@ -58,12 +59,16 @@ public class TestDataView {
utilbean.convertUsernames(); utilbean.convertUsernames();
} }
public String resetMenu() public String resetMenu() {
{
menubean.flushDefaultmenu(); menubean.flushDefaultmenu();
return null; return null;
} }
public String makeTestData() {
testdatabean.createAdmin();
return null;
}
// public void generateTestMap() { // public void generateTestMap() {
// EventMap map = testdatabean.generateTestMap(); // EventMap map = testdatabean.generateTestMap();
// //
...@@ -123,8 +128,7 @@ public class TestDataView { ...@@ -123,8 +128,7 @@ public class TestDataView {
// } // }
// //
public String generatePollData() public String generatePollData() {
{
createPalaute(); createPalaute();
createPrizz(); createPrizz();
return null; return null;
...@@ -139,45 +143,61 @@ public class TestDataView { ...@@ -139,45 +143,61 @@ public class TestDataView {
end.add(Calendar.MONTH, 1); end.add(Calendar.MONTH, 1);
poll.setEnd(end.getTime()); poll.setEnd(end.getTime());
createMulticoice(poll, 10, "Millä alustalla pelaat eniten?", createMulticoice(
poll,
10,
"Millä alustalla pelaat eniten?",
"Tietokone (perinteiset tietokonepelit, esim. Starcraft 2 tai Fallout 3)", "Tietokone (perinteiset tietokonepelit, esim. Starcraft 2 tai Fallout 3)",
"Pelikonsoli", "Pelikonsoli", "kännykkä",
"kännykkä",
"Nettiselain (esim. Facebook-pelit, Google+-pelit, Aapeli-palvelu ym.)"); "Nettiselain (esim. Facebook-pelit, Google+-pelit, Aapeli-palvelu ym.)");
createMulticoice(poll, 20, "Millaisia pelejä pelaat mieluiten?", createMulticoice(
poll,
20,
"Millaisia pelejä pelaat mieluiten?",
"Pieniä lyhytkestoisia pelejä (vaikkapa matopeli, pasianssi tai Angry Birds)", "Pieniä lyhytkestoisia pelejä (vaikkapa matopeli, pasianssi tai Angry Birds)",
"Tarinalla varustettuja seikkailu- tai räiskintäpelejä", "Tarinalla varustettuja seikkailu- tai räiskintäpelejä",
"Moninpelejä (esim. räiskintä- tai strategiapelit)", "Moninpelejä (esim. räiskintä- tai strategiapelit)",
"Pelihahmon kehittämistä korostavia pelejä (esim. World of Warcraft tai Fallout-sarjan pelit)"); "Pelihahmon kehittämistä korostavia pelejä (esim. World of Warcraft tai Fallout-sarjan pelit)");
createMulticoice(poll, 30, "Oletko koskaan ostanut mobiilipelejä (esim. Angry Birdsin maksulliset versiot)?", createMulticoice(
"Kyllä", poll,
"Ei", 30,
"Oletko koskaan ostanut mobiilipelejä (esim. Angry Birdsin maksulliset versiot)?",
"Kyllä", "Ei",
"Ei, mutta voisin kuvitella tekeväni niin tulevaisuudessa."); "Ei, mutta voisin kuvitella tekeväni niin tulevaisuudessa.");
createMulticoice(poll, 40, "Oletko maksanut pelaamisesta tai pelisisällöstä nettisivustolla (esim. Facebook tai Habbo Hotel)?", createMulticoice(
"Kyllä", poll,
"Ei", 40,
"Oletko maksanut pelaamisesta tai pelisisällöstä nettisivustolla (esim. Facebook tai Habbo Hotel)?",
"Kyllä", "Ei",
"Ei, mutta voisin kuvitella tekeväni niin tulevaisuudessa."); "Ei, mutta voisin kuvitella tekeväni niin tulevaisuudessa.");
createTextQuestion(poll, 50, createTextQuestion(
poll,
50,
"Koetko todellisuutta ja virtuaalimaailmaa sekoittavat pelit mielenkiintoisina, vai pelaatko mieluummin perinteisiä pelejä? Miksi?"); "Koetko todellisuutta ja virtuaalimaailmaa sekoittavat pelit mielenkiintoisina, vai pelaatko mieluummin perinteisiä pelejä? Miksi?");
createMulticoice(poll, 60, "Osallistuitko verkkopelitapahtuma Insomniassa järjestettyyn InsomniaGame 2.0 -peliin?", createMulticoice(
"Kyllä", poll,
"Ei"); 60,
"Osallistuitko verkkopelitapahtuma Insomniassa järjestettyyn InsomniaGame 2.0 -peliin?",
"Kyllä", "Ei");
createTextQuestion(poll, 70, "Käy tutustumassa peliin Zombies, Run! osoitteessa <a href='http://www.zombiesrungame.com/'> http://www.zombiesrungame.com/</a> Mitä pidät pelin ideasta? Entä keksitkö muita tapoja hyödyntää satelliittipaikannusta peleissä?"); createTextQuestion(
poll,
70,
"Käy tutustumassa peliin Zombies, Run! osoitteessa <a href='http://www.zombiesrungame.com/'> http://www.zombiesrungame.com/</a> Mitä pidät pelin ideasta? Entä keksitkö muita tapoja hyödyntää satelliittipaikannusta peleissä?");
createTextQuestion(poll, 80, "Tärkein kysymys: Millainen on mielestäsi paras peli ja miksi?"); createTextQuestion(poll, 80,
"Tärkein kysymys: Millainen on mielestäsi paras peli ja miksi?");
pollbean.createPoll(poll); pollbean.createPoll(poll);
} }
public void createPalaute() public void createPalaute() {
{
Poll poll = new Poll(); Poll poll = new Poll();
poll.setName("Tapahtumapalaute"); poll.setName("Tapahtumapalaute");
poll.setDescription("Verkkopelitapahtuma Insomnia järjestetään pelaajia varten ja pyrimme kehittämään tapahtumaa vuosi vuodelta. Palautteesi on meille ensiarvoisen tärkeää ja palautetta antaneiden kesken arvotaan pro-konepaikkoja ensi vuoden Insomniaan! Palautelomake on auki 6.11. asti ja konepaikka-arvonta suoritetaan 7.11. Voittajille ilmoitetaan henkilökohtaisesti."); poll.setDescription("Verkkopelitapahtuma Insomnia järjestetään pelaajia varten ja pyrimme kehittämään tapahtumaa vuosi vuodelta. Palautteesi on meille ensiarvoisen tärkeää ja palautetta antaneiden kesken arvotaan pro-konepaikkoja ensi vuoden Insomniaan! Palautelomake on auki 6.11. asti ja konepaikka-arvonta suoritetaan 7.11. Voittajille ilmoitetaan henkilökohtaisesti.");
...@@ -192,14 +212,11 @@ public class TestDataView { ...@@ -192,14 +212,11 @@ public class TestDataView {
createTextQuestion(poll, 20, createTextQuestion(poll, 20,
"Miten mielestäsi onnistuimme peliturnauksissa pelattavien pelien valinnassa?"); "Miten mielestäsi onnistuimme peliturnauksissa pelattavien pelien valinnassa?");
createTextQuestion(poll, 30, createTextQuestion(poll, 30, "Toimiko uusi nukkuma-alue?");
"Toimiko uusi nukkuma-alue?");
createTextQuestion(poll, 40, createTextQuestion(poll, 40, "Mitä pidit InsomniaGame2.0:sta?");
"Mitä pidit InsomniaGame2.0:sta?");
createTextQuestion(poll, 50, createTextQuestion(poll, 50, "Kanada, eli muu palaute tapahtumasta?");
"Kanada, eli muu palaute tapahtumasta?");
pollbean.createPoll(poll); pollbean.createPoll(poll);
...@@ -219,7 +236,9 @@ public class TestDataView { ...@@ -219,7 +236,9 @@ public class TestDataView {
createTextQuestion(poll, 10, createTextQuestion(poll, 10,
"Millainen oli yleinen fiilis tapahtumassa?"); "Millainen oli yleinen fiilis tapahtumassa?");
createTextQuestion(poll, 20, "Mitä pidit tapahtuman kilpailuista?"); createTextQuestion(poll, 20, "Mitä pidit tapahtuman kilpailuista?");
createTextQuestion(poll, 30, createTextQuestion(
poll,
30,
"Mitä mieltä olit tapahtuman kilpailujen aikataulusta ja oliko neljäpäiväinen tapahtuma hyvä juttu?"); "Mitä mieltä olit tapahtuman kilpailujen aikataulusta ja oliko neljäpäiväinen tapahtuma hyvä juttu?");
createTextQuestion(poll, 40, "Muu palaute tapahtumasta:"); createTextQuestion(poll, 40, "Muu palaute tapahtumasta:");
...@@ -246,35 +265,50 @@ public class TestDataView { ...@@ -246,35 +265,50 @@ public class TestDataView {
"Pelaan lähes viikottain", "Pelaan lähes päivittäin"); "Pelaan lähes viikottain", "Pelaan lähes päivittäin");
createMulticoice(poll2, 70, createMulticoice(poll2, 70,
"Miten usein pelaat pelikonsolilla tai tietokoneella?", "En pelaa", "Miten usein pelaat pelikonsolilla tai tietokoneella?",
"Pelaan harvoin", "Pelaan kerran, pari viikossa", "Pelaan päivittäin"); "En pelaa", "Pelaan harvoin", "Pelaan kerran, pari viikossa",
"Pelaan päivittäin");
createMulticoice(poll2, 80, createMulticoice(
poll2,
80,
"Oletko kokeillut opetuspelejä? Esimerkiksi nettiselaimella tai kännykällä?", "Oletko kokeillut opetuspelejä? Esimerkiksi nettiselaimella tai kännykällä?",
"En ole kokeillut", "Olen kokeillut", "Käytän usein"); "En ole kokeillut", "Olen kokeillut", "Käytän usein");
createTextQuestion(poll2, 90, createTextQuestion(poll2, 90,
"Millaisen opetuspelin kokisit sekä hyödyllisenä että hauskana?"); "Millaisen opetuspelin kokisit sekä hyödyllisenä että hauskana?");
createMulticoice(poll2, 95, createMulticoice(
poll2,
95,
"Kokisitko roolipeleistä tutut kokemuspisteet ja kokemustasojen tavoittelun motivaatiota kasvattanava asiana oppimispeleissä?", "Kokisitko roolipeleistä tutut kokemuspisteet ja kokemustasojen tavoittelun motivaatiota kasvattanava asiana oppimispeleissä?",
"Kyllä", "Ei"); "Kyllä", "Ei");
createMulticoice(poll2, 100, createMulticoice(
poll2,
100,
"Oletko käyttänyt sijaintitietoon perustuvia palveluja, kuten Google Latitude tai Foursquare?", "Oletko käyttänyt sijaintitietoon perustuvia palveluja, kuten Google Latitude tai Foursquare?",
"En ole kokeillut", "Olen kokeillut", "Käytän usein"); "En ole kokeillut", "Olen kokeillut", "Käytän usein");
createTextQuestion(poll2, 110, createTextQuestion(
poll2,
110,
"Millaisia käyttötapoja näkisit sijaintitietoon perustuvilla peleillä tai palveluilla oppimiskäytössä?"); "Millaisia käyttötapoja näkisit sijaintitietoon perustuvilla peleillä tai palveluilla oppimiskäytössä?");
createMulticoice(poll2, 120, createMulticoice(
poll2,
120,
"Käytätkö sosiaalisen median palveluita, kuten Facebookia tai IRC-Galleriaa?", "Käytätkö sosiaalisen median palveluita, kuten Facebookia tai IRC-Galleriaa?",
"En ole kokeillut", "Olen kokeillut", "Käytän usein"); "En ole kokeillut", "Olen kokeillut", "Käytän usein");
createTextQuestion(poll2, 130, createTextQuestion(
poll2,
130,
"Millaisia käyttötapoja näkisit sosiaalisen mediaan perustuvilla palveluilla oppimiskäytössä?"); "Millaisia käyttötapoja näkisit sosiaalisen mediaan perustuvilla palveluilla oppimiskäytössä?");
createTextQuestion(poll2, 140, createTextQuestion(
poll2,
140,
"Olet ehkä kuullut termin \"pilvipalvelut\". Miltä kuulostaisi ajatus siitä että pelikonsoli ei fyysisesti olisikaan kotonasi, vaan pelien sisältö tulisi suoraan verkkopalvelusta?"); "Olet ehkä kuullut termin \"pilvipalvelut\". Miltä kuulostaisi ajatus siitä että pelikonsoli ei fyysisesti olisikaan kotonasi, vaan pelien sisältö tulisi suoraan verkkopalvelusta?");
pollbean.createPoll(poll2); pollbean.createPoll(poll2);
...@@ -299,15 +333,14 @@ public class TestDataView { ...@@ -299,15 +333,14 @@ public class TestDataView {
} }
} }
private PollQuestion createTextQuestion(Poll poll, int sort, String private PollQuestion createTextQuestion(Poll poll, int sort, String string,
string, int chars) { int chars) {
PollQuestion ret = createTextQuestion(poll, sort, string); PollQuestion ret = createTextQuestion(poll, sort, string);
ret.setCharacters(chars); ret.setCharacters(chars);
return ret; return ret;
} }
private PollQuestion createTextQuestion(Poll poll, int sort, String private PollQuestion createTextQuestion(Poll poll, int sort, String question) {
question) {
PollQuestion q1 = new PollQuestion(poll); PollQuestion q1 = new PollQuestion(poll);
q1.setQuestion(question); q1.setQuestion(question);
q1.setSort(sort); q1.setSort(sort);
......
...@@ -2,6 +2,7 @@ package fi.insomnia.bortal.web.cdiview.user; ...@@ -2,6 +2,7 @@ package fi.insomnia.bortal.web.cdiview.user;
import java.security.Principal; import java.security.Principal;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.context.ExternalContext; import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
...@@ -13,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -13,6 +14,7 @@ import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BootstrapBeanLocal;
import fi.insomnia.bortal.handler.NavigationHandler; import fi.insomnia.bortal.handler.NavigationHandler;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -30,6 +32,9 @@ public class AuthView extends GenericCDIView { ...@@ -30,6 +32,9 @@ public class AuthView extends GenericCDIView {
@Inject @Inject
private NavigationHandler navihandler; private NavigationHandler navihandler;
@EJB
private BootstrapBeanLocal bootStrapBean;
private HttpServletRequest getRequest() { private HttpServletRequest getRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance(); FacesContext facesContext = FacesContext.getCurrentInstance();
...@@ -55,6 +60,9 @@ public class AuthView extends GenericCDIView { ...@@ -55,6 +60,9 @@ public class AuthView extends GenericCDIView {
} }
public void executeLogin() { public void executeLogin() {
bootStrapBean.saneDefaults();
if (login == null || password == null || login.isEmpty() || password.isEmpty()) { if (login == null || password == null || login.isEmpty() || password.isEmpty()) {
return; return;
} }
......
package fi.insomnia.bortal.web.helper;
/**
* Copypaste from http://forums.sun.com/thread.jspa?threadID=5136965
*
*/
import java.util.HashMap;
import java.util.StringTokenizer;
import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.NoneScoped;
import javax.faces.context.FacesContext;
@ManagedBean(name = "util")
@NoneScoped
public class ConcatMBean extends HashMap<Object, Object> {
/**
*
*/
private static final long serialVersionUID = -6232280680582906176L;
/**
* Concat the string separated by a comma Evaluate JSF EL expression if
* token begin by # or $
*
* @param inObject
* : is the list of string to concat separated by a comma. return
* a String exemple : <h:outputText
* value="#{lang[concat['mpr.canton.,#offer.canton']]}"/>
*/
public Object concat(Object a, Object b) {
return new StringBuilder().append(a).append(b).toString();
}
public Object get(Object inObject) {
StringBuffer resultBuffer = new StringBuffer();
try {
String inToken = (String) inObject;
StringTokenizer tok = new StringTokenizer((String) inToken, ",", false);
while (tok.hasMoreTokens()) {
String token = tok.nextToken().trim();
if (token.startsWith("#{")) {
Object tokenEvaluated = this.getElValue(token);
resultBuffer.append(String.valueOf(tokenEvaluated));
} else if (token.startsWith("${")) {
token = token.substring(2, token.length() - 1);
Object tokenEvaluated = this.getElValue(this.getJsfEl(token));
resultBuffer.append(String.valueOf(tokenEvaluated));
} else if (token.startsWith("#")) {
token = token.substring(1);
Object tokenEvaluated = this.getElValue(this.getJsfEl(token));
resultBuffer.append(String.valueOf(tokenEvaluated));
} else {
resultBuffer.append(token);
}
}
} catch (Exception e) {
System.out.println("ConcatenationBackingBean error: " + e.getMessage());
}
return resultBuffer.toString();
}
private Object getElValue(String el) {
ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
return appFactory.getApplication().evaluateExpressionGet(FacesContext.getCurrentInstance(), el, java.lang.String.class);
}
private String getJsfEl(String value) {
return "#{" + value + "}";
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!