Commit 9870d3fe by Antti Tonkyra

Merge branch 'master' of dev.insomnia.fi:/data/bortal

2 parents 2693c2d5 df5c63e1
Showing with 3128 additions and 1302 deletions
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:49 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:f7:fa:8f:54:32:02:aa:16:91:a2:25:6f:33:ed:
9e:83:7f:2c:01:9c:d2:8a:90:73:14:b0:01:ec:e0:
49:16:a0:fa:9a:d7:e9:bf:af:79:ac:ad:06:59:c1:
df:c3:5c:8a:4e:63:c0:55:5c:df:14:f7:f4:39:46:
ff:4f:ff:a4:43:97:67:db:b8:4f:fc:92:ed:8b:de:
0b:78:d7:fe:56:94:a5:64:3d:60:4c:01:73:54:87:
b6:6c:10:2c:37:dd:2d:6b:5c:c9:28:e8:6d:2b:58:
3d:f7:ec:00:a2:0a:92:55:c8:10:cf:85:67:dc:10:
0e:bb:5e:b9:df:0c:72:5e:28:48:33:42:e6:6c:3e:
e8:62:50:fe:f3:40:9f:6a:5d:30:ef:f1:60:b3:a6:
02:46:32:78:51:94:bd:8b:80:50:8f:e2:ca:60:07:
66:29:52:68:5a:08:a8:8c:74:70:20:3d:50:d4:29:
90:56:73:48:19:75:ef:23:ae:ba:7f:59:66:a2:8b:
73:c8:31:2b:01:04:7a:99:d6:21:f0:38:01:7b:f2:
b1:0a:a9:d0:64:dd:86:f7:95:0a:07:4e:90:1c:91:
28:3f:44:7d:6f:47:46:25:83:a7:6e:88:af:20:64:
4c:16:37:1f:20:3d:c9:02:0b:f8:b3:f9:a2:42:71:
df:25
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
Bortal Certificate
X509v3 Subject Key Identifier:
A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
f7:cc:50:5a:f9:fe:d4:69:1a:6e:90:fb:dd:ec:4d:42:e8:c1:
2c:08:69:b5:8d:69:ad:2e:63:94:33:93:35:69:37:73:87:18:
f1:27:68:54:69:63:18:21:3f:0a:9c:6d:da:cb:e6:fc:5e:0a:
21:db:d1:19:7e:4a:28:3c:d8:32:23:c8:3f:86:0b:40:bb:df:
a8:3c:c7:97:95:bc:26:bf:68:ae:d7:39:a8:fd:2f:58:82:d2:
be:6d:2e:1a:66:05:dd:76:af:8e:50:da:c1:a9:83:46:6f:c8:
30:ea:0a:f3:06:f2:73:f1:81:1c:eb:35:c5:3f:8c:0a:2c:ef:
ed:f5:53:d0:5c:4d:01:da:51:fc:95:26:9b:3a:93:ac:90:61:
35:f3:b4:2f:ee:3c:9b:0b:e7:b7:01:dc:d3:7a:aa:4e:43:d3:
d9:a5:59:a0:5c:7d:df:1a:a0:01:cf:0f:f5:ec:69:17:af:4d:
e3:da:ac:04:c3:ea:30:78:91:09:1b:55:af:ef:f6:61:4b:14:
e7:5b:5a:fc:55:26:f4:72:86:fa:46:6f:2b:73:4f:ba:da:af:
dd:92:3f:d4:2d:71:e4:64:11:8f:3b:9f:7d:17:22:b6:a4:e6:
88:03:df:f6:10:2f:b3:6d:bb:05:52:c8:cf:12:49:a4:a1:28:
6c:67:ca:16
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU0OVowPTELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDELMAkGA1UEAxMCQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD3+o9UMgKqFpGiJW8z7Z6D
fywBnNKKkHMUsAHs4EkWoPqa1+m/r3msrQZZwd/DXIpOY8BVXN8U9/Q5Rv9P/6RD
l2fbuE/8ku2L3gt41/5WlKVkPWBMAXNUh7ZsECw33S1rXMko6G0rWD337ACiCpJV
yBDPhWfcEA67XrnfDHJeKEgzQuZsPuhiUP7zQJ9qXTDv8WCzpgJGMnhRlL2LgFCP
4spgB2YpUmhaCKiMdHAgPVDUKZBWc0gZde8jrrp/WWaii3PIMSsBBHqZ1iHwOAF7
8rEKqdBk3Yb3lQoHTpAckSg/RH1vR0Ylg6duiK8gZEwWNx8gPckCC/iz+aJCcd8l
AgMBAAGjcDBuMAkGA1UdEwQCMAAwIQYJYIZIAYb4QgENBBQWEkJvcnRhbCBDZXJ0
aWZpY2F0ZTAdBgNVHQ4EFgQUpAoqEgfszhDkTF62eYMYOxU/UNswHwYDVR0jBBgw
FoAUpAoqEgfszhDkTF62eYMYOxU/UNswDQYJKoZIhvcNAQEFBQADggEBAPfMUFr5
/tRpGm6Q+93sTULowSwIabWNaa0uY5QzkzVpN3OHGPEnaFRpYxghPwqcbdrL5vxe
CiHb0Rl+Sig82DIjyD+GC0C736g8x5eVvCa/aK7XOaj9L1iC0r5tLhpmBd12r45Q
2sGpg0ZvyDDqCvMG8nPxgRzrNcU/jAos7+31U9BcTQHaUfyVJps6k6yQYTXztC/u
PJsL57cB3NN6qk5D09mlWaBcfd8aoAHPD/XsaRevTeParATD6jB4kQkbVa/v9mFL
FOdbWvxVJvRyhvpGbytzT7rar92SP9QtceRkEY87n30XIrak5ogD3/YQL7NtuwVS
yM8SSaShKGxnyhY=
-----END CERTIFICATE-----
No preview for this file type
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:50 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=bortal-server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:b9:02:7a:17:2e:51:7e:ae:f4:c8:63:f0:f2:cb:
48:55:26:15:ce:9c:f3:92:ed:24:73:6f:77:54:60:
14:4b:85:52:e3:b4:8a:94:5c:1c:a8:dc:6b:98:6d:
4d:bc:fc:76:24:20:e6:fc:54:49:c9:16:79:86:b1:
74:2f:0e:d2:13:16:64:3a:fc:b4:3e:95:94:34:87:
a9:f4:95:cb:96:d4:86:31:e9:10:be:b5:05:18:39:
f2:90:d2:59:52:87:90:2b:dc:88:a7:24:f3:55:48:
f9:93:66:93:85:84:61:ac:85:27:4c:79:bd:47:5f:
0d:67:e5:c7:ee:ce:16:35:c9:ba:d2:16:1e:22:01:
83:4a:50:21:c2:63:cb:b2:19:ad:e2:1a:f5:28:01:
18:65:dc:93:1a:68:66:45:5b:73:d2:f7:23:bb:1d:
e0:6a:8e:3b:44:db:8c:9f:07:36:fc:38:dd:f5:a8:
a6:b1:c4:c6:77:f8:be:ec:2e:f9:58:9c:e8:66:7d:
58:bc:c8:41:e0:9b:bd:32:4e:b8:31:b3:e9:2d:30:
e1:1a:2c:04:45:65:4d:3c:0f:60:61:9c:5c:74:d7:
df:fc:0d:05:32:f9:fb:a7:21:38:05:3b:07:58:a6:
81:20:80:b2:0b:23:bc:05:05:7f:d7:66:33:9c:12:
b1:9b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
Server certificate
X509v3 Subject Key Identifier:
53:BF:90:D6:8C:E7:D1:FA:33:AF:D3:DE:B2:55:3C:73:17:FA:50:8A
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
7d:a2:a3:b2:b0:7f:37:df:8a:7d:75:62:e7:1e:89:a8:7f:58:
cc:84:c2:00:2c:f7:e1:37:8f:4d:b0:0e:ab:ef:51:c7:b8:07:
24:95:18:98:a7:69:fc:d7:ee:57:82:aa:0c:c4:e4:e2:dc:88:
02:47:58:de:cf:2a:f2:11:8c:5a:79:f6:ce:33:40:93:01:f1:
18:7e:6b:07:c0:10:37:a5:a4:bd:5e:8d:b2:c5:ab:50:19:27:
8a:3c:d3:6e:08:ec:27:de:7d:39:1e:20:b8:20:75:f4:41:dd:
5c:6c:c5:75:18:e4:62:ab:c8:84:92:db:66:a8:dc:69:29:d3:
aa:06:cf:86:7d:12:f0:20:66:9a:f7:8e:d8:77:62:47:9a:d4:
37:49:5c:80:eb:f4:5b:04:2e:60:d3:dd:96:00:db:09:5d:2a:
eb:25:95:48:6b:3d:e1:57:ad:e9:ba:26:d6:fb:c3:31:13:48:
a4:4e:47:9d:c1:40:64:39:64:35:4b:52:6f:ea:51:28:65:3d:
32:e2:6f:38:1d:2d:ec:f9:69:aa:92:8b:66:a8:00:4e:dc:f2:
81:ea:ff:94:b3:2d:bd:a4:cf:1c:6c:42:7d:e4:c5:24:27:0d:
c2:0d:b5:b0:46:89:df:08:76:94:86:64:64:90:a3:95:79:5a:
d2:0d:70:3a
-----BEGIN CERTIFICATE-----
MIIDhzCCAm+gAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MFowSDELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDEWMBQGA1UEAxMNYm9y
dGFsLXNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkCehcu
UX6u9Mhj8PLLSFUmFc6c85LtJHNvd1RgFEuFUuO0ipRcHKjca5htTbz8diQg5vxU
SckWeYaxdC8O0hMWZDr8tD6VlDSHqfSVy5bUhjHpEL61BRg58pDSWVKHkCvciKck
81VI+ZNmk4WEYayFJ0x5vUdfDWflx+7OFjXJutIWHiIBg0pQIcJjy7IZreIa9SgB
GGXckxpoZkVbc9L3I7sd4GqOO0TbjJ8HNvw43fWoprHExnf4vuwu+Vic6GZ9WLzI
QeCbvTJOuDGz6S0w4RosBEVlTTwPYGGcXHTX3/wNBTL5+6chOAU7B1imgSCAsgsj
vAUFf9dmM5wSsZsCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQE
AwIGQDAhBglghkgBhvhCAQ0EFBYSU2VydmVyIGNlcnRpZmljYXRlMB0GA1UdDgQW
BBRTv5DWjOfR+jOv096yVTxzF/pQijAfBgNVHSMEGDAWgBSkCioSB+zOEORMXrZ5
gxg7FT9Q2zANBgkqhkiG9w0BAQUFAAOCAQEAfaKjsrB/N9+KfXVi5x6JqH9YzITC
ACz34TePTbAOq+9Rx7gHJJUYmKdp/NfuV4KqDMTk4tyIAkdY3s8q8hGMWnn2zjNA
kwHxGH5rB8AQN6WkvV6NssWrUBknijzTbgjsJ959OR4guCB19EHdXGzFdRjkYqvI
hJLbZqjcaSnTqgbPhn0S8CBmmveO2HdiR5rUN0lcgOv0WwQuYNPdlgDbCV0q6yWV
SGs94Vet6bom1vvDMRNIpE5HncFAZDlkNUtSb+pRKGU9MuJvOB0t7PlpqpKLZqgA
Ttzyger/lLMtvaTPHGxCfeTFJCcNwg21sEaJ3wh2lIZkZJCjlXla0g1wOg==
-----END CERTIFICATE-----
No preview for this file type
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:51 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=terminal
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:c9:1d:16:b7:d3:f9:07:84:a8:e1:82:4c:e1:13:
c8:cf:58:fe:23:b6:8f:73:3c:90:df:b8:24:8b:b6:
d4:89:39:69:71:10:9e:1b:57:16:8a:ec:c0:78:b2:
a2:c5:ad:30:5e:b0:74:43:9b:56:3c:b6:4d:37:65:
d4:05:82:27:4c:c5:7d:0c:bb:8c:bf:d4:f2:46:de:
f6:c9:e7:5e:f2:27:48:a7:2d:3a:ed:8a:55:09:4f:
3a:45:cc:b6:b5:c1:b1:61:a2:74:b5:3d:8b:2a:cf:
e1:a0:4f:86:c4:99:63:bb:ec:5c:27:ef:20:a5:de:
1d:20:9a:b3:19:94:5c:1c:1d:25:ac:26:ac:4a:3f:
48:a3:30:76:4f:c1:81:99:59:0a:af:e4:cd:f6:bb:
ba:2e:97:32:1d:e9:ea:59:49:ad:99:5d:a5:d7:8a:
db:8a:41:33:dd:4e:54:ef:f8:ca:80:15:22:c6:e9:
d5:33:15:7c:fe:f2:21:3f:a2:b7:7f:1a:96:c2:82:
75:19:2a:28:c5:11:72:cc:f3:eb:2d:ca:31:e8:59:
c4:09:79:38:01:dc:fa:75:6e:23:be:e8:a7:bd:cd:
aa:3f:0f:c7:71:26:2c:48:b5:41:8e:91:91:61:2d:
39:98:f1:b1:9c:ce:b1:0d:9b:d0:c8:7e:15:d1:d4:
28:07
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client
Netscape Comment:
Client certificate
X509v3 Subject Key Identifier:
0E:D4:56:4E:A6:62:B1:29:36:A0:12:50:4B:FC:B9:3E:92:54:59:52
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
73:84:1b:a8:2f:de:7d:22:d4:fa:3a:8a:1c:6e:01:73:fa:6e:
6c:8c:64:95:fa:89:34:c4:ad:83:4a:72:da:0c:bc:4d:86:ba:
5e:a9:c6:73:c9:50:27:ca:31:6a:e8:1d:1b:a6:32:f3:53:f8:
c1:a7:c7:58:e2:4c:64:65:33:ce:78:56:cf:13:75:6d:9d:7f:
d0:3e:a9:08:05:f2:d5:3d:6b:9c:bb:9f:12:96:e3:2a:76:98:
0c:e1:ee:1d:87:93:be:50:66:3f:20:17:93:67:68:b9:54:46:
ba:20:8e:5f:3a:f1:03:16:22:80:4f:90:97:fc:5b:2e:1f:a6:
b0:5b:a2:31:50:90:83:86:86:77:26:a1:19:c8:a0:30:ec:ef:
35:6b:b1:ed:e0:4b:b4:17:31:e6:e1:72:16:9e:24:01:6c:fe:
a2:9e:ad:6d:7c:57:c4:4e:9e:25:bd:ee:bc:e9:78:05:5a:16:
a3:e0:22:4a:66:cf:2c:4a:05:fe:24:ae:78:5d:1e:52:9e:07:
aa:de:bf:7d:31:1c:cc:86:1f:a4:a2:3a:6c:22:60:5a:fc:86:
47:c6:b3:73:9d:37:82:a5:15:ab:04:a7:4d:8a:94:58:27:d0:
7c:f8:e8:98:b6:95:c7:21:e3:17:2a:ce:dc:98:6a:90:07:7d:
63:df:27:62
-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MVowQzELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDERMA8GA1UEAxMIdGVy
bWluYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJHRa30/kHhKjh
gkzhE8jPWP4jto9zPJDfuCSLttSJOWlxEJ4bVxaK7MB4sqLFrTBesHRDm1Y8tk03
ZdQFgidMxX0Mu4y/1PJG3vbJ517yJ0inLTrtilUJTzpFzLa1wbFhonS1PYsqz+Gg
T4bEmWO77Fwn7yCl3h0gmrMZlFwcHSWsJqxKP0ijMHZPwYGZWQqv5M32u7oulzId
6epZSa2ZXaXXituKQTPdTlTv+MqAFSLG6dUzFXz+8iE/ord/GpbCgnUZKijFEXLM
8+styjHoWcQJeTgB3Pp1biO+6Ke9zao/D8dxJixItUGOkZFhLTmY8bGczrENm9DI
fhXR1CgHAgMBAAGjgYQwgYEwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4Aw
IQYJYIZIAYb4QgENBBQWEkNsaWVudCBjZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUDtRW
TqZisSk2oBJQS/y5PpJUWVIwHwYDVR0jBBgwFoAUpAoqEgfszhDkTF62eYMYOxU/
UNswDQYJKoZIhvcNAQEFBQADggEBAHOEG6gv3n0i1Po6ihxuAXP6bmyMZJX6iTTE
rYNKctoMvE2Gul6pxnPJUCfKMWroHRumMvNT+MGnx1jiTGRlM854Vs8TdW2df9A+
qQgF8tU9a5y7nxKW4yp2mAzh7h2Hk75QZj8gF5NnaLlURrogjl868QMWIoBPkJf8
Wy4fprBbojFQkIOGhncmoRnIoDDs7zVrse3gS7QXMebhchaeJAFs/qKerW18V8RO
niW97rzpeAVaFqPgIkpmzyxKBf4krnhdHlKeB6rev30xHMyGH6SiOmwiYFr8hkfG
s3OdN4KlFasEp02KlFgn0Hz46Ji2lcch4xcqztyYapAHfWPfJ2I=
-----END CERTIFICATE-----
No preview for this file type
V 20720323165549Z 00 unknown /C=FI/ST=Tampere/O=Bortal/CN=CA
V 20720323165550Z 01 unknown /C=FI/ST=Tampere/O=Bortal/CN=bortal-server
V 20720323165551Z 02 unknown /C=FI/ST=Tampere/O=Bortal/CN=terminal
unique_subject = yes
V 20720323165549Z 00 unknown /C=FI/ST=Tampere/O=Bortal/CN=CA
V 20720323165550Z 01 unknown /C=FI/ST=Tampere/O=Bortal/CN=bortal-server
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:49 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:f7:fa:8f:54:32:02:aa:16:91:a2:25:6f:33:ed:
9e:83:7f:2c:01:9c:d2:8a:90:73:14:b0:01:ec:e0:
49:16:a0:fa:9a:d7:e9:bf:af:79:ac:ad:06:59:c1:
df:c3:5c:8a:4e:63:c0:55:5c:df:14:f7:f4:39:46:
ff:4f:ff:a4:43:97:67:db:b8:4f:fc:92:ed:8b:de:
0b:78:d7:fe:56:94:a5:64:3d:60:4c:01:73:54:87:
b6:6c:10:2c:37:dd:2d:6b:5c:c9:28:e8:6d:2b:58:
3d:f7:ec:00:a2:0a:92:55:c8:10:cf:85:67:dc:10:
0e:bb:5e:b9:df:0c:72:5e:28:48:33:42:e6:6c:3e:
e8:62:50:fe:f3:40:9f:6a:5d:30:ef:f1:60:b3:a6:
02:46:32:78:51:94:bd:8b:80:50:8f:e2:ca:60:07:
66:29:52:68:5a:08:a8:8c:74:70:20:3d:50:d4:29:
90:56:73:48:19:75:ef:23:ae:ba:7f:59:66:a2:8b:
73:c8:31:2b:01:04:7a:99:d6:21:f0:38:01:7b:f2:
b1:0a:a9:d0:64:dd:86:f7:95:0a:07:4e:90:1c:91:
28:3f:44:7d:6f:47:46:25:83:a7:6e:88:af:20:64:
4c:16:37:1f:20:3d:c9:02:0b:f8:b3:f9:a2:42:71:
df:25
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
Bortal Certificate
X509v3 Subject Key Identifier:
A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
f7:cc:50:5a:f9:fe:d4:69:1a:6e:90:fb:dd:ec:4d:42:e8:c1:
2c:08:69:b5:8d:69:ad:2e:63:94:33:93:35:69:37:73:87:18:
f1:27:68:54:69:63:18:21:3f:0a:9c:6d:da:cb:e6:fc:5e:0a:
21:db:d1:19:7e:4a:28:3c:d8:32:23:c8:3f:86:0b:40:bb:df:
a8:3c:c7:97:95:bc:26:bf:68:ae:d7:39:a8:fd:2f:58:82:d2:
be:6d:2e:1a:66:05:dd:76:af:8e:50:da:c1:a9:83:46:6f:c8:
30:ea:0a:f3:06:f2:73:f1:81:1c:eb:35:c5:3f:8c:0a:2c:ef:
ed:f5:53:d0:5c:4d:01:da:51:fc:95:26:9b:3a:93:ac:90:61:
35:f3:b4:2f:ee:3c:9b:0b:e7:b7:01:dc:d3:7a:aa:4e:43:d3:
d9:a5:59:a0:5c:7d:df:1a:a0:01:cf:0f:f5:ec:69:17:af:4d:
e3:da:ac:04:c3:ea:30:78:91:09:1b:55:af:ef:f6:61:4b:14:
e7:5b:5a:fc:55:26:f4:72:86:fa:46:6f:2b:73:4f:ba:da:af:
dd:92:3f:d4:2d:71:e4:64:11:8f:3b:9f:7d:17:22:b6:a4:e6:
88:03:df:f6:10:2f:b3:6d:bb:05:52:c8:cf:12:49:a4:a1:28:
6c:67:ca:16
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU0OVowPTELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDELMAkGA1UEAxMCQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD3+o9UMgKqFpGiJW8z7Z6D
fywBnNKKkHMUsAHs4EkWoPqa1+m/r3msrQZZwd/DXIpOY8BVXN8U9/Q5Rv9P/6RD
l2fbuE/8ku2L3gt41/5WlKVkPWBMAXNUh7ZsECw33S1rXMko6G0rWD337ACiCpJV
yBDPhWfcEA67XrnfDHJeKEgzQuZsPuhiUP7zQJ9qXTDv8WCzpgJGMnhRlL2LgFCP
4spgB2YpUmhaCKiMdHAgPVDUKZBWc0gZde8jrrp/WWaii3PIMSsBBHqZ1iHwOAF7
8rEKqdBk3Yb3lQoHTpAckSg/RH1vR0Ylg6duiK8gZEwWNx8gPckCC/iz+aJCcd8l
AgMBAAGjcDBuMAkGA1UdEwQCMAAwIQYJYIZIAYb4QgENBBQWEkJvcnRhbCBDZXJ0
aWZpY2F0ZTAdBgNVHQ4EFgQUpAoqEgfszhDkTF62eYMYOxU/UNswHwYDVR0jBBgw
FoAUpAoqEgfszhDkTF62eYMYOxU/UNswDQYJKoZIhvcNAQEFBQADggEBAPfMUFr5
/tRpGm6Q+93sTULowSwIabWNaa0uY5QzkzVpN3OHGPEnaFRpYxghPwqcbdrL5vxe
CiHb0Rl+Sig82DIjyD+GC0C736g8x5eVvCa/aK7XOaj9L1iC0r5tLhpmBd12r45Q
2sGpg0ZvyDDqCvMG8nPxgRzrNcU/jAos7+31U9BcTQHaUfyVJps6k6yQYTXztC/u
PJsL57cB3NN6qk5D09mlWaBcfd8aoAHPD/XsaRevTeParATD6jB4kQkbVa/v9mFL
FOdbWvxVJvRyhvpGbytzT7rar92SP9QtceRkEY87n30XIrak5ogD3/YQL7NtuwVS
yM8SSaShKGxnyhY=
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:50 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=bortal-server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:b9:02:7a:17:2e:51:7e:ae:f4:c8:63:f0:f2:cb:
48:55:26:15:ce:9c:f3:92:ed:24:73:6f:77:54:60:
14:4b:85:52:e3:b4:8a:94:5c:1c:a8:dc:6b:98:6d:
4d:bc:fc:76:24:20:e6:fc:54:49:c9:16:79:86:b1:
74:2f:0e:d2:13:16:64:3a:fc:b4:3e:95:94:34:87:
a9:f4:95:cb:96:d4:86:31:e9:10:be:b5:05:18:39:
f2:90:d2:59:52:87:90:2b:dc:88:a7:24:f3:55:48:
f9:93:66:93:85:84:61:ac:85:27:4c:79:bd:47:5f:
0d:67:e5:c7:ee:ce:16:35:c9:ba:d2:16:1e:22:01:
83:4a:50:21:c2:63:cb:b2:19:ad:e2:1a:f5:28:01:
18:65:dc:93:1a:68:66:45:5b:73:d2:f7:23:bb:1d:
e0:6a:8e:3b:44:db:8c:9f:07:36:fc:38:dd:f5:a8:
a6:b1:c4:c6:77:f8:be:ec:2e:f9:58:9c:e8:66:7d:
58:bc:c8:41:e0:9b:bd:32:4e:b8:31:b3:e9:2d:30:
e1:1a:2c:04:45:65:4d:3c:0f:60:61:9c:5c:74:d7:
df:fc:0d:05:32:f9:fb:a7:21:38:05:3b:07:58:a6:
81:20:80:b2:0b:23:bc:05:05:7f:d7:66:33:9c:12:
b1:9b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
Server certificate
X509v3 Subject Key Identifier:
53:BF:90:D6:8C:E7:D1:FA:33:AF:D3:DE:B2:55:3C:73:17:FA:50:8A
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
7d:a2:a3:b2:b0:7f:37:df:8a:7d:75:62:e7:1e:89:a8:7f:58:
cc:84:c2:00:2c:f7:e1:37:8f:4d:b0:0e:ab:ef:51:c7:b8:07:
24:95:18:98:a7:69:fc:d7:ee:57:82:aa:0c:c4:e4:e2:dc:88:
02:47:58:de:cf:2a:f2:11:8c:5a:79:f6:ce:33:40:93:01:f1:
18:7e:6b:07:c0:10:37:a5:a4:bd:5e:8d:b2:c5:ab:50:19:27:
8a:3c:d3:6e:08:ec:27:de:7d:39:1e:20:b8:20:75:f4:41:dd:
5c:6c:c5:75:18:e4:62:ab:c8:84:92:db:66:a8:dc:69:29:d3:
aa:06:cf:86:7d:12:f0:20:66:9a:f7:8e:d8:77:62:47:9a:d4:
37:49:5c:80:eb:f4:5b:04:2e:60:d3:dd:96:00:db:09:5d:2a:
eb:25:95:48:6b:3d:e1:57:ad:e9:ba:26:d6:fb:c3:31:13:48:
a4:4e:47:9d:c1:40:64:39:64:35:4b:52:6f:ea:51:28:65:3d:
32:e2:6f:38:1d:2d:ec:f9:69:aa:92:8b:66:a8:00:4e:dc:f2:
81:ea:ff:94:b3:2d:bd:a4:cf:1c:6c:42:7d:e4:c5:24:27:0d:
c2:0d:b5:b0:46:89:df:08:76:94:86:64:64:90:a3:95:79:5a:
d2:0d:70:3a
-----BEGIN CERTIFICATE-----
MIIDhzCCAm+gAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MFowSDELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDEWMBQGA1UEAxMNYm9y
dGFsLXNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkCehcu
UX6u9Mhj8PLLSFUmFc6c85LtJHNvd1RgFEuFUuO0ipRcHKjca5htTbz8diQg5vxU
SckWeYaxdC8O0hMWZDr8tD6VlDSHqfSVy5bUhjHpEL61BRg58pDSWVKHkCvciKck
81VI+ZNmk4WEYayFJ0x5vUdfDWflx+7OFjXJutIWHiIBg0pQIcJjy7IZreIa9SgB
GGXckxpoZkVbc9L3I7sd4GqOO0TbjJ8HNvw43fWoprHExnf4vuwu+Vic6GZ9WLzI
QeCbvTJOuDGz6S0w4RosBEVlTTwPYGGcXHTX3/wNBTL5+6chOAU7B1imgSCAsgsj
vAUFf9dmM5wSsZsCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQE
AwIGQDAhBglghkgBhvhCAQ0EFBYSU2VydmVyIGNlcnRpZmljYXRlMB0GA1UdDgQW
BBRTv5DWjOfR+jOv096yVTxzF/pQijAfBgNVHSMEGDAWgBSkCioSB+zOEORMXrZ5
gxg7FT9Q2zANBgkqhkiG9w0BAQUFAAOCAQEAfaKjsrB/N9+KfXVi5x6JqH9YzITC
ACz34TePTbAOq+9Rx7gHJJUYmKdp/NfuV4KqDMTk4tyIAkdY3s8q8hGMWnn2zjNA
kwHxGH5rB8AQN6WkvV6NssWrUBknijzTbgjsJ959OR4guCB19EHdXGzFdRjkYqvI
hJLbZqjcaSnTqgbPhn0S8CBmmveO2HdiR5rUN0lcgOv0WwQuYNPdlgDbCV0q6yWV
SGs94Vet6bom1vvDMRNIpE5HncFAZDlkNUtSb+pRKGU9MuJvOB0t7PlpqpKLZqgA
Ttzyger/lLMtvaTPHGxCfeTFJCcNwg21sEaJ3wh2lIZkZJCjlXla0g1wOg==
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FI, ST=Tampere, O=Bortal, CN=CA
Validity
Not Before: Jan 1 00:00:00 1970 GMT
Not After : Mar 23 16:55:51 2072 GMT
Subject: C=FI, ST=Tampere, O=Bortal, CN=terminal
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:c9:1d:16:b7:d3:f9:07:84:a8:e1:82:4c:e1:13:
c8:cf:58:fe:23:b6:8f:73:3c:90:df:b8:24:8b:b6:
d4:89:39:69:71:10:9e:1b:57:16:8a:ec:c0:78:b2:
a2:c5:ad:30:5e:b0:74:43:9b:56:3c:b6:4d:37:65:
d4:05:82:27:4c:c5:7d:0c:bb:8c:bf:d4:f2:46:de:
f6:c9:e7:5e:f2:27:48:a7:2d:3a:ed:8a:55:09:4f:
3a:45:cc:b6:b5:c1:b1:61:a2:74:b5:3d:8b:2a:cf:
e1:a0:4f:86:c4:99:63:bb:ec:5c:27:ef:20:a5:de:
1d:20:9a:b3:19:94:5c:1c:1d:25:ac:26:ac:4a:3f:
48:a3:30:76:4f:c1:81:99:59:0a:af:e4:cd:f6:bb:
ba:2e:97:32:1d:e9:ea:59:49:ad:99:5d:a5:d7:8a:
db:8a:41:33:dd:4e:54:ef:f8:ca:80:15:22:c6:e9:
d5:33:15:7c:fe:f2:21:3f:a2:b7:7f:1a:96:c2:82:
75:19:2a:28:c5:11:72:cc:f3:eb:2d:ca:31:e8:59:
c4:09:79:38:01:dc:fa:75:6e:23:be:e8:a7:bd:cd:
aa:3f:0f:c7:71:26:2c:48:b5:41:8e:91:91:61:2d:
39:98:f1:b1:9c:ce:b1:0d:9b:d0:c8:7e:15:d1:d4:
28:07
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client
Netscape Comment:
Client certificate
X509v3 Subject Key Identifier:
0E:D4:56:4E:A6:62:B1:29:36:A0:12:50:4B:FC:B9:3E:92:54:59:52
X509v3 Authority Key Identifier:
keyid:A4:0A:2A:12:07:EC:CE:10:E4:4C:5E:B6:79:83:18:3B:15:3F:50:DB
Signature Algorithm: sha1WithRSAEncryption
73:84:1b:a8:2f:de:7d:22:d4:fa:3a:8a:1c:6e:01:73:fa:6e:
6c:8c:64:95:fa:89:34:c4:ad:83:4a:72:da:0c:bc:4d:86:ba:
5e:a9:c6:73:c9:50:27:ca:31:6a:e8:1d:1b:a6:32:f3:53:f8:
c1:a7:c7:58:e2:4c:64:65:33:ce:78:56:cf:13:75:6d:9d:7f:
d0:3e:a9:08:05:f2:d5:3d:6b:9c:bb:9f:12:96:e3:2a:76:98:
0c:e1:ee:1d:87:93:be:50:66:3f:20:17:93:67:68:b9:54:46:
ba:20:8e:5f:3a:f1:03:16:22:80:4f:90:97:fc:5b:2e:1f:a6:
b0:5b:a2:31:50:90:83:86:86:77:26:a1:19:c8:a0:30:ec:ef:
35:6b:b1:ed:e0:4b:b4:17:31:e6:e1:72:16:9e:24:01:6c:fe:
a2:9e:ad:6d:7c:57:c4:4e:9e:25:bd:ee:bc:e9:78:05:5a:16:
a3:e0:22:4a:66:cf:2c:4a:05:fe:24:ae:78:5d:1e:52:9e:07:
aa:de:bf:7d:31:1c:cc:86:1f:a4:a2:3a:6c:22:60:5a:fc:86:
47:c6:b3:73:9d:37:82:a5:15:ab:04:a7:4d:8a:94:58:27:d0:
7c:f8:e8:98:b6:95:c7:21:e3:17:2a:ce:dc:98:6a:90:07:7d:
63:df:27:62
-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MVowQzELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDERMA8GA1UEAxMIdGVy
bWluYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJHRa30/kHhKjh
gkzhE8jPWP4jto9zPJDfuCSLttSJOWlxEJ4bVxaK7MB4sqLFrTBesHRDm1Y8tk03
ZdQFgidMxX0Mu4y/1PJG3vbJ517yJ0inLTrtilUJTzpFzLa1wbFhonS1PYsqz+Gg
T4bEmWO77Fwn7yCl3h0gmrMZlFwcHSWsJqxKP0ijMHZPwYGZWQqv5M32u7oulzId
6epZSa2ZXaXXituKQTPdTlTv+MqAFSLG6dUzFXz+8iE/ord/GpbCgnUZKijFEXLM
8+styjHoWcQJeTgB3Pp1biO+6Ke9zao/D8dxJixItUGOkZFhLTmY8bGczrENm9DI
fhXR1CgHAgMBAAGjgYQwgYEwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4Aw
IQYJYIZIAYb4QgENBBQWEkNsaWVudCBjZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUDtRW
TqZisSk2oBJQS/y5PpJUWVIwHwYDVR0jBBgwFoAUpAoqEgfszhDkTF62eYMYOxU/
UNswDQYJKoZIhvcNAQEFBQADggEBAHOEG6gv3n0i1Po6ihxuAXP6bmyMZJX6iTTE
rYNKctoMvE2Gul6pxnPJUCfKMWroHRumMvNT+MGnx1jiTGRlM854Vs8TdW2df9A+
qQgF8tU9a5y7nxKW4yp2mAzh7h2Hk75QZj8gF5NnaLlURrogjl868QMWIoBPkJf8
Wy4fprBbojFQkIOGhncmoRnIoDDs7zVrse3gS7QXMebhchaeJAFs/qKerW18V8RO
niW97rzpeAVaFqPgIkpmzyxKBf4krnhdHlKeB6rev30xHMyGH6SiOmwiYFr8hkfG
s3OdN4KlFasEp02KlFgn0Hz46Ji2lcch4xcqztyYapAHfWPfJ2I=
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA9/qPVDICqhaRoiVvM+2eg38sAZzSipBzFLAB7OBJFqD6mtfp
v695rK0GWcHfw1yKTmPAVVzfFPf0OUb/T/+kQ5dn27hP/JLti94LeNf+VpSlZD1g
TAFzVIe2bBAsN90ta1zJKOhtK1g99+wAogqSVcgQz4Vn3BAOu1653wxyXihIM0Lm
bD7oYlD+80Cfal0w7/Fgs6YCRjJ4UZS9i4BQj+LKYAdmKVJoWgiojHRwID1Q1CmQ
VnNIGXXvI666f1lmootzyDErAQR6mdYh8DgBe/KxCqnQZN2G95UKB06QHJEoP0R9
b0dGJYOnboivIGRMFjcfID3JAgv4s/miQnHfJQIDAQABAoIBAQCT3fWvh+6sy65l
mJrZxRxbXu63u3KUK5RjxpwvSoJqmu00fgElSxZrz/TUetXaIYlbOwIKJMnlMAGS
UfKWGmMx5suIajxP6LD7URlYIrvHlvWUc0DDsa26vv4ZK/+iBCI8PeS5nvbR/Nle
x3yNI26k9hqIFA2dXHncYpzFEx/zYjdGBswfbUsQF47lK1QU8qDpGtnaanptxpi9
0mg1Y1RyDXIlKsKV6PUt7Fp4vavKZb8v/5OZEtjpTfP9m9XScv98ttupn0Sfc8ee
0Sskzk+Chqa0J9yhpLLe2BaKUAeGqP1mz5WFbeyzK3BoSvRoYQsfEqT4cyQIR33q
k7QzewuBAoGBAP2JSQgBgzwoILq234JrhJf8Vk4PGDaX4XHBoRFhKX5W7bjyBQTT
i5lpm0e4g/efKOvYILM87KdZw1eUbhbztaZnq9HJao4n6VmdHfPRcVgWhVeP+ATg
naJ7XlAs8XqNiSjHIp4D3J1UPqhQIcFzvdJD/kepZ234RQnY8pNuCN4hAoGBAPpj
cwaGtX+o0k0t9aHRgMwuS9WPooldfFETRoHyVSHVDsxn+FU2LamS8YGFwRQZYgz+
0f1v2Y/C8p4xH+1+9wg0s06xEf+BZOxrXUmgmPKrGB15k8EXRjlLmADa1o0CNg5y
HmYLsWT9UQAdwflOd0zPRObF2/rIt6KzoiMi13iFAoGBAKvO64GUXNVYMA23PTFJ
IPpJkkalbfgY5jpLR5XabN7jk4af4wzJOjGE4igw/qS/42Am/snXgFtLtddUi2Hc
Vv1kBYhNYHriyvviP9jo1lEmOcgDlMPhXpEr3tagDifJX+gVQf0oisjGvQsb+jP4
9epWDyuKvb9E3av1qzSC/VlhAoGAFMisg54q8q3QxxdJjGUXi9tL8C48D6ry5sfy
0laLOoO09sKqmmgk4i6QXW/81u5EdU+xnpfqN0S3Xuo0/EHNv6CgQafxFoRnHDjN
RY9PItWQ6uFsolqMObVMqMWBibLlSc2vOElAMGHWl2vg7hDVVkreLUm/ONHwbFD8
5G2/9QECgYEAqz3caaV3WeXE5iLMZIoAgfvLrgeiTNcw7soLvxjqm+BInXoY31hi
EHgI9tTqePmpDKLVZ+xOZYFt+uUM4DJHZ/dQ519YEcssvzdfYxeYMw5qgDPa6UTP
269332Ur+ci2Bn4vZoWTmKWOCTNDWLhbFcLzkZAMv5Q2nW2KCxvll1g=
-----END RSA PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAuQJ6Fy5Rfq70yGPw8stIVSYVzpzzku0kc293VGAUS4VS47SK
lFwcqNxrmG1NvPx2JCDm/FRJyRZ5hrF0Lw7SExZkOvy0PpWUNIep9JXLltSGMekQ
vrUFGDnykNJZUoeQK9yIpyTzVUj5k2aThYRhrIUnTHm9R18NZ+XH7s4WNcm60hYe
IgGDSlAhwmPLshmt4hr1KAEYZdyTGmhmRVtz0vcjux3gao47RNuMnwc2/Djd9aim
scTGd/i+7C75WJzoZn1YvMhB4Ju9Mk64MbPpLTDhGiwERWVNPA9gYZxcdNff/A0F
Mvn7pyE4BTsHWKaBIICyCyO8BQV/12YznBKxmwIDAQABAoIBAQCw2qVLM4PDzgtA
5AiYj6p9ewKtl2tfsEF/97XielXsO26ZLSSr3cGnyc0w0IvXdJ6aurkTzJ8cEtfo
4glmUoyOooD9wkOq7+HUtTrKC8eqT05Yt6rCItjT59Dwj6PDOMOgqhgXb0MM681o
Ek5C++FCwaZnfJhreXmfMBCHP4oLr0M45Wl+Fnh6vrNHr1LxR0QZNP6Y+gKlojMT
AbzuQ3GPUyHxkh+1HLXRAyoZpUbvaKG7wybiVSDBQake0gJQHFD8zXRuDrMausNK
HzQMvSG8cCrJqWdzZQUFdBWMvyJt51DQSjb2B42ZqgxeByPb6cuyMdu9mCl4mG6n
ofdTKYGBAoGBAN2367lVvvoD2zqB7NeyKtKzVZSeuW8f2QQP/Gyngey4NbgtDzHI
w54NadgwvmhPFPY5WUxKwzNG4jsFoGYe/dmWBe7iD+eX1G8N4VyCtzqlaUCq5ZY1
o87ThYmx3+UAKKh4gZfnVV5QkfYtOM6EE84oazoe+UOe+PKwC9j59G0jAoGBANWd
i+Zm2pYFA3E+0coe4cppFigFw2FbC/1ywB7zAdYCHs/c9LAbL650LeRNh+40HxhU
GugX+gLFde3qCsMTUEThRpn15+mozKyyOpB+1DeQG61nxZd+XM4ZECbn4SYZ3OQO
b0AudNa84fCTHYLL88qvpslbZWHv5cAu96H50t0pAoGAXcNA0aDcYZit5mE5isIS
8AXdBDvXiZH7UYd9JWn1POlt9lQ/37raVwWvJDkA3NXMtI/uHqBjSlUIqRMpEOa8
TX7vRWWeej8wHELPcjLpT8jR6QIck1hdzMKQ73kkiRB3IT/M9jNjW75Q672WD2e1
hHJ9XhfpK9qXxvICIKEb5+cCgYEAnkKMpXRKOZ8ZP8tUzjQ3ACj++0PZzsUPiwR7
BfLvx0fm4AVJWzepCcyVO3GdZYNEDlgxXwZ0eZ0lk9AzjPdAHufv0Jz45oniqYea
D/eG7mtbtgsNvwElbKPw7YIZsoqytltjXN+OPJHPqtazpHXJ9r5QCRoncHm1c77Y
RC68ZJECgYB9TO+pwciBn931UxWlZGCt0HGSnpSP6RHR0rM42NAEUV0p1hcsgRMF
2fKKg00TEcMfZbRA89NeYG56plFZ89G3SlkH3alUkv827fwjlTokPKs3KulOBqJe
HBNRc1VK0MfJjkXgsik6n4JbiYx1df35lvqn8OcNDI33RGQp1LduNQ==
-----END RSA PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAyR0Wt9P5B4So4YJM4RPIz1j+I7aPczyQ37gki7bUiTlpcRCe
G1cWiuzAeLKixa0wXrB0Q5tWPLZNN2XUBYInTMV9DLuMv9TyRt72yede8idIpy06
7YpVCU86Rcy2tcGxYaJ0tT2LKs/hoE+GxJlju+xcJ+8gpd4dIJqzGZRcHB0lrCas
Sj9IozB2T8GBmVkKr+TN9ru6LpcyHenqWUmtmV2l14rbikEz3U5U7/jKgBUixunV
MxV8/vIhP6K3fxqWwoJ1GSooxRFyzPPrLcox6FnECXk4Adz6dW4jvuinvc2qPw/H
cSYsSLVBjpGRYS05mPGxnM6xDZvQyH4V0dQoBwIDAQABAoIBACdLdLXkR+MNK4Ys
VGMh33mL9NP7hpnIerILo7Bcv7g0LIL38Tx8Tp5EVfL/TEh9Z1cI+R6AimAAaqPp
VHzjClS4vY8wUfblX5UzWVrnxyhfPpXTg5EIF0djYIpkzkpDFypxeIY1CS0LQxV0
lGtzYQZFz1fKJEHkXSKSt23HDBw9yO2N3j9Mk/VQGD/Ncwulvkc+yooZ4FKfbZkq
XSx2v4aiS5f4YOIpsnbdageXkP6VNqPS9Kxj1NLUZSEvYGWIZf3BW+8uN7SA7xKY
HVRUy1eqBxPuVj/w/tl6O/e7jeoLLoT5y7ffOU0i6Favpix7hlEImzl3+LiTibUg
mfbRDikCgYEA7U+RxE8U/Q7lHPmvjMRiE2hYmDLdWACyIx5E6BP3R8oc/z1KZHFk
EavGWcE7495DmiBU2Lu+5tc7vxbfAxi2WJsk5CYIZaGkwPIOzLyAi9q2Un2XcelV
4XE/HbsnC3dQ8rg0AEQUnT/INSvUeTjt8pONijJi74TV49n6Sa4opEsCgYEA2PO/
J1VA5riKA2RPg+8eZFtrJbGMKsp6hAqARsR5SF+ZiBG0qaqin7aU5fNjn8G96sBr
gy/GrbFVlQH9T4BOOI2J4AcuVvI7JH/tQdwaflwPd2zJKOlhmLeNTDpYMt1Tiq5g
c8uWe7w2NdZvBxTNAY6ZY1SvfFmvtWFNxtVCnbUCgYAmz2KJdl16XVs+996r6NoZ
TnFewsLMR6DaeXLPeaRxSy6e14k5EApLkYoo159RzuHDbRIzN9Eqs3yD7dufCAWa
TBUmcsngxSTKoUumVBW5yZUTvJJuALkY24p09EyYZXUJnPJ0MK4mYW3+tCJViOfx
SgxV05O2lETetKFoN2FSLQKBgAREXwkeAyXGkWhZq7qzlExzA9t8733T967rKfS6
XoxO3Q0xE/WWVpZ/l9QiAl6dB+g7GqI86VJ3P3Cr1lie9GrmVcTjP0UUhJdGMNtv
wdGka+V0bUxxsqq3SX8rUprFgaQjo+ADLBWI8SQD8LEZ9qJGNLwgaUcv2GXf4RC9
Fw9VAoGABiVn59gFCJ5vDiv/TnNC5YZHyJ0xLRHsSaAilpEcKh4A3oLMRH61Qi9X
AdjtgF3zvJZ4wvvGaIGwhjD2Rr+VZalCxy9+7AqRQ5rS2pkjMVJXo4xr+BUT1zeX
H1gmAJGwsMxVij/skcPsQ8VYLsJk4KGTogUFNx+673ZRI+AFdkA=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIClDCCAXwCAQAwTzELMAkGA1UEBhMCRkkxEDAOBgNVBAgTB1RhbXBlcmUxEDAO
BgNVBAcTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDELMAkGA1UEAxMCQ0EwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD3+o9UMgKqFpGiJW8z7Z6DfywB
nNKKkHMUsAHs4EkWoPqa1+m/r3msrQZZwd/DXIpOY8BVXN8U9/Q5Rv9P/6RDl2fb
uE/8ku2L3gt41/5WlKVkPWBMAXNUh7ZsECw33S1rXMko6G0rWD337ACiCpJVyBDP
hWfcEA67XrnfDHJeKEgzQuZsPuhiUP7zQJ9qXTDv8WCzpgJGMnhRlL2LgFCP4spg
B2YpUmhaCKiMdHAgPVDUKZBWc0gZde8jrrp/WWaii3PIMSsBBHqZ1iHwOAF78rEK
qdBk3Yb3lQoHTpAckSg/RH1vR0Ylg6duiK8gZEwWNx8gPckCC/iz+aJCcd8lAgMB
AAGgADANBgkqhkiG9w0BAQUFAAOCAQEAAf2HBdd7TU4VpCaKCGnY8+lg722L+7qF
6fcm7GYpuvayBLW2W++HT1vbDAu62qOJS4sKGV+Z0iBKCdSocIxjTuQfND7s5lYB
wSFlEBq5HYurVibmGwIH8953TypYg5jL4NnAkd3VGAeoBD1jW3GRen3Vor5S5Ewl
R4nW3FqUT6KUUkKE1upv8lcC/YVYp9vOuDwvNPbmx9EBE2sgBjinl4dw1/c1d6Zb
sNg+5t8UK7dWP32qU13pPQIE3XZmlp04flYligR23D6wAXCk3p7GXlgjxNWzUeLy
9cRvJnwMD/Fxk/0OI7iI1373voPawKS3N5piEHyQHJCX3suE/GGLSQ==
-----END CERTIFICATE REQUEST-----
-----BEGIN CERTIFICATE REQUEST-----
MIICnzCCAYcCAQAwWjELMAkGA1UEBhMCRkkxEDAOBgNVBAgTB1RhbXBlcmUxEDAO
BgNVBAcTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDEWMBQGA1UEAxMNYm9ydGFs
LXNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkCehcuUX6u
9Mhj8PLLSFUmFc6c85LtJHNvd1RgFEuFUuO0ipRcHKjca5htTbz8diQg5vxUSckW
eYaxdC8O0hMWZDr8tD6VlDSHqfSVy5bUhjHpEL61BRg58pDSWVKHkCvciKck81VI
+ZNmk4WEYayFJ0x5vUdfDWflx+7OFjXJutIWHiIBg0pQIcJjy7IZreIa9SgBGGXc
kxpoZkVbc9L3I7sd4GqOO0TbjJ8HNvw43fWoprHExnf4vuwu+Vic6GZ9WLzIQeCb
vTJOuDGz6S0w4RosBEVlTTwPYGGcXHTX3/wNBTL5+6chOAU7B1imgSCAsgsjvAUF
f9dmM5wSsZsCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQBIulavAguqK3yx7Weq
CwcQiQuQHmYLhfu6GAM2YvhEhVmlLVDvSVeW6bpLIeRwJ6exYuY8OnZ7IelffCP+
A61tLq09f45N4OzHvsOOpUbn7O0hm1gtGaM0xjWvlRciNuqOmMVqucqp5ku3Ql9t
9a5DcaQPdhGMybGT96zIxRmOEAfsjmuCVEzUG/kxJwtCtiLMqGdVrovbCLOcoJuZ
CXlBNtpqcPuV9CYO/+0Z72lQbuUU/PaBhpBvy9c1psXDA5ClVSV8Nj9F4DQFIdkc
TPATu7TYhBcuoWmrFQ4fCiL6F/oYX/TjDEcncttG4NrXipsvSjlhqjVMjg/zuHOI
UBkx
-----END CERTIFICATE REQUEST-----
-----BEGIN CERTIFICATE REQUEST-----
MIICmjCCAYICAQAwVTELMAkGA1UEBhMCRkkxEDAOBgNVBAgTB1RhbXBlcmUxEDAO
BgNVBAcTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDERMA8GA1UEAxMIdGVybWlu
YWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJHRa30/kHhKjhgkzh
E8jPWP4jto9zPJDfuCSLttSJOWlxEJ4bVxaK7MB4sqLFrTBesHRDm1Y8tk03ZdQF
gidMxX0Mu4y/1PJG3vbJ517yJ0inLTrtilUJTzpFzLa1wbFhonS1PYsqz+GgT4bE
mWO77Fwn7yCl3h0gmrMZlFwcHSWsJqxKP0ijMHZPwYGZWQqv5M32u7oulzId6epZ
Sa2ZXaXXituKQTPdTlTv+MqAFSLG6dUzFXz+8iE/ord/GpbCgnUZKijFEXLM8+st
yjHoWcQJeTgB3Pp1biO+6Ke9zao/D8dxJixItUGOkZFhLTmY8bGczrENm9DIfhXR
1CgHAgMBAAGgADANBgkqhkiG9w0BAQUFAAOCAQEAJq7FLdxkyq00S/9ePGJxcGZf
QfSiMK2IJLodHZPgnT3q0X4cz4mt6rSlDp/Pf7B0i1ptSy12ul0JLfL6f4JzuQgh
BP3/1wvrad87WRUtlNJxDGagBuD4TcMvi+tU7+ZwAoIHrZ9TbWWbPrctjR+5709D
Jqfl2VOMKkJRO4sBNQH2TSFVm9eVvtduUxydzmAXyAnSURbiJYTOahAcjejPDq/R
RzuXApS35ObVeBJRnVfVzzRzOZ0X/6D+8b48A1N1jdEeolnPlrN2g5UtPGqsRsIt
crIAOciA/Zha7B30nrbLmn12EoV4SkXfZLhCLAZ0Lj5WY/v2S9D/3eLR/El1Kg==
-----END CERTIFICATE REQUEST-----
No preview for this file type
#!/bin/sh
#
# Commands
#
openssl_req () {
echo openssl req -config openssl.cnf $@
openssl req -config openssl.cnf $@
}
openssl_ca () {
echo openssl ca -config openssl.cnf -batch -startdate 700101000000Z -days 21900 $@
openssl ca -config openssl.cnf -batch -startdate 700101000000Z -days 21900 $@
}
#
# CA directory structure
#
ca_dir () {
test -d "$1" && return
mkdir $1 $1/certs $1/private $1/crl $1/newcerts $1/req
touch $1/index.txt
echo 00 > $1/serial
echo 00 > $1/crlnumber
}
ca_dir ca-master
#
# The CA
#
test -f ca-master/ca-master.crt || {
# Make key and request
openssl_req -extensions v3_ca -new -newkey rsa:2048 -nodes \
-keyout ca-master/private/ca-master.key -out ca-master/req/ca-master.csr \
-subj "/C=FI/ST=Tampere/L=Tampere/O=Bortal/CN=CA"
# Make self signed CA
openssl ca -config openssl.cnf -batch -startdate 700101000000Z -days 21900 \
-selfsign -in ca-master/req/ca-master.csr -out ca-master/ca-master.crt \
-keyfile ca-master/private/ca-master.key || exit 1
# Make CA bundle keystore
rm -f cacerts.jks
openssl x509 -outform der -in ca-master/ca-master.crt -out ca-master/ca-master.der
keytool -import -keystore cacerts.jks -storepass changeit -file ca-master/ca-master.der -noprompt -trustcacerts -alias bortalca
}
#
# Certificates signed by CA
#
master_signed_cert () {
_base=$1 ; shift
test -f ca-master/certs/$_base.crt && return
# Create
openssl_req -new -newkey rsa:2048 -nodes \
-keyout ca-master/private/$_base.key \
-out ca-master/req/$_base.csr \
-subj "/C=FI/ST=Tampere/L=Tampere/O=Bortal/CN=$_base"
# Sign
openssl_ca -name CA_master $@ \
-in ca-master/req/$_base.csr \
-out ca-master/certs/$_base.crt
# Convert to PKCS#12 for import to keystore/browser
openssl pkcs12 -export -passout pass:changeit \
-in ca-master/certs/$_base.crt \
-inkey ca-master/private/$_base.key \
-out ca-master/certs/$_base.p12
}
#Certificates signed by master CA - with custom common name
#also create a .pem file for both private key and cert
master_signed_cert_cn () {
_base=$1 ; shift
_cn=$1 ; shift
test -f ca-master/private/$_base.pem && return
# Generate key and certificate request
openssl_req -new -newkey rsa:2048 -nodes \
-keyout ca-master/private/$_base.key \
-out ca-master/req/$_base.csr \
-subj "/C=FI/ST=Tampere/L=Tampere/O=Bortal/CN=$_cn"
# Sign with CA
openssl_ca -name CA_master $@ \
-in ca-master/req/$_base.csr \
-out ca-master/certs/$_base.crt
# Convert to PKCS#12 for import to keystore/browser
openssl pkcs12 -export -passout pass:changeit -in ca-master/certs/$_base.crt -inkey ca-master/private/$_base.key -out ca-master/certs/$_base.p12
}
master_signed_cert_cn s1as bortal-server -extensions srv_cert
rm -f keystore.jks
keytool -importkeystore -srckeystore ca-master/certs/s1as.p12 -destkeystore keystore.jks -srcstorepass changeit -deststorepass changeit -srcstoretype pkcs12 -alias 1 -destalias s1as
master_signed_cert terminal -extensions client_cert
No preview for this file type
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2MjIwNFowPTELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDELMAkGA1UEAxMCQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDseFQdsJKlAZDbaT7rwgHo
ThDXPCM2ynl3QXDUsoS9pNqtEePu8zHgMLnzbehQ1qNDAbrMc3DOr49vXkqBETAx
bu4J+AvpgmU3bb3CYb38vgLY6s9NwS6BKjW7Rn9pjnKVJcOfcR4h+No5mEuxz80H
f4DhQXIfDK2pK6+tQdyXAMCxp0qAW/HAZVJ6PYskoHw5MwqQ1pa+Qclyu3c4xyTh
QnHF71YO5KagBMkYrvgziqIZm/JGQ5GCgPmSEahXDzL9HWgcf6tL/pDjRz+TN3tj
4shK8/r/6QV6FwgtzNbkBY4exzwyiMw7aSHguECjRM0jiaTfSXJRGy80Nan8RO6Z
AgMBAAGjcDBuMAkGA1UdEwQCMAAwIQYJYIZIAYb4QgENBBQWEkJvcnRhbCBDZXJ0
aWZpY2F0ZTAdBgNVHQ4EFgQUlozbkSE+SlWHlrDgrFfc1Mq6OHswHwYDVR0jBBgw
FoAUlozbkSE+SlWHlrDgrFfc1Mq6OHswDQYJKoZIhvcNAQEFBQADggEBALQ2fOOf
Q5iGsHkYh7A+X/hFEQqgWEBtbZjEsuvAjgZSkufa9xzls2nA6h9v3rfgb6CBIkFs
b1RWsuz9ewYBsT8RfqKkp0eVaUFA1dZ8df+f7lQvOMK3l+JINXUqh7TAlJsfTwlW
EXID+OOU2/su6kuOBnajveitPU57RU4Oy1U7hB4U7STeyvmZod/CrHi6hlrMd/KJ
7CwWU5mP06hC6JzoE3t7BngSVj9QKpUHDhOiOLUsa919/Y8rmCsE098PjsRleuk9
LowqJh+Qyu6bJyZn6xvE5IcF2jg9AzqFi/tLRMr3uSPGzs9KqgAz3SXyKF7wYvLG
HsLclVSa3+Dos8I=
-----END CERTIFICATE-----
No preview for this file type
#
# Bortal CA
#
HOME = .
RANDFILE = $ENV::HOME/.rnd
# Extra OBJECT IDENTIFIER info:
#oid_file = $ENV::HOME/.oid
oid_section = new_oids
# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)
[ new_oids ]
# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6
####################################################################
[ ca ]
default_ca = CA_master # The default ca section
####################################################################
[ CA_master ]
dir = ./ca-master # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/ca-master.crt # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca-master.key # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use.
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match
[ CA_tosibox ]
dir = ./ca-tosibox # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/ca-tosibox.crt # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca-tosibox.key # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use.
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match
[ CA_tokens ]
dir = ./ca-tokens # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/ca-tokens.crt # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca-tokens.key # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use.
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match
[ CA_vpnclient ]
dir = ./ca-vpnclient # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/ca-vpnclient.crt # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca-vpnclient.key # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = sha1 # which md to use.
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
####################################################################
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
# Passwords for private keys if not present they will be prompted for
# input_password = secret
# output_password = secret
# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
# so use this option with caution!
string_mask = nombstr
# req_extensions = v3_req # The extensions to add to a certificate request
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = FI
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Tampere
localityName = Locality Name (eg, city)
localityName_default = Tampere
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Bortal
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
# SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ srv_cert ]
basicConstraints=CA:FALSE
nsCertType = server
nsComment = "Server certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ sign_cert ]
basicConstraints=CA:FALSE
nsCertType = objsign
nsComment = "Software signing certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ client_cert ]
basicConstraints=CA:FALSE
nsCertType = client
nsComment = "Client certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ usr_cert ]
# These extensions are added when 'ca' signs a request.
# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.
basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.
# This is OK for an SSL server.
# nsCertType = server
# For an object signing certificate this would be used.
# nsCertType = objsign
# For normal client use this is typical
# nsCertType = client, email
# and for everything including object signing:
# nsCertType = client, email, objsign
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# This will be displayed in Netscape's comment listbox.
nsComment = "Bortal Certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details
# issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
# Extensions for a typical CA
# PKIX recommendation.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true
# So we do this instead.
basicConstraints = CA:true
# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
# keyUsage = cRLSign, keyCertSign
# Some might want this also
# nsCertType = sslCA, emailCA
# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy
# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF
[ crl_ext ]
# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate
# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.
basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.
# This is OK for an SSL server.
# nsCertType = server
# For an object signing certificate this would be used.
# nsCertType = objsign
# For normal client use this is typical
# nsCertType = client, email
# and for everything including object signing:
# nsCertType = client, email, objsign
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# This will be displayed in Netscape's comment listbox.
nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move
# Copy subject details
# issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
# This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
-----BEGIN CERTIFICATE-----
MIIDhzCCAm+gAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MFowSDELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDEWMBQGA1UEAxMNYm9y
dGFsLXNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkCehcu
UX6u9Mhj8PLLSFUmFc6c85LtJHNvd1RgFEuFUuO0ipRcHKjca5htTbz8diQg5vxU
SckWeYaxdC8O0hMWZDr8tD6VlDSHqfSVy5bUhjHpEL61BRg58pDSWVKHkCvciKck
81VI+ZNmk4WEYayFJ0x5vUdfDWflx+7OFjXJutIWHiIBg0pQIcJjy7IZreIa9SgB
GGXckxpoZkVbc9L3I7sd4GqOO0TbjJ8HNvw43fWoprHExnf4vuwu+Vic6GZ9WLzI
QeCbvTJOuDGz6S0w4RosBEVlTTwPYGGcXHTX3/wNBTL5+6chOAU7B1imgSCAsgsj
vAUFf9dmM5wSsZsCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQE
AwIGQDAhBglghkgBhvhCAQ0EFBYSU2VydmVyIGNlcnRpZmljYXRlMB0GA1UdDgQW
BBRTv5DWjOfR+jOv096yVTxzF/pQijAfBgNVHSMEGDAWgBSkCioSB+zOEORMXrZ5
gxg7FT9Q2zANBgkqhkiG9w0BAQUFAAOCAQEAfaKjsrB/N9+KfXVi5x6JqH9YzITC
ACz34TePTbAOq+9Rx7gHJJUYmKdp/NfuV4KqDMTk4tyIAkdY3s8q8hGMWnn2zjNA
kwHxGH5rB8AQN6WkvV6NssWrUBknijzTbgjsJ959OR4guCB19EHdXGzFdRjkYqvI
hJLbZqjcaSnTqgbPhn0S8CBmmveO2HdiR5rUN0lcgOv0WwQuYNPdlgDbCV0q6yWV
SGs94Vet6bom1vvDMRNIpE5HncFAZDlkNUtSb+pRKGU9MuJvOB0t7PlpqpKLZqgA
Ttzyger/lLMtvaTPHGxCfeTFJCcNwg21sEaJ3wh2lIZkZJCjlXla0g1wOg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQGEwJGSTEQ
MA4GA1UECBMHVGFtcGVyZTEPMA0GA1UEChMGQm9ydGFsMQswCQYDVQQDEwJDQTAg
Fw03MDAxMDEwMDAwMDBaGA8yMDcyMDMyMzE2NTU1MVowQzELMAkGA1UEBhMCRkkx
EDAOBgNVBAgTB1RhbXBlcmUxDzANBgNVBAoTBkJvcnRhbDERMA8GA1UEAxMIdGVy
bWluYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJHRa30/kHhKjh
gkzhE8jPWP4jto9zPJDfuCSLttSJOWlxEJ4bVxaK7MB4sqLFrTBesHRDm1Y8tk03
ZdQFgidMxX0Mu4y/1PJG3vbJ517yJ0inLTrtilUJTzpFzLa1wbFhonS1PYsqz+Gg
T4bEmWO77Fwn7yCl3h0gmrMZlFwcHSWsJqxKP0ijMHZPwYGZWQqv5M32u7oulzId
6epZSa2ZXaXXituKQTPdTlTv+MqAFSLG6dUzFXz+8iE/ord/GpbCgnUZKijFEXLM
8+styjHoWcQJeTgB3Pp1biO+6Ke9zao/D8dxJixItUGOkZFhLTmY8bGczrENm9DI
fhXR1CgHAgMBAAGjgYQwgYEwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4Aw
IQYJYIZIAYb4QgENBBQWEkNsaWVudCBjZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUDtRW
TqZisSk2oBJQS/y5PpJUWVIwHwYDVR0jBBgwFoAUpAoqEgfszhDkTF62eYMYOxU/
UNswDQYJKoZIhvcNAQEFBQADggEBAHOEG6gv3n0i1Po6ihxuAXP6bmyMZJX6iTTE
rYNKctoMvE2Gul6pxnPJUCfKMWroHRumMvNT+MGnx1jiTGRlM854Vs8TdW2df9A+
qQgF8tU9a5y7nxKW4yp2mAzh7h2Hk75QZj8gF5NnaLlURrogjl868QMWIoBPkJf8
Wy4fprBbojFQkIOGhncmoRnIoDDs7zVrse3gS7QXMebhchaeJAFs/qKerW18V8RO
niW97rzpeAVaFqPgIkpmzyxKBf4krnhdHlKeB6rev30xHMyGH6SiOmwiYFr8hkfG
s3OdN4KlFasEp02KlFgn0Hz46Ji2lcch4xcqztyYapAHfWPfJ2I=
-----END CERTIFICATE-----
#!/bin/sh
_base=glassfish
openssl pkcs12 -export -passout pass:changeit -in ca-master/certs/$_base.crt -inkey ca-master/private/$_base.key -out ca-master/certs/$_base.p12
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
<project>LanBortalBeans</project> <project>LanBortalBeans</project>
<project>LanBortalBeansClient</project> <project>LanBortalBeansClient</project>
<project>LanBortalAuthModuleClient</project> <project>LanBortalAuthModuleClient</project>
<project>LanBortalTerminalWeb</project>
</projects> </projects>
<buildSpec> <buildSpec>
<buildCommand> <buildCommand>
......
...@@ -22,5 +22,9 @@ ...@@ -22,5 +22,9 @@
<dependent-module archiveName="LanBortalAuthModuleClient.jar" deploy-path="/lib" handle="module:/resource/LanBortalAuthModuleClient/LanBortalAuthModuleClient"> <dependent-module archiveName="LanBortalAuthModuleClient.jar" deploy-path="/lib" handle="module:/resource/LanBortalAuthModuleClient/LanBortalAuthModuleClient">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module archiveName="LanBortalTerminalWeb.war" deploy-path="/" handle="module:/resource/LanBortalTerminalWeb/LanBortalTerminalWeb">
<dependent-object/>
<dependency-type>uses</dependency-type>
</dependent-module>
</wb-module> </wb-module>
</project-modules> </project-modules>
package fi.insomnia.bortal;
import java.util.StringTokenizer;
import javax.security.auth.login.LoginException;
import com.sun.appserv.security.AppservCertificateLoginModule;
public class BortalCertificateLoginModule extends AppservCertificateLoginModule {
@Override
protected void authenticateUser() throws LoginException {
// Get the distinguished name from the X500Principal.
String dname = getX500Principal().getName();
log("BortalCertificateLoginModule: " + dname);
StringTokenizer st = new StringTokenizer(dname, " \t\n\r\f,");
while (st.hasMoreTokens()) {
String next = st.nextToken();
if (next.startsWith("CN=")) {
String cn = next.substring(3);
log("Committing user auth: " + cn);
commitUserAuthentication(new String[] { cn });
return;
}
}
throw new LoginException("No CN found.");
}
private void log(String s) {
System.out.println("BortalCertificateLoginModule: " + s);
}
}
...@@ -38,8 +38,6 @@ package fi.insomnia.bortal; ...@@ -38,8 +38,6 @@ package fi.insomnia.bortal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List;
import java.util.Set;
import javax.security.auth.login.LoginException; import javax.security.auth.login.LoginException;
...@@ -81,9 +79,6 @@ public class BortalLoginModule extends AppservPasswordLoginModule { ...@@ -81,9 +79,6 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
throw new LoginException("Realm not SampleRealm"); throw new LoginException("Realm not SampleRealm");
} }
// find cert
log("Trying to find certificates");
RealmBeanRemote authbean = BortalRealm.getAuthBean(); RealmBeanRemote authbean = BortalRealm.getAuthBean();
if (authbean == null) { if (authbean == null) {
throw new LoginException( throw new LoginException(
...@@ -139,8 +134,7 @@ public class BortalLoginModule extends AppservPasswordLoginModule { ...@@ -139,8 +134,7 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
} }
private void log(String s) { private void log(String s) {
System.out.println((new StringBuilder()).append("BortalLoginModule::") System.out.println("BortalLoginModule: " + s);
.append(s).toString());
} }
} }
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);
}
}
}
...@@ -32,8 +32,6 @@ public class EventBean implements EventBeanLocal { ...@@ -32,8 +32,6 @@ public class EventBean implements EventBeanLocal {
@EJB @EJB
private EventOrganiserFacade eventOrganiserFacade; private EventOrganiserFacade eventOrganiserFacade;
@EJB
private EventStatusBeanLocal eventStatusBean;
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@EJB @EJB
...@@ -59,7 +57,6 @@ public class EventBean implements EventBeanLocal { ...@@ -59,7 +57,6 @@ public class EventBean implements EventBeanLocal {
ret.setName(DEFAULT_EVENT_NAME); ret.setName(DEFAULT_EVENT_NAME);
ret.setOrganiser(findOrCreateDefaultEventOrganisation()); ret.setOrganiser(findOrCreateDefaultEventOrganisation());
ret.setStatus(eventStatusBean.findOrCreateDefaultEventStatus());
eventFacade.create(ret); eventFacade.create(ret);
em.flush(); em.flush();
} }
......
...@@ -7,14 +7,17 @@ import javax.annotation.security.RolesAllowed; ...@@ -7,14 +7,17 @@ import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade; import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser; import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
/** /**
* Session Bean implementation class EventOrganiserBean * Session Bean implementation class EventOrganiserBean
*/ */
@Stateless @Stateless
@DeclareRoles({ "SUPERADMIN" }) @DeclareRoles({ SpecialPermission.S_SUPERADMIN })
public class EventOrganiserBean implements EventOrganiserBeanLocal { public class EventOrganiserBean implements EventOrganiserBeanLocal {
@EJB @EJB
...@@ -24,6 +27,8 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal { ...@@ -24,6 +27,8 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal {
private LoggingBeanLocal loggingbean; private LoggingBeanLocal loggingbean;
@EJB @EJB
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB
private EventFacade eventfacade;
/** /**
* Default constructor. * Default constructor.
...@@ -58,4 +63,9 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal { ...@@ -58,4 +63,9 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal {
public EventOrganiser find(Integer orgId) { public EventOrganiser find(Integer orgId) {
return eventorgfacade.find(orgId); return eventorgfacade.find(orgId);
} }
@Override
public LanEvent findEvent(Integer eventid) {
return eventfacade.find(eventid);
}
} }
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.EventStatusEnum;
import fi.insomnia.bortal.facade.EventStatusFacade;
import fi.insomnia.bortal.model.EventStatus;
/**
*
* @author tuukka
*/
@Stateless
public class EventStatusBean implements EventStatusBeanLocal {
@EJB
private EventStatusFacade eventStatusFacade;
public EventStatus findEventStatus(EventStatusEnum eventStatusEnum) {
EventStatus status = eventStatusFacade.findEventStatus(eventStatusEnum);
if (status == null) {
status = new EventStatus(eventStatusEnum);
eventStatusFacade.create(status);
}
return status;
}
@Override
public EventStatus findOrCreateDefaultEventStatus() {
return findEventStatus(EventStatusEnum.getDefaultEventStatusEnum());
}
}
...@@ -48,7 +48,6 @@ public class Menubean implements MenubeanLocal { ...@@ -48,7 +48,6 @@ public class Menubean implements MenubeanLocal {
@Override @Override
public MenuNavigation getMenuNavigation(String url) { public MenuNavigation getMenuNavigation(String url) {
MenuNavigation ret = navifacade.find(url, eventbean.getCurrentEvent()); MenuNavigation ret = navifacade.find(url, eventbean.getCurrentEvent());
logger.warn("Children at bean: {}", ret.getChildren());
return ret; return ret;
} }
......
...@@ -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; package fi.insomnia.bortal.beans;
import java.util.Calendar; import java.util.Calendar;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade; import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.ReaderEventFacade; import fi.insomnia.bortal.facade.ReaderEventFacade;
import fi.insomnia.bortal.facade.ReaderFacade; import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
...@@ -25,97 +20,152 @@ import fi.insomnia.bortal.model.ReaderEvent; ...@@ -25,97 +20,152 @@ import fi.insomnia.bortal.model.ReaderEvent;
* Session Bean implementation class ReaderBean * Session Bean implementation class ReaderBean
*/ */
@Stateless @Stateless
@DeclareRoles("GAME/EXECUTE")
public class ReaderBean implements ReaderBeanLocal { public class ReaderBean implements ReaderBeanLocal {
@EJB @EJB
private ReaderFacade readerfacade; private ReaderFacade readerfacade;
@EJB @EJB
private EventBeanLocal eventbean;
@EJB
private PrintedCardFacade cardfacade; private PrintedCardFacade cardfacade;
@EJB @EJB
private ReaderEventFacade readerEventFacade;
@EJB
private GroupMembershipFacade gmfacade;
@EJB
private CardTemplateBeanLocal cardtemplatebean; private CardTemplateBeanLocal cardtemplatebean;
@EJB
private ReaderEventFacade readerEventFacade;
private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class); private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class);
@Override @Override
public ReaderEvent checkTag(String ident, String tag, String hash) { public ReaderEvent checkTag(String readerIdent, String tag, String hash) {
PrintedCard card = cardfacade.findByRfid(tag); PrintedCard card = cardfacade.findByRfid(tag);
Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
// RfidEvent revent = reventcontainer.foundTag(reader, tag);
List<ReaderEvent> lastevents = readerEventFacade.findLastEvents(reader, 1);
ReaderEvent ret = null; ReaderEvent ret = null;
logger.debug("Found card by rfid: {}", card); if (!lastevents.isEmpty())
if (card != null) { {
ReaderEvent lastevent = lastevents.get(0);
if (card == null)
{
if (lastevent.getPrintedCard() == null && tag.equals(lastevent.getValue()))
{
ret = lastevent;
}
ret = createReaderEvent(ident, card); } else if (card.equals(lastevent.getPrintedCard())) {
ret = lastevent;
}
} }
if (ret == null)
{
ret = createReaderEvent(reader, card);
} else {
ret.setUpdatetime(Calendar.getInstance());
}
if (card == null)
{
ret.setValue(tag);
}
return ret; return ret;
//
// if (revent.getEvent() != null) {
// ret = readerEventFacade.find(revent.getEvent().getId());
// revent.setEvent(ret);
// }
// else if (card != null) {
//
// revent.setEvent(ret);
// }
//
// return ret;
} }
@Override //
public ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException, PermissionDeniedException { // @Override
// public ReaderEvent assocTagToPlacecode(String tag, String readerIdent,
GroupMembership gm = gmfacade.findByToken(placecode); // String placecode) throws BortalCatchableException,
if (gm == null) { // PermissionDeniedException {
throw new BortalCatchableException("Token" + placecode + " not found!", "readerbean.tokenNotFound"); //
} // GroupMembership gm = gmfacade.findByToken(placecode);
if (gm.getUser() == null) { // if (gm == null) {
throw new BortalCatchableException("Token " + placecode + "found but not assoc to user!", "readerbean.userNotAssociateToMembership"); // throw new BortalCatchableException("Token" + placecode + " not found!",
} // "readerbean.tokenNotFound");
// }
// if (gm.getUser() == null) {
// throw new BortalCatchableException("Token " + placecode +
// "found but not assoc to user!",
// "readerbean.userNotAssociateToMembership");
// }
//
// PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser());
//
// Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
//
// return createReaderEvent(reader, card);
//
// }
private ReaderEvent createReaderEvent(Reader reader, PrintedCard card) {
PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser()); ReaderEvent ret = new ReaderEvent(Calendar.getInstance(), card, reader);
return createReaderEvent(readerIdent, card); Integer gamepoints = reader.getGamepoints();
} if (gamepoints > 0 && card != null) {
int awardedCount = 0;
private ReaderEvent createReaderEvent(String readerIdent, PrintedCard card) { for (ReaderEvent oldRe : reader.getEvents()) {
if (oldRe.getGamePoint() > 0)
{
++awardedCount;
LanEvent ev = eventbean.getCurrentEvent(); // User has been already awarded points from this reader.
// Not awarding again...
if (oldRe.getPrintedCard().equals(card)) {
gamepoints = 0;
break;
}
}
}
// if points can be awarded only limited times...
if (reader.getMaxEvents() > 0 && reader.getMaxEvents() > awardedCount) {
gamepoints = 0;
}
Reader reader = readerfacade.findOrCreateByIdent(ev, readerIdent);
logger.debug("Creating new readerevent for reader {} and events {}", reader, reader.getMaxEvents());
logger.debug("maxevents for reder {}. readerevents at the moment {}", reader.getMaxEvents(), reader.getEvents().size());
if (reader.getMaxEvents() > 0 && reader.getMaxEvents() <= reader.getEvents().size()) {
logger.debug("Max events {} found. returning null");
return null;
} }
if (reader.getGamepoints() > 0 && card.getUser() != null) {
logger.debug("Checking if user has been here");
for (ReaderEvent oldRe : card.getReaderEvents()) { ret.setGamePoint(gamepoints);
if (oldRe.getReader().getId().equals(reader.getId())) {
logger.debug("Found already an event for user! returning null");
return null;
}
}
}
ReaderEvent ret = new ReaderEvent(Calendar.getInstance(), card, reader);
ret.setGamePoint(reader.getGamepoints());
ret.setReader(reader);
reader.getEvents().add(ret); reader.getEvents().add(ret);
card.getReaderEvents().add(ret); if (card != null)
cardfacade.merge(card); {
card.getReaderEvents().add(ret);
}
return ret; return ret;
} }
@Override @Override
public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) { public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) {
Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
card = cardtemplatebean.setRfidUid(tag, card); card = cardtemplatebean.setRfidUid(tag, card);
return createReaderEvent(readerIdent, card); return createReaderEvent(reader, card);
} }
@Override @Override
@RolesAllowed("GAME/EXECUTE") public List<Reader> getReaders() {
public ReaderEvent merge(ReaderEvent e) { return readerfacade.findAllForEvent();
return readerEventFacade.merge(e);
} }
@Override
public List<ReaderEvent> getReaderEvents(Integer readerId) {
Reader reader = readerfacade.find(readerId);
return readerEventFacade.findLastEvents(reader, 20);
}
} }
package fi.insomnia.bortal.beans;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
@Singleton
@LocalBean
public class RfidContainerBean implements RfidContainerBeanLocal {
// private static final Logger logger =
// LoggerFactory.getLogger(RfidContainerBean.class);
//
// // -------------- EventId ---- Reader Id --- Rfidevent
// private final Map<Integer, Map<Integer, List<RfidEvent>>> events =
// Collections.synchronizedMap(new HashMap<Integer, Map<Integer,
// List<RfidEvent>>>());
//
// @EJB
// private EventBeanLocal evbean;
//
// public synchronized RfidEvent foundTag(Reader reader, String tag) {
// LanEvent currEv = evbean.getCurrentEvent();
//
// if (!events.containsKey(currEv.getId())) {
// events.put(currEv.getId(), new HashMap<Integer, List<RfidEvent>>());
// }
//
// Map<Integer, List<RfidEvent>> eventMap = events.get(currEv.getId());
//
// if (!eventMap.containsKey(reader)) {
// eventMap.put(reader.getId(), new LinkedList<RfidEvent>());
// }
//
// List<RfidEvent> readerevents = eventMap.get(reader);
// while (readerevents.size() > 20) {
// readerevents.remove(readerevents.size() - 1);
// logger.debug("Cleaning readerevents from reader {}", reader);
// }
//
// RfidEvent ret = null;
// if (readerevents.size() > 0 && readerevents.get(0).getTag().equals(tag))
// {
// ret = readerevents.get(0);
// readerevents.get(0).seen();
// } else {
// ret = new RfidEvent(reader, tag);
// readerevents.add(0, ret);
// }
//
// return ret;
// }
//
// @Override
// public List<RfidEvent> getReaderEvents(String readername) {
// LanEvent currEv = evbean.getCurrentEvent();
// List<RfidEvent> ret = null;
// if (events.containsKey(currEv.getId())) {
// ret = events.get(currEv.getId()).get(readername);
// }
// return ret;
//
// }
}
package fi.insomnia.bortal.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.enums.EventStatusEnum;
import fi.insomnia.bortal.model.EventStatus;
import fi.insomnia.bortal.model.EventStatus_;
@Stateless
@LocalBean
public class EventStatusFacade extends GenericFacade<Integer, EventStatus> {
@PersistenceContext
private EntityManager em;
public EventStatusFacade() {
super(EventStatus.class);
}
@Override
protected EntityManager getEm() {
return em;
}
public EventStatus findEventStatus(EventStatusEnum eventStatusEnum) {
// @NamedQuery(name = "EventStatus.findByStatusName", query =
// "SELECT e FROM EventStatus e WHERE e.name = :name") })
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<EventStatus> cq = cb.createQuery(EventStatus.class);
Root<EventStatus> root = cq.from(EventStatus.class);
cq.where(cb.equal(root.get(EventStatus_.name), eventStatusEnum));
// TypedQuery<EventStatus> q =
// em.createNamedQuery("EventStatus.findByStatusName",
// EventStatus.class);
// q.setParameter("name", eventStatusEnum.name());
return getSingleNullableResult(em.createQuery(cq));
}
}
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.ReaderEvent_;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -23,4 +31,16 @@ public class ReaderEventFacade extends GenericFacade<Integer, ReaderEvent> { ...@@ -23,4 +31,16 @@ public class ReaderEventFacade extends GenericFacade<Integer, ReaderEvent> {
return em; return em;
} }
public List<ReaderEvent> findLastEvents(Reader reader, int count) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ReaderEvent> cq = cb.createQuery(ReaderEvent.class);
Root<ReaderEvent> root = cq.from(ReaderEvent.class);
cq.where(cb.equal(root.get(ReaderEvent_.reader), reader));
cq.orderBy(cb.desc(root.get(ReaderEvent_.time)));
TypedQuery<ReaderEvent> q = em.createQuery(cq);
q.setMaxResults(count);
return q.getResultList();
}
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
...@@ -9,6 +12,7 @@ import javax.persistence.criteria.CriteriaBuilder; ...@@ -9,6 +12,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.Reader_; import fi.insomnia.bortal.model.Reader_;
...@@ -20,6 +24,9 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> { ...@@ -20,6 +24,9 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@EJB
private EventBeanLocal eventbean;
public ReaderFacade() { public ReaderFacade() {
super(Reader.class); super(Reader.class);
} }
...@@ -44,10 +51,11 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> { ...@@ -44,10 +51,11 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> {
return getSingleNullableResult(q); return getSingleNullableResult(q);
} }
public Reader findOrCreateByIdent(LanEvent ev, String ident) { public Reader findOrCreateByIdent(String ident) {
Reader ret = findByIdent(ev, ident); LanEvent event = eventbean.getCurrentEvent();
Reader ret = findByIdent(event, ident);
if (ret == null) { if (ret == null) {
ret = createIdent(this, ev, ident); ret = createIdent(this, event, ident);
} }
return ret; return ret;
} }
...@@ -61,4 +69,12 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> { ...@@ -61,4 +69,12 @@ public class ReaderFacade extends GenericFacade<Integer, Reader> {
} }
return ret; return ret;
} }
public List<Reader> findAllForEvent() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Reader> cq = cb.createQuery(Reader.class);
Root<Reader> root = cq.from(Reader.class);
cq.where(cb.equal(root.get(Reader_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
} }
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface BootstrapBeanLocal {
void saneDefaults();
}
...@@ -5,11 +5,12 @@ import java.util.List; ...@@ -5,11 +5,12 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.EventOrganiser; import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
@Local @Local
public interface EventOrganiserBeanLocal { public interface EventOrganiserBeanLocal {
void save(EventOrganiser eventorg) throws PermissionDeniedException; void save(EventOrganiser eventorg);
List<EventOrganiser> getEventOrganisers(); List<EventOrganiser> getEventOrganisers();
...@@ -17,4 +18,6 @@ public interface EventOrganiserBeanLocal { ...@@ -17,4 +18,6 @@ public interface EventOrganiserBeanLocal {
EventOrganiser find(Integer orgId); EventOrganiser find(Integer orgId);
LanEvent findEvent(Integer eventid);
} }
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.model.EventStatus;
import javax.ejb.Local;
/**
*
* @author tuukka
*/
@Local
public interface EventStatusBeanLocal {
public EventStatus findOrCreateDefaultEventStatus();
}
...@@ -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);
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
@Local @Local
...@@ -11,10 +13,14 @@ public interface ReaderBeanLocal { ...@@ -11,10 +13,14 @@ public interface ReaderBeanLocal {
ReaderEvent checkTag(String reader, String tag, String hash); ReaderEvent checkTag(String reader, String tag, String hash);
ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException, PermissionDeniedException; // WAT!
// ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String
// placecode) throws BortalCatchableException, PermissionDeniedException;
ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card); ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card);
ReaderEvent merge(ReaderEvent e); List<Reader> getReaders();
List<ReaderEvent> getReaderEvents(Integer readerId);
} }
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface RfidContainerBeanLocal {
// List<RfidEvent> getReaderEvents(String readername);
}
...@@ -33,6 +33,17 @@ ...@@ -33,6 +33,17 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.ActionLogMessage</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-200</entity-X-Coordinate>
<entity-Y-Coordinate>880</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Bill</entity-name> <entity-name>fi.insomnia.bortal.model.Bill</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
...@@ -66,17 +77,6 @@ ...@@ -66,17 +77,6 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.EventStatus</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>364</entity-X-Coordinate>
<entity-Y-Coordinate>580</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CompoEntryParticipant</entity-name> <entity-name>fi.insomnia.bortal.model.CompoEntryParticipant</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
...@@ -132,6 +132,17 @@ ...@@ -132,6 +132,17 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.Menuitem</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-161</entity-X-Coordinate>
<entity-Y-Coordinate>1545</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CompoEntry</entity-name> <entity-name>fi.insomnia.bortal.model.CompoEntry</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
...@@ -146,8 +157,8 @@ ...@@ -146,8 +157,8 @@
<entity-name>fi.insomnia.bortal.model.ReaderEvent</entity-name> <entity-name>fi.insomnia.bortal.model.ReaderEvent</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>364</entity-X-Coordinate> <entity-X-Coordinate>302</entity-X-Coordinate>
<entity-Y-Coordinate>1696</entity-Y-Coordinate> <entity-Y-Coordinate>1698</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
...@@ -198,6 +209,17 @@ ...@@ -198,6 +209,17 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.MenuNavigation</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-207</entity-X-Coordinate>
<entity-Y-Coordinate>1409</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.LanEvent</entity-name> <entity-name>fi.insomnia.bortal.model.LanEvent</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
...@@ -244,7 +266,7 @@ ...@@ -244,7 +266,7 @@
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.Reader</entity-name> <entity-name>fi.insomnia.bortal.model.Reader</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>268</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>413</entity-X-Coordinate> <entity-X-Coordinate>413</entity-X-Coordinate>
<entity-Y-Coordinate>1877</entity-Y-Coordinate> <entity-Y-Coordinate>1877</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
...@@ -267,8 +289,8 @@ ...@@ -267,8 +289,8 @@
<entity-name>fi.insomnia.bortal.model.Location</entity-name> <entity-name>fi.insomnia.bortal.model.Location</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>194</entity-X-Coordinate> <entity-X-Coordinate>63</entity-X-Coordinate>
<entity-Y-Coordinate>1841</entity-Y-Coordinate> <entity-Y-Coordinate>1712</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
...@@ -286,6 +308,28 @@ ...@@ -286,6 +308,28 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.PageContent</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-38</entity-X-Coordinate>
<entity-Y-Coordinate>1478</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.SitePage</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-65</entity-X-Coordinate>
<entity-Y-Coordinate>1281</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PossibleAnswer</entity-name> <entity-name>fi.insomnia.bortal.model.PossibleAnswer</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
...@@ -343,7 +387,7 @@ ...@@ -343,7 +387,7 @@
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name> <entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>208</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>663</entity-X-Coordinate> <entity-X-Coordinate>663</entity-X-Coordinate>
<entity-Y-Coordinate>1150</entity-Y-Coordinate> <entity-Y-Coordinate>1150</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
...@@ -355,8 +399,8 @@ ...@@ -355,8 +399,8 @@
<entity-name>fi.insomnia.bortal.model.CardTemplate</entity-name> <entity-name>fi.insomnia.bortal.model.CardTemplate</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>156</entity-X-Coordinate> <entity-X-Coordinate>40</entity-X-Coordinate>
<entity-Y-Coordinate>1205</entity-Y-Coordinate> <entity-Y-Coordinate>1091</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
...@@ -374,22 +418,22 @@ ...@@ -374,22 +418,22 @@
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.User</entity-name> <entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>1132</entity-X-Coordinate> <entity-X-Coordinate>1236</entity-X-Coordinate>
<entity-Y-Coordinate>994</entity-Y-Coordinate> <entity-Y-Coordinate>1323</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
</entity> </entity>
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name> <entity-name>fi.insomnia.bortal.model.User</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>1236</entity-X-Coordinate> <entity-X-Coordinate>1132</entity-X-Coordinate>
<entity-Y-Coordinate>1323</entity-Y-Coordinate> <entity-Y-Coordinate>994</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
......
package fi.insomnia.bortal.model;
import java.io.IOException;
import java.io.Serializable;
import java.io.StringReader;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.bouncycastle.openssl.PEMReader;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
/**
* Entity implementation class for Entity: Certificate
*
*/
@Entity
@Table(name = "certificate")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Certificate extends GenericEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "common_name")
private String commonName;
private String certificate;
public Certificate() {
super();
}
public String getCommonName() {
return this.commonName;
}
public void setCommonName(String commonName) {
this.commonName = commonName;
}
public String getCertificate() {
return this.certificate;
}
public X509Certificate getX509Certificate() throws CertificateException, IOException {
StringReader sr = new StringReader(this.certificate);
PEMReader pemReader = new PEMReader(sr);
X509Certificate cert = (X509Certificate) pemReader.readObject();
return cert;
}
public void setCertificate(String certificate) {
this.certificate = certificate;
}
public void set509Certificate(X509Certificate cert) {
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.model;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import fi.insomnia.bortal.enums.EventStatusEnum;
/**
*
*/
@Entity
@Table(name = "event_status")
// , uniqueConstraints = { @UniqueConstraint(columnNames = { "status_name" }) })
// @NamedQueries({
// @NamedQuery(name = "EventStatus.findAll", query =
// "SELECT e FROM EventStatus e"),
// @NamedQuery(name = "EventStatus.findByStatusName", query =
// "SELECT e FROM EventStatus e WHERE e.name = :name") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class EventStatus extends GenericEntity {
private static final long serialVersionUID = 1L;
@Column(name = "status_name", nullable = false, unique = true)
@Enumerated(EnumType.STRING)
private EventStatusEnum name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "status")
private List<LanEvent> events;
public EventStatus() {
super();
};
public EventStatus(EventStatusEnum name) {
super();
this.name = name;
}
public EventStatusEnum getName() {
return name;
}
public void setName(EventStatusEnum statusName) {
this.name = statusName;
}
public List<LanEvent> getEvents() {
return events;
}
public void setEvents(List<LanEvent> eventList) {
this.events = eventList;
}
}
...@@ -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;
......
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.util.Calendar; import java.util.Calendar;
...@@ -10,6 +6,8 @@ import java.util.List; ...@@ -10,6 +6,8 @@ import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
...@@ -21,25 +19,17 @@ import javax.persistence.TemporalType; ...@@ -21,25 +19,17 @@ import javax.persistence.TemporalType;
import org.eclipse.persistence.annotations.OptimisticLocking; import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType; import org.eclipse.persistence.annotations.OptimisticLockingType;
import fi.insomnia.bortal.enums.EventStatus;
import fi.insomnia.bortal.model.salespoint.Salespoint;
/** /**
* *
*/ */
@Entity @Entity
@Table(name = "events") @Table(name = "events")
// @NamedQueries({
// @NamedQuery(name = "LanEvent.findAll", query = "SELECT e FROM LanEvent e"),
// @NamedQuery(name = "LanEvent.findByStartTime", query =
// "SELECT e FROM LanEvent e WHERE e.startTime = :startTime"),
// @NamedQuery(name = "LanEvent.findByEndTime", query =
// "SELECT e FROM LanEvent e WHERE e.endTime = :endTime"),
// @NamedQuery(name = "LanEvent.findByName", query =
// "SELECT e FROM LanEvent e WHERE e.name = :name") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class LanEvent extends GenericEntity { public class LanEvent extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 179811358211927126L; private static final long serialVersionUID = 179811358211927126L;
@Column(name = "start_time") @Column(name = "start_time")
...@@ -71,9 +61,9 @@ public class LanEvent extends GenericEntity { ...@@ -71,9 +61,9 @@ public class LanEvent extends GenericEntity {
@ManyToOne(optional = false) @ManyToOne(optional = false)
private EventOrganiser organiser; private EventOrganiser organiser;
@JoinColumn(name = "event_status_id", referencedColumnName = "id", nullable = false) @Column(name = "status", nullable = false)
@ManyToOne(optional = false) @Enumerated(EnumType.STRING)
private EventStatus status; private EventStatus status = EventStatus.INACTIVE;
@OneToMany(mappedBy = "parentEvent") @OneToMany(mappedBy = "parentEvent")
private List<LogEntry> logEntries; private List<LogEntry> logEntries;
...@@ -103,6 +93,9 @@ public class LanEvent extends GenericEntity { ...@@ -103,6 +93,9 @@ public class LanEvent extends GenericEntity {
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL) @OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<Poll> polls; private List<Poll> polls;
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<Salespoint> salespoints;
public LanEvent() { public LanEvent() {
} }
...@@ -264,4 +257,12 @@ public class LanEvent extends GenericEntity { ...@@ -264,4 +257,12 @@ public class LanEvent extends GenericEntity {
this.polls = polls; this.polls = polls;
} }
public List<Salespoint> getSalespoints() {
return salespoints;
}
public void setSalespoints(List<Salespoint> salespoints) {
this.salespoints = salespoints;
}
} }
...@@ -33,16 +33,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType; ...@@ -33,16 +33,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
@Table(name = "printed_cards", uniqueConstraints = { @Table(name = "printed_cards", uniqueConstraints = {
@UniqueConstraint(columnNames = { "event_id", "rfid_uid", }), @UniqueConstraint(columnNames = { "event_id", "rfid_uid", }),
@UniqueConstraint(columnNames = { "event_id", "barcode" }) }) @UniqueConstraint(columnNames = { "event_id", "barcode" }) })
// @NamedQueries({
// @NamedQuery(name = "PrintedCard.findAll", query =
// "SELECT p FROM PrintedCard p"),
//
// @NamedQuery(name = "PrintedCard.findByPrintTime", query =
// "SELECT p FROM PrintedCard p WHERE p.printTime = :printTime"),
// @NamedQuery(name = "PrintedCard.findByEnabled", query =
// "SELECT p FROM PrintedCard p WHERE p.enabled = :enabled"),
// @NamedQuery(name = "PrintedCard.findByRfidUid", query =
// "SELECT p FROM PrintedCard p WHERE p.rfidUid = :rfidUid") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class PrintedCard extends GenericEntity { public class PrintedCard extends GenericEntity {
...@@ -70,7 +60,7 @@ public class PrintedCard extends GenericEntity { ...@@ -70,7 +60,7 @@ public class PrintedCard extends GenericEntity {
private String rfidUid; private String rfidUid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "printedCard") @OneToMany(cascade = CascadeType.ALL, mappedBy = "printedCard")
private List<ReaderEvent> readerEvents; private List<ReaderEvent> readerEvents = new ArrayList<ReaderEvent>();
@Column(name = "print_count", nullable = false) @Column(name = "print_count", nullable = false)
private int printCount = 0; private int printCount = 0;
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
*/ */
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import static javax.persistence.CascadeType.DETACH;
import static javax.persistence.CascadeType.MERGE;
import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REFRESH;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -13,12 +18,15 @@ import javax.persistence.JoinColumn; ...@@ -13,12 +18,15 @@ import javax.persistence.JoinColumn;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking; import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType; import org.eclipse.persistence.annotations.OptimisticLockingType;
import fi.insomnia.bortal.model.salespoint.SalesEntity;
/** /**
* *
*/ */
...@@ -58,6 +66,9 @@ public class Reader extends GenericEntity { ...@@ -58,6 +66,9 @@ public class Reader extends GenericEntity {
@Column(nullable = false) @Column(nullable = false)
private Integer maxEvents = 0; private Integer maxEvents = 0;
@OneToOne(mappedBy = "reader")
private SalesEntity salesEntity;
/** /**
* *
*/ */
...@@ -83,7 +94,7 @@ public class Reader extends GenericEntity { ...@@ -83,7 +94,7 @@ public class Reader extends GenericEntity {
@Column(name = "map_y") @Column(name = "map_y")
private Integer mapY; private Integer mapY;
@OneToMany(mappedBy = "reader") @OneToMany(mappedBy = "reader", cascade = { PERSIST, MERGE, REFRESH, DETACH })
private List<ReaderEvent> events = new ArrayList<ReaderEvent>(); private List<ReaderEvent> events = new ArrayList<ReaderEvent>();
public String getIdentification() { public String getIdentification() {
...@@ -186,4 +197,12 @@ public class Reader extends GenericEntity { ...@@ -186,4 +197,12 @@ public class Reader extends GenericEntity {
public void setEvent(LanEvent event) { public void setEvent(LanEvent event) {
this.event = event; this.event = event;
} }
public SalesEntity getSalesEntity() {
return salesEntity;
}
public void setSalesEntity(SalesEntity salesEntity) {
this.salesEntity = salesEntity;
}
} }
...@@ -29,13 +29,17 @@ public class ReaderEvent extends GenericEntity { ...@@ -29,13 +29,17 @@ public class ReaderEvent extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar time; private Calendar time;
@Column(name = "event_updated")
@Temporal(TemporalType.TIMESTAMP)
private Calendar updatetime;
@Column(name = "value") @Column(name = "value")
private String value; private String value;
@Column(nullable = false) @Column(nullable = false)
private Integer gamePoint = 0; private Integer gamePoint = 0;
@JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = false, updatable = false) @JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = true, updatable = false)
@ManyToOne(optional = false) @ManyToOne(optional = false)
private PrintedCard printedCard; private PrintedCard printedCard;
...@@ -93,4 +97,34 @@ public class ReaderEvent extends GenericEntity { ...@@ -93,4 +97,34 @@ public class ReaderEvent extends GenericEntity {
return gamePoint; return gamePoint;
} }
public Calendar getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Calendar updatetime) {
this.updatetime = updatetime;
}
public String getSeenSince() {
Calendar comptime = updatetime;
if (comptime == null)
{
comptime = time;
}
long diffSec = (Calendar.getInstance().getTimeInMillis() - comptime.getTimeInMillis()) / 1000;
long secs = diffSec % 60;
long diffMin = diffSec / 60;
long mins = diffMin % 60;
long hours = diffMin / 60;
StringBuilder ret = new StringBuilder();
if (hours > 0) {
ret.append(hours).append(" h ");
}
if (hours > 0 || mins > 0) {
ret.append(mins).append(" min ");
}
ret.append(secs).append(" sec");
return ret.toString();
}
} }
package fi.insomnia.bortal.model.salespoint;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import fi.insomnia.bortal.model.GenericEntity;
import fi.insomnia.bortal.model.Reader;
@Entity
@Table(name = "sales_entity")
public class SalesEntity extends GenericEntity {
private static final long serialVersionUID = -1071792777020210982L;
@Lob
private String certificate;
private String name;
@Lob
private String secret;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private SalesEntityType type;
@OneToOne()
private Reader reader;
@ManyToOne()
@JoinColumn(nullable = false)
private Salespoint point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SalesEntityType getType() {
return type;
}
public void setType(SalesEntityType type) {
this.type = type;
}
public Salespoint getPoint() {
return point;
}
public void setPoint(Salespoint point) {
this.point = point;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getCertificate() {
return certificate;
}
public void setCertificate(String certificate) {
this.certificate = certificate;
}
public Reader getReader() {
return reader;
}
public void setReader(Reader reader) {
this.reader = reader;
}
}
package fi.insomnia.bortal.model.salespoint;
public enum SalesEntityType {
CASHIER, CLIENT
}
package fi.insomnia.bortal.model.salespoint;
import fi.insomnia.bortal.model.GenericEntity_;
import fi.insomnia.bortal.model.Reader;
import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-04-08T02:57:31.378+0300")
@StaticMetamodel(SalesEntity.class)
public class SalesEntity_ extends GenericEntity_ {
public static volatile SingularAttribute<SalesEntity, String> certificate;
public static volatile SingularAttribute<SalesEntity, String> name;
public static volatile SingularAttribute<SalesEntity, SalesEntityType> type;
public static volatile SingularAttribute<SalesEntity, Salespoint> point;
public static volatile SingularAttribute<SalesEntity, String> secret;
public static volatile SingularAttribute<SalesEntity, Reader> reader;
}
package fi.insomnia.bortal.model.salespoint;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.eclipse.persistence.annotations.PrivateOwned;
import fi.insomnia.bortal.model.GenericEntity;
import fi.insomnia.bortal.model.LanEvent;
@Entity
@Table(name = "salespoint")
public class Salespoint extends GenericEntity {
private static final long serialVersionUID = -4659193907997736818L;
@ManyToOne
@JoinColumn(nullable = false, updatable = false)
private LanEvent event;
@Column(nullable = false)
private String name;
@Lob
private String description;
@OneToMany(mappedBy = "point", cascade = CascadeType.ALL)
@PrivateOwned
private List<SalesEntity> entities;
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<SalesEntity> getEntities() {
return entities;
}
public void setEntities(List<SalesEntity> entities) {
this.entities = entities;
}
}
package fi.insomnia.bortal.model.salespoint;
import fi.insomnia.bortal.model.GenericEntity_;
import fi.insomnia.bortal.model.LanEvent;
import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-04-06T18:38:59.377+0300")
@StaticMetamodel(Salespoint.class)
public class Salespoint_ extends GenericEntity_ {
public static volatile SingularAttribute<Salespoint, LanEvent> event;
public static volatile SingularAttribute<Salespoint, String> name;
public static volatile SingularAttribute<Salespoint, String> description;
public static volatile ListAttribute<Salespoint, SalesEntity> entities;
}
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 6 (MacOS X Default)">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1.2">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>LanBortalTerminalWeb</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="WebContent"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="LanBortalTerminalWeb">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="context-root" value="LanBortalTerminalWeb"/>
<property name="java-output-path" value="/LanBortalTerminalWeb/build/classes"/>
</wb-module>
</project-modules>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish 3.1.2"/>
<fixed facet="wst.jsdt.web"/>
<fixed facet="jst.web"/>
<fixed facet="java"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="sun.facet" version="9"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>fi.insomnia.bortal.terminal.resources.i18n</base-name>
<var>i18n</var>
</resource-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 -->
<!-- Assigned Country codes: -->
<!-- Insomnia: IN (INDIA) -->
<!-- Stream: ST (SAO TOME AND PRINCIPE ) -->
<!-- Vector VE (VENEZUELA, BOLIVARIAN REPUBLIC OF) -->
<locale-config>
<default-locale>fi_FI</default-locale>
<supported-locale>fi_fi_XII</supported-locale>
<supported-locale>en_ST_v7</supported-locale>
</locale-config>
</application>
<factory>
<exception-handler-factory>fi.insomnia.bortal.terminal.exceptions.BortalTerminalExceptionHandlerFactory</exception-handler-factory>
</factory>
</faces-config>
<glassfish-web-app error-url="">
<!--
<security-role-mapping>
<role-name>allusers</role-name>
<group-name>allusers</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>terminal</role-name>
<group-name>terminal</group-name>
</security-role-mapping>
-->
</glassfish-web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/LanBortalTerminalWeb</context-root>
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class java code.</description>
</property>
</jsp-config>
</sun-web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>LanBortalTerminalWeb</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.wtf</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.wtf</url-pattern>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
<!--param-value>Production</param-value -->
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<filter>
<display-name>PrimefacesFileupload</display-name>
<filter-name>PrimeFacesFileupload</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFacesFileupload</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>certificate</realm-name>
</login-config>
<security-constraint>
<display-name>Resource that needs cert auth</display-name>
<web-resource-collection>
<web-resource-name>BortalTerminalWebResource</web-resource-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>*.wtf</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>terminal</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!--
<security-role>
<description>All authenticated users</description>
<role-name>allusers</role-name>
</security-role>
<security-role>
<description>Sales Terminal</description>
<role-name>terminal</role-name>
</security-role>
-->
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref>
</web-app>
\ No newline at end of file
<!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>
<h1>Hurrdurr</h1>
<p>abba #{request.contextPath} beef</p>
<p>foo #{testView5.getDummy()} baz</p>
</h:body>
</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.exceptions;
import java.util.Iterator;
import java.util.Map;
import javax.ejb.AccessLocalException;
import javax.ejb.EJBAccessException;
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;
import fi.insomnia.bortal.beans.PermissionDeniedException;
public class BortalTerminalExceptionHandler extends ExceptionHandlerWrapper {
private static final Logger logger = LoggerFactory
.getLogger(BortalTerminalExceptionHandler.class);
private final ExceptionHandler wrapped;
public BortalTerminalExceptionHandler(ExceptionHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public ExceptionHandler getWrapped() {
return wrapped;
}
@Override
public void handle() throws FacesException {
Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents()
.iterator();
while (i.hasNext()) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event
.getSource();
Throwable t = context.getException();
logger.debug("Found exception! handing it: {}", t.getClass()
.toString());
if (t instanceof ViewExpiredException) {
errorpage(i, t, "viewExpired");
}
Throwable cause = t.getCause();
for (int loop = 0; loop < 20 && cause != null; ++loop) {
logger.debug(
"Cause not null, but {}: {}, checking"
+ cause.getClass(), cause.getMessage());
if (cause instanceof PermissionDeniedException
|| cause instanceof EJBAccessException
|| cause instanceof AccessLocalException) {
logger.debug("Found Permission Denied cause: {}, {}",
cause.getClass(), cause.getMessage());
// errorpage(i, t, "permissionDenied");
}
cause = cause.getCause();
}
}
// 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) {
logger.info("navigating to {} because root exception: {}", navigateTo,
t.getClass());
ViewExpiredException vee = null;
if (t instanceof 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
if (vee != null) {
requestMap.put("currentViewId", vee.getViewId());
}
nav.handleNavigation(fc, null, navigateTo);
fc.renderResponse();
} finally {
i.remove();
}
}
}
package fi.insomnia.bortal.terminal.exceptions;
import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerFactory;
public class BortalTerminalExceptionHandlerFactory extends ExceptionHandlerFactory {
private ExceptionHandlerFactory parent;
public BortalTerminalExceptionHandlerFactory(ExceptionHandlerFactory parent) {
this.parent = parent;
}
@Override
public ExceptionHandler getExceptionHandler() {
ExceptionHandler result = parent.getExceptionHandler();
result = new BortalTerminalExceptionHandler(result);
return result;
}
}
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";
}
}
...@@ -9,7 +9,7 @@ package fi.insomnia.bortal.enums; ...@@ -9,7 +9,7 @@ package fi.insomnia.bortal.enums;
* *
* @author tuukka * @author tuukka
*/ */
public enum EventStatusEnum { public enum EventStatus {
INACTIVE, // Not yet public INACTIVE, // Not yet public
TICKET_SALES, // Site is public with ticket sales TICKET_SALES, // Site is public with ticket sales
PRE_EVENT, // Upcoming event... PRE_EVENT, // Upcoming event...
...@@ -18,11 +18,11 @@ public enum EventStatusEnum { ...@@ -18,11 +18,11 @@ public enum EventStatusEnum {
// cannot be modified. // cannot be modified.
ARCHIVED; // Past events are archived ARCHIVED; // Past events are archived
public static EventStatusEnum getEventStatusEnum(String name) { public static EventStatus getEventStatusEnum(String name) {
return EventStatusEnum.valueOf(name); return EventStatus.valueOf(name);
} }
public static EventStatusEnum getDefaultEventStatusEnum() { public static EventStatus getDefaultEventStatusEnum() {
return INACTIVE; return INACTIVE;
} }
} }
package fi.insomnia.bortal.enums;
@Deprecated
public enum OldRolePermission {
READ, WRITE, EXECUTE
}
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:account="http://java.sun.com/jsf/composite/tools/account" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.account.edit" />
<ui:define name="content">
<tools:canWrite target="ACCOUNT_MANAGEMENT">
<h:form id="placeEdit">
<h:inputHidden value="#{accountView.account.id.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['accountEvent.total']}:" />
<h:outputText value="#{accountView.account.total}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
<h:outputLabel value="#{i18n['accountEvent.quantity']}:" />
<h:inputText value="#{accountView.account.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:inputText>
<h:outputLabel value="#{i18n['accountEvent.unitPrice']}:" />
<h:inputText value="#{accountView.account.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:inputText>
<h:outputLabel value="#{i18n['accountEvent.eventTime']}:" />
<h:inputText value="#{accountView.account.eventTime.time}">
<f:convertDateTime type="both" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['accountEvent.delivered']}:" />
<h:inputText value="#{accountView.account.delivered.time}">
<f:convertDateTime type="both" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['accountEvent.seller']}:" />
<h:outputText value="#{accountView.account.seller.wholeName}">
</h:outputText>
</h:panelGrid>
<h:commandButton rendered="#{sessionHandler.canWrite('ACCOUNT_MANAGEMENT')}" id="commitbtn"
action="#{accountView.merge()}" value="#{i18n['accountEvent.commit']}" />
<br />
<h:commandButton rendered="#{sessionHandler.canWrite('ACCOUNT_MANAGEMENT')}" id="deletebtn"
action="#{accountView.delete()}" value="#{i18n['accountEvent.delete']}" />
</h:form>
<h:dataTable border="0" id="discountlist" value="#{accountView.account.discountInstances}" var="discount">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.percentage']}" />
</f:facet>
<h:outputText value="#{discount.discount.percentage}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.code']}" />
</f:facet>
<h:outputText value="#{discount.discount.code}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.details']}" />
</f:facet>
<h:outputText value="#{discount.discount.details}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.shortdesc']}" />
</f:facet>
<h:outputText value="#{discount.discount.shortdesc}" />
</h:column>
</h:dataTable>
</tools:canWrite>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{authView.executeLogin}" /> <f:event type="preRenderView" listener="#{authView.executeLogin}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.auth.login" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['login.login']}</h1> <h1>#{i18n['login.login']}</h1>
......
...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/cditools/login" ...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/cditools/login"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.loginerror" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['loginerror.header']}</h1> <h1>#{i18n['loginerror.header']}</h1>
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{authView.executeLogin}" /> <f:event type="preRenderView" listener="#{authView.executeLogin}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.auth.login" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['login.login']}</h1> <h1>#{i18n['login.login']}</h1>
</ui:define> </ui:define>
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.logout" />
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{authView.executeLogout}" /> <f:event type="preRenderView" listener="#{authView.executeLogout}" />
</f:metadata> </f:metadata>
......
...@@ -14,7 +14,6 @@ xmlns:c="http://java.sun.com/jsp/jstl/core"> ...@@ -14,7 +14,6 @@ xmlns:c="http://java.sun.com/jsp/jstl/core">
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/${sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/${sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.notauthorized" />
<ui:define name="content"> <ui:define name="content">
<h:outputText value="#{i18n['global.notauthorized'] }" /> <h:outputText value="#{i18n['global.notauthorized'] }" />
</ui:define> </ui:define>
......
...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/tools/login" ...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/tools/login"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.loginerror" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['passwordChanged.header']}</h1> <h1>#{i18n['passwordChanged.header']}</h1>
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/${sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/${sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.resetPassword" />
<f:metadata> <f:metadata>
<f:viewParam name="id" value="#{pwdResetView.id}" /> <f:viewParam name="id" value="#{pwdResetView.id}" />
<f:viewParam name="hash" value="#{pwdResetView.hash}" /> <f:viewParam name="hash" value="#{pwdResetView.hash}" />
......
...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/tools/login" ...@@ -9,7 +9,6 @@ xmlns:login="http://java.sun.com/jsf/composite/tools/login"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.loginerror" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['resetmailSent.header']}</h1> <h1>#{i18n['resetmailSent.header']}</h1>
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/${sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/${sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.resetPassword" />
<ui:define name="content"> <ui:define name="content">
<h1><h:outputText value="#{i18n['resetMail.header']}" /></h1> <h1><h:outputText value="#{i18n['resetMail.header']}" /></h1>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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:bills="http://java.sun.com/jsf/composite/tools/bills"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:bills="http://java.sun.com/jsf/composite/tools/bills"
xmlns:f="http://java.sun.com/jsf/core"> xmlns:f="http://java.sun.com/jsf/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.bill.billSummary" /> <f:metadata>
<f:event type="preRenderView" listener="#{billListView.initSummaryView}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:dataTable border="0" id="billSummary" value="#{billView.billLineSummary}" var="sumline"> <h:dataTable border="0" id="billSummary" value="#{billListView.billsummary}" var="sumline">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['product.name']}" /> <h:outputText value="${i18n['product.name']}" />
</f:facet> </f:facet>
<h:outputText value="#{sumline.name}" /> <h:outputText value="#{sumline.name}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['product.boughtTotal']}" /> <h:outputText value="${i18n['product.boughtTotal']}" />
</f:facet> </f:facet>
<h:outputText value="#{sumline.total}" > <h:outputText value="#{sumline.total}">
<f:convertNumber /> <f:convertNumber />
</h:outputText> </h:outputText>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['product.paid']}" /> <h:outputText value="${i18n['product.paid']}" />
</f:facet> </f:facet>
<h:outputText value="#{sumline.paid}" > <h:outputText value="#{sumline.paid}">
<f:convertNumber /> <f:convertNumber />
</h:outputText> </h:outputText>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
<f:viewParam name="billid" value="#{billEditView.billid}" /> <f:viewParam name="billid" value="#{billEditView.billid}" />
<f:event type="preRenderView" listener="#{billEditView.initView}" /> <f:event type="preRenderView" listener="#{billEditView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.bill.edit" />
<ui:define name="content"> <ui:define name="content">
<h:form id="billform"> <h:form id="billform">
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
<f:viewParam name="userid" value="#{userView.userid}" /> <f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{billListView.initUsersBills}" /> <f:event type="preRenderView" listener="#{billListView.initUsersBills}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.bill.list" />
<ui:define name="content"> <ui:define name="content">
<bills:list /> <bills:list />
</ui:define> </ui:define>
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{billListView.initAllBills}" /> <f:event type="preRenderView" listener="#{billListView.initAllBills}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.bill.listAll" />
<ui:define name="content"> <ui:define name="content">
<bills:list /> <bills:list />
</ui:define> </ui:define>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:bills="http://java.sun.com/jsf/composite/tools/bills"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.bill.placemap" />
<ui:define name="content">
<img class="imgcenter"
src="#{request.contextPath}/resources/style/insomnia1/konepaikat.png"
alt="Konepaikat" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" />
<ui:define name="content">
<h:form id="orgform">
<h:inputHidden value="#{eventView.eventmap.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventmap.name']}:" /><h:inputText value="#{eventView.eventmap.name}" />
<h:commandButton id="commitbtn" action="#{eventView.saveMap()}" value="#{i18n['eventmap.save']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['eventmap.places']}</h2>
<h:form id="eventmapPlacelist">
<h:dataTable border="1" id="places" value="#{eventView.mapPlaces}" var="place">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.name']}" />
</f:facet>
<h:outputText value="#{place.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.description']}" />
</f:facet>
<h:outputText value="#{place.description}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.details']}" />
</f:facet>
<h:outputText value="#{place.details}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.mapX']}" />
</f:facet>
<h:outputText value="#{place.mapX}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.mapY']}" />
</f:facet>
<h:outputText value="#{place.mapY}" />
</h:column>
<h:column >
<h:commandButton action="#{eventView.editPlace()}" value="#{i18n['place.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" />
<ui:define name="content">
<h:form id="orgform">
<h:inputHidden id="#{eventView.eventmap.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventmap.name']}:" /><h:inputText value="#{eventView.eventmap.name}" />
<h:commandButton id="commitbtn" action="#{eventView.saveMap()}" value="#{i18n['eventmap.save']}" />
</h:panelGrid>
</h:form>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content">
<h:form>
<h:dataTable border="1" id="maps" value="#{eventView.eventmaps}" var="maps">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['eventmap.name']}" />
</f:facet>
<h:outputText value="#{maps.name}" />
</h:column>
<h:column >
<h:commandButton action="#{eventView.editMap()}" value="#{i18n['eventmap.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:h="http://java.sun.com/jsf/html" <h:body>
xmlns:f="http://java.sun.com/jsf/core" <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" <ui:param name="thispage" value="page.eventorg.create" />
xmlns:c="http://java.sun.com/jsp/jstl/core"> <f:metadata>
<h:body> <f:event type="preRenderView" listener="#{eventorgView.initCreate}" />
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> </f:metadata>
<ui:param name="thispage" value="page.eventorg.create" />
<ui:define name="content"> <ui:define name="content">
<h:form id="orgform"> <h:form id="orgform">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" /><h:inputText value="#{eventorgView.createorgname}" /> <h:outputLabel value="#{i18n['eventorg.organisation']}:" />
<h:commandButton id="commitbtn" action="#{eventorgView.create()}" value="#{i18n['eventorg.create']}" /> <h:inputText value="#{eventorgView.createorgname}" />
</h:panelGrid> <h:commandButton id="commitbtn" action="#{eventorgView.create()}" value="#{i18n['eventorg.create']}" />
</h:form> </h:panelGrid>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" /> <ui:param name="thispage" value="page.eventorg.edit" />
<f:metadata>
<f:viewParam name="id" value="#{eventorgView.orgId}" />
<f:event type="preRenderView" listener="#{eventorgView.initEdit}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:form id="orgform"> <h:form id="orgform">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" /> <h:outputLabel value="#{i18n['eventorg.organisation']}:" />
<h:inputText value="#{eventorgView.eventorg.organisation}" /> <h:inputText value="#{eventorgView.eventorg.organisation}" />
<h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" /> <h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" />
<h:inputText value="#{eventorgView.eventorg.bundleCountry}" /> <h:inputText value="#{eventorgView.eventorg.bundleCountry}" />
<h:outputLabel value="#{i18n['eventorg.billAddress1']}:" /> <h:outputLabel value="#{i18n['eventorg.billAddress1']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress1}" /> <h:inputText value="#{eventorgView.eventorg.billAddress1}" />
<h:outputLabel value="#{i18n['eventorg.billAddress2']}:" /> <h:outputLabel value="#{i18n['eventorg.billAddress2']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress2}" /> <h:inputText value="#{eventorgView.eventorg.billAddress2}" />
<h:outputLabel value="#{i18n['eventorg.billAddress3']}:" /> <h:outputLabel value="#{i18n['eventorg.billAddress3']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress3}" /> <h:inputText value="#{eventorgView.eventorg.billAddress3}" />
<h:outputLabel value="#{i18n['eventorg.billAddress4']}:" /> <h:outputLabel value="#{i18n['eventorg.billAddress4']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress4}" /> <h:inputText value="#{eventorgView.eventorg.billAddress4}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" /> <h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber1}" /> <h:inputText value="#{eventorgView.eventorg.bankNumber1}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" /> <h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber2}" /> <h:inputText value="#{eventorgView.eventorg.bankNumber2}" />
<h:outputLabel value="#{i18n['eventorg.bankName1']}:" /> <h:outputLabel value="#{i18n['eventorg.bankName1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName1}" /> <h:inputText value="#{eventorgView.eventorg.bankName1}" />
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" /> <h:outputLabel value="#{i18n['eventorg.bankName2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName2}" /> <h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" /> <h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
<h2>#{i18n['eventorg.createevent']}</h2> <h2>#{i18n['eventorg.createevent']}</h2>
<h:form id="createevent"> <h:form id="createevent">
<h:outputLabel for="createEventName" value="#{i18n['event.name']}" /> <h:outputLabel for="createEventName" value="#{i18n['event.name']}" />
<h:inputText id="createEventName" value="#{eventorgView.eventname}" /> <h:inputText id="createEventName" value="#{eventorgView.eventname}" />
<h:commandButton action="#{eventorgView.createEvent()}" value="#{i18n['eventorg.createEvent']}" /> <h:commandButton action="#{eventorgView.createEvent()}" value="#{i18n['eventorg.createEvent']}" />
</h:form> </h:form>
<h2>#{i18n['eventorg.events']}</h2> <h2>#{i18n['eventorg.events']}</h2>
<h:form id="orgsEventlist"> <h:dataTable border="1" id="org" value="#{eventorgView.eventorg.events}" var="event">
<h:dataTable border="1" id="org" value="#{eventorgView.orgsEvents}" var="event"> <h:column>
<h:column> <f:facet name="header">
<f:facet name="header"> <h:outputText value="${i18n['event.name']}" />
<h:outputText value="${i18n['event.name']}" /> </f:facet>
</f:facet> <h:outputText value="#{event.name}" />
<h:outputText value="#{event.name}" /> </h:column>
</h:column> <h:column>
<h:column> <h:link outcome="/eventorg/editEvent" value="#{i18n['event.edit']}">
<h:commandButton action="#{eventorgView.editEvent()}" value="#{i18n['eventorg.editEvent']}" /> <f:param name="eventid" value="#{event.id}" />
</h:column> </h:link>
</h:column>
</h:dataTable>
</h:form> </h:dataTable>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:h="http://java.sun.com/jsf/html" <h:body>
xmlns:f="http://java.sun.com/jsf/core" <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" <f:metadata>
xmlns:c="http://java.sun.com/jsp/jstl/core"> <f:viewParam name="eventid" value="#{eventorgView.eventid}" />
<h:body> <f:event type="preRenderView" listener="#{eventorgView.initEditEvent}" />
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> </f:metadata>
<ui:param name="thispage" value="page.eventorg.editEvent" />
<ui:define name="content"> <ui:define name="content">
<h:messages /> <h:form id="orgform">
<h:form id="orgform"> <h:panelGrid columns="2">
<h:inputHidden value="#{eventorgView.event.id}" /> <h:outputLabel value="#{i18n['event.name']}:" />
<h:panelGrid columns="2"> <h:inputText value="#{eventorgView.event.name}" />
<h:outputLabel value="#{i18n['event.name']}:" /><h:inputText value="#{eventorgView.event.name}" />
<h:outputLabel value="#{i18n['event.referer']}:" /><h:inputText value="#{eventorgView.event.referer}" /> <h:outputLabel value="#{i18n['event.referer']}:" />
<h:outputLabel value="#{i18n['event.referenceNumberBase']}:" /><h:inputText value="#{eventorgView.event.referenceNumberBase}" /> <h:inputText value="#{eventorgView.event.referer}" />
<h:outputLabel value="#{i18n['event.nextBillNumber']}:" /><h:inputText value="#{eventorgView.event.nextBillNumber}" />
<h:outputLabel value="#{i18n['event.startTime']}:" /> <h:outputLabel value="#{i18n['event.referenceNumberBase']}:" />
<h:inputText value="#{eventorgView.event.startTime}" > <h:inputText value="#{eventorgView.event.referenceNumberBase}" />
<f:convertDateTime />
</h:inputText> <h:outputLabel value="#{i18n['event.nextBillNumber']}:" />
<h:outputLabel value="#{i18n['event.endTime']}:" /> <h:inputText value="#{eventorgView.event.nextBillNumber}" />
<h:inputText value="#{eventorgView.event.endTime}" >
<f:convertDateTime /> <h:outputLabel value="#{i18n['event.startTime']}:" />
</h:inputText> <h:inputText value="#{eventorgView.event.startTime}">
<h:outputLabel value="#{i18n['event.defaultRole']}:" /> <f:convertDateTime />
</h:inputText>
<h:selectOneMenu converter="#{roleConverter}" value="#{eventorgView.event.defaultRole}" >
<f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.eventsRolelist}" /> <h:outputLabel value="#{i18n['event.endTime']}:" />
</h:selectOneMenu> <h:inputText value="#{eventorgView.event.endTime}">
<f:convertDateTime />
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['event.save']}" /> </h:inputText>
</h:panelGrid> <h:outputLabel value="#{i18n['event.defaultRole']}:" />
</h:form>
<h:selectOneMenu converter="#{roleConverter}" value="#{eventorgView.event.defaultRole}">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.event.roles}" />
</h:selectOneMenu>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['event.save']}" />
</h:panelGrid>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:h="http://java.sun.com/jsf/html" <h:body>
xmlns:f="http://java.sun.com/jsf/core" <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" <f:metadata>
xmlns:c="http://java.sun.com/jsp/jstl/core"> <f:event type="preRenderView" listener="#{eventorgView.initListView}" />
<h:body> </f:metadata>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form>
<h:dataTable border="1" id="eventorgs" value="#{eventorgView.organisations}" var="eventorg"> <h:dataTable border="1" id="eventorgs" value="#{eventorgView.organisations}" var="eventorg">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['eventorganiser.name']}" /> <h:outputText value="${i18n['eventorganiser.name']}" />
</f:facet> </f:facet>
<h:outputText value="#{eventorg.organisation}" /> <h:outputText value="#{eventorg.organisation}" />
</h:column> </h:column>
<h:column > <h:column>
<h:commandButton action="#{eventorgView.edit()}" value="#{i18n['eventorg.edit']}" /> <h:link outcome="/eventorg/edit" value="#{i18n['eventorg.edit']}">
</h:column> <f:param name="id" value="#{eventorg.id}" />
</h:link>
</h:dataTable> </h:column>
</h:dataTable>
</h:form> </h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.role.edit" /> <f:metadata>
<f:event type="preRenderView" listener="#{mapManageView.initCreate}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputText value="#{i18n['map.name']}" /> <h:outputText value="#{i18n['map.name']}" />
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
<h:commandButton id="createrole" value="#{i18n['map.create']}" action="#{mapManageView.createMap}" /> <h:commandButton id="createrole" value="#{i18n['map.create']}" action="#{mapManageView.createMap}" />
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:news="http://java.sun.com/jsf/composite/cditools/pages" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
xmlns:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata> <f:metadata>
...@@ -18,7 +15,7 @@ ...@@ -18,7 +15,7 @@
<h:outputScript target="head" library="script" name="jquery.min.js" /> <h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="script" name="textinputs_jquery.js" /> <h:outputScript target="head" library="script" name="textinputs_jquery.js" />
<h:button onclick="var sel = $('#newsform:editor').getSelection(); alert(sel.start +', ' + sel.end);" value="Click me"/> <h:button onclick="var sel = $('#newsform:editor').getSelection(); alert(sel.start +', ' + sel.end);" value="Click me" />
<h:form id="newsform"> <h:form id="newsform">
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core">
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{siteListView.initView}" /> <f:event type="preRenderView" listener="#{newsListView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.create" /> <ui:param name="thispage" value="page.user.create" />
...@@ -18,7 +16,7 @@ ...@@ -18,7 +16,7 @@
<h:dataTable styleClass="bordertable" id="user" value="#{newsListView.newsgroups}" var="newsgroup"> <h:dataTable styleClass="bordertable" id="user" value="#{newsListView.newsgroups}" var="newsgroup">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
ID #
</f:facet> </f:facet>
<h:outputText value="#{newsgroup.id}" /> <h:outputText value="#{newsgroup.id}" />
</h:column> </h:column>
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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" <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:composite="http://java.sun.com/jsf/composite"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface> <composite:interface>
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['readerevent.']}" />
</f:facet>
<h:outputText rendered="#{!empty event.printedCard}" id="cardtag" value="#{event.printedCard.rfidUid}" />
<h:outputText rendered="#{empty event.printedCard}" id="newtag" value="#{event.value}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.user']}" />
</f:facet>
<h:outputText rendered="#{!empty event.printedCard}" value="#{event.printedCard.user.wholeName} (#{event.printedCard.user.nick})" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['readerevent.seenSince']}" />
</f:facet>
<h:outputText value="#{event.seenSince}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['gamepoints']}" />
</f:facet>
<h:outputText value="#{event.gamePoint}" />
</h:column>
<h:column>
<h:commandButton rendered="#{empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.associateToUser']}" />
<h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.shopToUser']}" />
</h:column>
<h:column>
<h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" />
</h:column>
</h:dataTable>
<h1>#{readerView.readername}</h1>
<h:form>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:outputText id="tag" value="#{event.tag}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.user']}" />
</f:facet>
<h:outputText rendered="#{!empty event.event}"
value="#{event.event.printedCard.user.wholeName} (#{event.event.printedCard.user.nick})"
/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:dataTable value="#{event.actions}" var="action">
<h:column>
<h:outputText value="#{action}" />
</h:column>
</h:dataTable>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['readerevent.seenSince']}" />
</f:facet>
<h:outputText value="#{event.seenSince}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['gamepoints']}" />
</f:facet>
<h:outputText value="#{event.event.gamePoint}" />
</h:column>
<h:column>
<h:link rendered="#{empty event.event}" outcome="/rfid/assocToUser" value="#{i18n['readerevent.associateToUser']}">
<f:param value="#{event.tag}" var="tag" />
</h:link>
<h:link rendered="#{!empty event.event}" outcome="/user/edit" value="#{i18n['user.edit']}">
<f:param value="#{event.event.printedCard.user.id}" var="userid" />
</h:link>
<!-- <h:commandButton rendered="#{!empty event.event}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" /> -->
<!-- <h:commandButton rendered="#{empty event.event}" action="#{readerView.selectEvent()}" -->
<!-- value="#{i18n['readerevent.associateToUser']}" -->
<!-- /> -->
<!-- <h:commandButton rendered="#{!empty event.event}" action="#{readerView.selectEvent()}" -->
<!-- value="#{i18n['readerevent.shopToUser']}" -->
<!-- /> -->
</h:column>
<h:column>
</h:column>
</h:dataTable>
</h:form>
</composite:implementation> </composite:implementation>
</html> </html>
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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" <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:composite="http://java.sun.com/jsf/composite"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface> <composite:interface>
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:dataTable border="1" id="reader" value="#{rfidContainer.readers}" var="rr">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['reader.name']}" /> <h:outputText value="${i18n['reader.name']}" />
</f:facet> </f:facet>
<h:outputText value="#{rr}" /> <h:outputText value="#{rr.identification}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.description']}" />
</f:facet>
<h:outputText value="#{rr.description}" />
</h:column>
<h:column>
<h:link outcome="/shop/showReaderEvents" value="#{i18n['reader.select']}"> <h:link outcome="/shop/showReaderEvents" value="#{i18n['reader.select']}">
<f:param value="#{rr}" name="reader"/> <f:param value="#{rr.id}" name="readerId" />
</h:link> </h:link>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</composite:implementation> </composite:implementation>
</html> </html>
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
</h:link> </h:link>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</composite:implementation> </composite:implementation>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" /> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{productShopView.initView}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:outputText rendered="#{!empty readerView.rfidevent.event}" value="#{i18n['rfidevent.empty']}" /> <h:outputText rendered="#{!empty readerView.rfidevent.event}" value="#{i18n['rfidevent.empty']}" />
...@@ -18,8 +21,8 @@ ...@@ -18,8 +21,8 @@
<h:outputText value="#{readerView.rfidevent.tag}" /> <h:outputText value="#{readerView.rfidevent.tag}" />
<h:outputLabel value="#{i18n['rfidevent.insertplacecode']}" /> <h:outputLabel value="#{i18n['rfidevent.insertplacecode']}" />
<h:form id="placecodeform">
<h:form id="placecodeform">
<h:inputText value="#{readerView.placecode}" /> <h:inputText value="#{readerView.placecode}" />
<h:commandButton value="#{i18n['readerView.assocToPlacecode']}" action="#{readerView.assocToPlacecode()}" /> <h:commandButton value="#{i18n['readerView.assocToPlacecode']}" action="#{readerView.assocToPlacecode()}" />
</h:form> </h:form>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:h="http://java.sun.com/jsf/html" <h:body>
xmlns:f="http://java.sun.com/jsf/core" <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" <f:metadata>
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <f:event type="preRenderView" listener="#{readerListDataView.initView}" />
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.shop.readerevents" /> </f:metadata>
<ui:define name="content"> <ui:define name="content">
<shop:readerlist />
</ui:define> <shop:readerlist />
</ui:composition> </ui:define>
</ui:composition>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
...@@ -8,14 +8,12 @@ ...@@ -8,14 +8,12 @@
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.permissionDenied" />
<ui:define name="metadata"> <ui:define name="metadata">
<f:metadata> <f:metadata>
<f:viewParam name="reader" value="#{rfidView.reader}" /> <f:viewParam name="reader" value="#{rfidView.reader}" />
<f:viewParam name="tag" value="#{rfidView.tag}" /> <f:viewParam name="tag" value="#{rfidView.tag}" />
<f:viewParam name="hash" value="#{rfidView.hash}" /> <f:viewParam name="hash" value="#{rfidView.hash}" />
<f:event type="preRenderView" listener="#{rfidView.readTag}" /> <f:event type="preRenderView" listener="#{rfidView.readTag}" />
</f:metadata> </f:metadata>
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
......
<!DOCTYPE html
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.shop.readerevents" />
<f:metadata> <f:metadata>
<f:viewParam name="reader" value="#{readerView.readername}" /> <f:viewParam name="readerId" value="#{readerNameContainer.readerId}" />
<f:event type="preRenderView" listener="#{readerView.initView}" /> <f:event type="preRenderView" listener="#{readerView.initReaderList}" />
</f:metadata><ui:define name="content"> </f:metadata>
<shop:readerevents rendered="#{!empty readerView.readername}" />
<shop:readerlist rendered="#{empty readerView.readername}" />
<ui:define name="content">
<shop:readerevents rendered="#{!empty readerNameContainer.readerId}" />
<shop:readerlist rendered="#{empty readerNameContainer.readerId}" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
> >
<h:body> <h:body>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cdiqtools/user" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" /> <f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content"> <ui:define name="content">
<users:edit creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" /> <users:edit creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -12,11 +12,9 @@ ...@@ -12,11 +12,9 @@
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<!-- <ui:param name="thispage" value="page.user.edit" /> -->
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['user.edit.title']}</h1> <h1>#{i18n['user.edit.title']}</h1>
<users:usertabs tabId="edit" /> <users:usertabs tabId="edit" />
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" /> <users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" />
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<users:edit creating="true" commitaction="#{userView.createUser()}"
commitvalue="#{i18n['user.create']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -19,7 +19,7 @@ import fi.insomnia.bortal.enums.Permission; ...@@ -19,7 +19,7 @@ import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
@ManagedBean(name = "billView_olf") @ManagedBean(name = "billView_old")
@SessionScoped @SessionScoped
public class BillView { public class BillView {
......
...@@ -24,7 +24,7 @@ import fi.insomnia.bortal.model.User; ...@@ -24,7 +24,7 @@ import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.view.helpers.RfidEvent; import fi.insomnia.bortal.view.helpers.RfidEvent;
import fi.insomnia.bortal.web.cdiview.RfidContainer; import fi.insomnia.bortal.web.cdiview.RfidContainer;
@ManagedBean(name = "readerView") @Named(name = "readerView")
@SessionScoped @SessionScoped
public class ReaderView extends GenericView { public class ReaderView extends GenericView {
......
...@@ -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);
......
...@@ -65,6 +65,13 @@ public class MapManageView extends GenericCDIView { ...@@ -65,6 +65,13 @@ public class MapManageView extends GenericCDIView {
private Integer mapId; private Integer mapId;
private List<Product> productlist; private List<Product> productlist;
public void initCreate() {
if (super.requirePermissions(MapPermission.MANAGE_MAPS)) {
super.beginConversation();
}
}
public void initView() { public void initView() {
if (super.requirePermissions(MapPermission.MANAGE_MAPS)) { if (super.requirePermissions(MapPermission.MANAGE_MAPS)) {
map = eventmapBean.find(getMapId()); map = eventmapBean.find(getMapId());
...@@ -102,6 +109,7 @@ public class MapManageView extends GenericCDIView { ...@@ -102,6 +109,7 @@ public class MapManageView extends GenericCDIView {
} }
public String createMap() { public String createMap() {
try { try {
map = eventmapBean.create(getMapname()); map = eventmapBean.create(getMapname());
} catch (PermissionDeniedException e) { } catch (PermissionDeniedException e) {
......
...@@ -61,7 +61,6 @@ public class MenuView { ...@@ -61,7 +61,6 @@ public class MenuView {
submenu = new ArrayList<JsfMenuitem>(); submenu = new ArrayList<JsfMenuitem>();
for (MenuNavigation navi : topPage.getChildren()) { for (MenuNavigation navi : topPage.getChildren()) {
logger.info("Trying to add item {}", navi.getKey());
if (permbean.hasPermission(navi.getPermission())) { if (permbean.hasPermission(navi.getPermission())) {
JsfMenuitem thisitem = new JsfMenuitem(navi); JsfMenuitem thisitem = new JsfMenuitem(navi);
submenu.add(thisitem); submenu.add(thisitem);
...@@ -71,7 +70,6 @@ public class MenuView { ...@@ -71,7 +70,6 @@ public class MenuView {
} }
} }
logger.info("Initialized submenu {}", submenu);
} }
return submenu; return submenu;
...@@ -95,8 +93,7 @@ public class MenuView { ...@@ -95,8 +93,7 @@ public class MenuView {
} }
for (MenuNavigation m : menuitems) { for (MenuNavigation m : menuitems) {
if (m.getPermission() != null && !permbean.hasPermission(m.getPermission())) if (m.getPermission() != null && !permbean.hasPermission(m.getPermission())) {
{
continue; continue;
} }
...@@ -110,7 +107,6 @@ public class MenuView { ...@@ -110,7 +107,6 @@ public class MenuView {
thisitem.setItem(child.getItem()); thisitem.setItem(child.getItem());
break; break;
} }
} }
} }
......
package fi.insomnia.bortal.web.cdiview.organisation; package fi.insomnia.bortal.web.cdiview.organisation;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -10,6 +11,7 @@ import javax.inject.Named; ...@@ -10,6 +11,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.EventOrganiserBeanLocal; import fi.insomnia.bortal.beans.EventOrganiserBeanLocal;
import fi.insomnia.bortal.model.EventOrganiser; import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.LoggedIn; import fi.insomnia.bortal.web.annotations.LoggedIn;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -31,17 +33,32 @@ public class EventOrgView extends GenericCDIView { ...@@ -31,17 +33,32 @@ public class EventOrgView extends GenericCDIView {
private EventOrganiser eventorg; private EventOrganiser eventorg;
private Integer orgId; private Integer orgId;
private String createorgname;
private String eventname;
private List<EventOrganiser> organisations; private List<EventOrganiser> organisations;
public void initEditView() { private Integer eventid;
if (orgId != null) { private LanEvent event;
eventorg = eventorgbean.find(orgId);
} else { public void initCreate()
eventorg = eventbean.getCurrentEvent().getOrganiser(); {
if (super.requirePermissions(user.isSuperadmin()))
{
super.beginConversation();
} }
if (!super.requirePermissions(user.isSuperadmin() || (eventorg.getAdmin().equals(user)))) {
eventorg = null; }
public void initEdit() {
if (super.requirePermissions(user.isSuperadmin() || (eventorg.getAdmin().equals(user))) && eventorg == null) {
if (orgId != null) {
eventorg = eventorgbean.find(orgId);
} else {
eventorg = eventbean.getCurrentEvent().getOrganiser();
}
super.beginConversation();
} }
} }
...@@ -56,6 +73,38 @@ public class EventOrgView extends GenericCDIView { ...@@ -56,6 +73,38 @@ public class EventOrgView extends GenericCDIView {
} }
} }
public void initEditEvent()
{
if (super.requirePermissions(user.isSuperadmin() || (eventbean.getCurrentEvent().getOrganiser().getAdmin().equals(user))) && getEvent() == null)
{
setEvent(eventorgbean.findEvent(eventid));
}
}
public String createEvent()
{
if (eventorg.getEvents() == null) {
eventorg.setEvents(new ArrayList<LanEvent>());
}
setEvent(new LanEvent());
getEvent().setName(eventname);
getEvent().setOrganiser(eventorg);
eventname = "";
eventorg.getEvents().add(getEvent());
eventorgbean.save(eventorg);
return "/eventorg/editEvent";
}
public String create()
{
eventorg = eventorgbean.create(createorgname);
createorgname = "";
return "/eventorg/edit";
}
public void setEventorg(EventOrganiser eventorg) { public void setEventorg(EventOrganiser eventorg) {
this.eventorg = eventorg; this.eventorg = eventorg;
} }
...@@ -88,4 +137,36 @@ public class EventOrgView extends GenericCDIView { ...@@ -88,4 +137,36 @@ public class EventOrgView extends GenericCDIView {
return organisations; return organisations;
} }
public String getCreateorgname() {
return createorgname;
}
public void setCreateorgname(String createorgname) {
this.createorgname = createorgname;
}
public String getEventname() {
return eventname;
}
public void setEventname(String eventname) {
this.eventname = eventname;
}
public Integer getEventid() {
return eventid;
}
public void setEventid(Integer eventid) {
this.eventid = eventid;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
package fi.insomnia.bortal.web.cdiview.shop; package fi.insomnia.bortal.web.cdiview.shop;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -9,6 +10,7 @@ import javax.inject.Inject; ...@@ -9,6 +10,7 @@ import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.BillBeanLocal; import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -35,6 +37,8 @@ public class BillListView extends GenericCDIView { ...@@ -35,6 +37,8 @@ public class BillListView extends GenericCDIView {
private boolean writeBill; private boolean writeBill;
private ArrayList<BillSummary> billsummary;
public void initAllBills() { public void initAllBills() {
if (super.requirePermissions(BillPermission.READ_ALL)) { if (super.requirePermissions(BillPermission.READ_ALL)) {
beginConversation(); beginConversation();
...@@ -43,6 +47,13 @@ public class BillListView extends GenericCDIView { ...@@ -43,6 +47,13 @@ public class BillListView extends GenericCDIView {
} }
} }
public void initSummaryView()
{
if (super.requirePermissions(BillPermission.READ_ALL)) {
setBillsummary(new ArrayList<BillSummary>(billbean.getBillLineSummary()));
}
}
public void initUsersBills() { public void initUsersBills() {
if (requirePermissions(BillPermission.VIEW_OWN, permbean.isLoggedIn())) { if (requirePermissions(BillPermission.VIEW_OWN, permbean.isLoggedIn())) {
beginConversation(); beginConversation();
...@@ -83,4 +94,13 @@ public class BillListView extends GenericCDIView { ...@@ -83,4 +94,13 @@ public class BillListView extends GenericCDIView {
public boolean canReadAllBills() { public boolean canReadAllBills() {
return permbean.hasPermission(BillPermission.READ_ALL); return permbean.hasPermission(BillPermission.READ_ALL);
} }
public ArrayList<BillSummary> getBillsummary() {
return billsummary;
}
public void setBillsummary(ArrayList<BillSummary> billsummary) {
this.billsummary = billsummary;
}
} }
package fi.insomnia.bortal.web.cdiview.shop; package fi.insomnia.bortal.web.cdiview.shop;
import javax.enterprise.context.ConversationScoped; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.ReaderBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
@ConversationScoped @RequestScoped
public class ReaderListDataView extends GenericCDIView { public class ReaderListDataView extends GenericCDIView {
/** /**
* *
*/ */
private static final long serialVersionUID = -601822388844764143L; private static final long serialVersionUID = -601822388844764143L;
private ListDataModel<String> readers;
@Inject @EJB
private ReaderView readerview; private ReaderBeanLocal readerbean;
@Inject private ListDataModel<Reader> readers;
private transient RfidContainer container;
public ListDataModel<String> getReaders() private static final Logger logger = LoggerFactory.getLogger(ReaderListDataView.class);
{
if (readers == null)
{
super.beginConversation();
readers = new ListDataModel<String>(getContainer().getReaders());
}
return readers;
}
public String selectReader() public void initView() {
{
readerview.setReadername(readers.getRowData());
return null;
}
public void setReaders(ListDataModel<String> readers) { super.requirePermissions(ShopPermission.SHOP_TO_OTHERS);
this.readers = readers;
}
public RfidContainer getContainer() {
return container;
} }
public void setContainer(RfidContainer container) { public ListDataModel<Reader> getReaders()
this.container = container; {
}
public ReaderView getReaderview() { if (readers == null)
return readerview; {
} readers = new ListDataModel<Reader>(readerbean.getReaders());
}
return readers;
public void setReaderview(ReaderView readerview) {
this.readerview = readerview;
} }
} }
package fi.insomnia.bortal.web.cdiview.shop;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class ReaderNameContainer implements Serializable {
private static final long serialVersionUID = 571747919767505523L;
private Integer readerId;
public Integer getReaderId() {
return readerId;
}
public void setReaderId(Integer readerId) {
this.readerId = readerId;
}
}
...@@ -2,47 +2,54 @@ package fi.insomnia.bortal.web.cdiview.shop; ...@@ -2,47 +2,54 @@ package fi.insomnia.bortal.web.cdiview.shop;
import java.util.List; import java.util.List;
import javax.enterprise.context.SessionScoped; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.ReaderBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.RfidEvent;
@Named @Named
@SessionScoped @ConversationScoped
public class ReaderView extends GenericCDIView { public class ReaderView extends GenericCDIView {
private static final long serialVersionUID = 571747919767505523L; private static final long serialVersionUID = 802344850073689859L;
private String readername;
@Inject @Inject
private transient RfidContainer container; private ReaderNameContainer namecontainer;
public void initView() { @EJB
super.requirePermissions(permbean.hasPermission(ShopPermission.SHOP_TO_OTHERS)); private ReaderBeanLocal readerbean;
}
private List<Reader> readers;
public List<RfidEvent> getReaderEvents() { public void initReaderList() {
return container.getReaderEvents(readername); super.requirePermissions(ShopPermission.SHOP_TO_OTHERS);
} }
public void setReadername(String readername) { public List<ReaderEvent> getReaderEvents()
this.readername = readername; {
return readerbean.getReaderEvents(namecontainer.getReaderId());
} }
public String getReadername() { public List<Reader> getReaders()
return readername; {
if (readers == null) {
readers = readerbean.getReaders();
}
return readers;
} }
public void setContainer(RfidContainer container) { public ReaderNameContainer getNamecontainer() {
this.container = container; return namecontainer;
} }
public RfidContainer getContainer() { public void setNamecontainer(ReaderNameContainer namecontainer) {
return container; this.namecontainer = namecontainer;
} }
} }
package fi.insomnia.bortal.web.cdiview.shop;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.web.helpers.RfidEvent;
@Named
@ApplicationScoped
public class RfidContainer {
private static final Logger logger = LoggerFactory.getLogger(RfidContainer.class);
private final Map<Integer, Map<String, List<RfidEvent>>> events = Collections.synchronizedMap(new HashMap<Integer, Map<String, List<RfidEvent>>>());
@EJB
private EventBeanLocal evbean;
public synchronized void foundTag(String reader, String tag, ReaderEvent revent) {
LanEvent currEv = evbean.getCurrentEvent();
if (!events.containsKey(currEv.getId())) {
events.put(currEv.getId(), Collections.synchronizedMap(new HashMap<String, List<RfidEvent>>()));
}
Map<String, List<RfidEvent>> eventMap = events.get(currEv.getId());
logger.debug("Found tag {} tag {}", reader, tag);
if (!eventMap.containsKey(reader)) {
eventMap.put(reader, new LinkedList<RfidEvent>());
}
List<RfidEvent> readerevents = eventMap.get(reader);
while (readerevents.size() > 20) {
readerevents.remove(readerevents.size() - 1);
logger.debug("Cleaning readerevents fro reader {}", reader);
}
if (readerevents.size() > 0 && readerevents.get(0).getTag().equals(tag)) {
readerevents.get(0).seen();
} else {
readerevents.add(0, new RfidEvent(reader, tag, revent));
logger.debug("Readerevents size {}", readerevents.size());
}
}
public List<String> getReaders() {
LanEvent currEv = evbean.getCurrentEvent();
if (events.containsKey(currEv.getId())) {
Set<String> retset = events.get(currEv.getId()).keySet();
ArrayList<String> ret = new ArrayList<String>();
ret.addAll(retset);
return ret;
}
return null;
}
public List<RfidEvent> getReaderEvents(String readername) {
LanEvent currEv = evbean.getCurrentEvent();
if (events.containsKey(currEv.getId())) {
return events.get(currEv.getId()).get(readername);
}
return null;
}
}
...@@ -2,7 +2,6 @@ package fi.insomnia.bortal.web.cdiview.shop; ...@@ -2,7 +2,6 @@ package fi.insomnia.bortal.web.cdiview.shop;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -26,15 +25,11 @@ public class RfidView extends GenericCDIView { ...@@ -26,15 +25,11 @@ public class RfidView extends GenericCDIView {
@EJB @EJB
private transient ReaderBeanLocal readerbean; private transient ReaderBeanLocal readerbean;
@Inject
private transient RfidContainer container;
private static final Logger logger = LoggerFactory.getLogger(RfidView.class); private static final Logger logger = LoggerFactory.getLogger(RfidView.class);
public void readTag() { public void readTag() {
ReaderEvent revent = readerbean.checkTag(reader, tag, hash); ReaderEvent revent = readerbean.checkTag(reader, tag, hash);
logger.debug("at view Got revent from bean: {}", revent); logger.debug("at view Got readerevent from bean: {}", revent);
getContainer().foundTag(reader, tag, revent);
} }
...@@ -62,12 +57,4 @@ public class RfidView extends GenericCDIView { ...@@ -62,12 +57,4 @@ public class RfidView extends GenericCDIView {
this.hash = hash; this.hash = hash;
} }
public void setContainer(RfidContainer container) {
this.container = container;
}
public RfidContainer getContainer() {
return container;
}
} }
...@@ -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;
} }
......
...@@ -58,16 +58,11 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int ...@@ -58,16 +58,11 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int
T ret = null; T ret = null;
Integer id = null; Integer id = null;
if (value != null) { if (value != null) {
try { id = Integer.parseInt(value);
id = Integer.parseInt(value); if (id != null && id > 0) {
if (id != null) { ret = find(id);
ret = find(id);
}
} catch (NumberFormatException nfe) {
if (value == null || !value.equals("null")) {
throw nfe;
}
} }
} }
logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret }); logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret });
return ret; return ret;
...@@ -86,7 +81,7 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int ...@@ -86,7 +81,7 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int
} }
if (ret == null) if (ret == null)
{ {
ret = "null"; ret = "0";
} }
return ret; return ret;
} }
......
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 + "}";
}
}
package fi.insomnia.bortal.web.helpers;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import fi.insomnia.bortal.model.ReaderEvent;
public class RfidEvent {
public RfidEvent(String reader, String tag, ReaderEvent revent) {
this.reader = reader;
this.tag = tag;
this.event = revent;
}
public void seen() {
time = Calendar.getInstance();
}
public String getSeenSince() {
long diffSec = (Calendar.getInstance().getTimeInMillis() - time.getTimeInMillis()) / 1000;
long secs = diffSec % 60;
long diffMin = diffSec / 60;
long mins = diffMin % 60;
long hours = diffMin / 60;
StringBuilder ret = new StringBuilder();
if (hours > 0) {
ret.append(hours).append(" h ");
}
if (hours > 0 || mins > 0) {
ret.append(mins).append(" min ");
}
ret.append(secs).append(" sec");
return ret.toString();
}
private Calendar time = Calendar.getInstance();
private String reader;
private String tag;
private ReaderEvent event;
private List<String> actions = new ArrayList<String>();
public Calendar getTime() {
return time;
}
public void setTime(Calendar time) {
this.time = time;
}
public String getReader() {
return reader;
}
public void setReader(String reader) {
this.reader = reader;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public ReaderEvent getEvent() {
return event;
}
public void setEvent(ReaderEvent event) {
this.event = event;
}
public List<String> getActions() {
return actions;
}
public void setActions(List<String> actions) {
this.actions = actions;
}
public void addMessage(String msg) {
this.actions.add(msg);
}
}
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!