Compare commits

...

127 Commits

Author SHA1 Message Date
Vladimir Eliezer Tokarev b64719b1d9 Pressing on the regular search return it
Now when in advanced search mode when pressing the regular search label
the regular label is being returned
2016-07-09 14:17:13 +03:00
Vladimir Eliezer Tokarev 35c90882c0 The exchange of regular search to advanced is done
Created the advanced search now when the ! is pressed the advanced search
takes place of the regular search.
2016-07-09 13:54:24 +03:00
Vladimir Eliezer Tokarev b644f8b500 Created the advacned search panel fxml 2016-07-09 13:28:26 +03:00
Vladimir Eliezer Tokarev 6c43201113 Created the Advanced Search class 2016-07-09 13:10:53 +03:00
Vladimir Eliezer Tokarev 1fa38ddb5f Removed the lodge appeal managment from event handler map
the lodge appeal object is sub flow of the submit voter flow which means
that polling station dashboard should not know about its existance.
2016-07-02 18:05:29 +03:00
Vladimir Eliezer Tokarev c7c6f26db1 Conected the controller of lodge appeal to its fxml file 2016-07-02 17:37:44 +03:00
Vladimir Eliezer Tokarev ff4ad81cca Created lodge appeal visual updater
Lodge Appeal Visual Updter adds and removes lodge appeal pannel from and
to the polling station dashboard.
2016-07-02 17:35:47 +03:00
Vladimir Eliezer Tokarev 43af4b016d Implemented lodge appeal loader and controller 2016-07-02 17:12:43 +03:00
Vladimir Eliezer Tokarev eda570c863 Created the lodge appeal panel
Lodge appeal panel is responsible for appeal for voter that cannot vote
2016-07-02 17:09:36 +03:00
Vladimir Eliezer Tokarev 8ac466e73a Fixed the status log panel bug
The issue was the name of the panel not in capital latter
2016-07-02 16:11:22 +03:00
Vladimir Eliezer Tokarev dab9ca1ed1 Bug: the status log fxml wont load 2016-07-02 15:58:25 +03:00
Tal Moran b21051f321 Set up 'polling-station-gui' as a proper gradle subproject; fix directory structure 2016-06-28 02:12:26 +03:00
Tal Moran 72d5e8aca1 Use apache.commons instead of sun.com...whatever 2016-06-28 02:11:01 +03:00
Vladimir ELazar Tokarev 36e1f6ea20 Added the submit voter logic to PSD
Now all the search flow works, if the users dont find any users hi is
given the option to add one, if it found then the submit voter panel is
open.
2016-06-18 19:00:02 +03:00
Vladimir ELazar Tokarev f813c11edd Added the loader and the controler voter submit panel 2016-06-18 18:19:38 +03:00
Vladimir ELazar Tokarev b8001163b7 Created the submit voter panel
when voter found that can vote or cannot his representation sits in the
submit voter panel in which we can revoke his right to vote and otherwise
(give him the permision to vote)
2016-06-18 17:52:29 +03:00
Vladimir ELazar Tokarev d2c9893ccf Dummy Voters Fetcher fetching dummy voters 2016-06-18 15:35:00 +03:00
Vladimir ELazar Tokarev c90be520fe connected the logic of add new voter to the DSP 2016-06-18 15:13:04 +03:00
Vladimir ELazar Tokarev 9825b3409b Added the add voter panel to the PSD
The ad voter panel gives the ability to add new voter
2016-06-18 13:17:46 +03:00
Vladimir ELazar Tokarev 3766478ffa Created the search part of the PSD
The search have two big functionalities first one is fetch the users based
on given list of filters and the second one is open add/eddit panel based
on what the fetching of the users have returned.
2016-06-12 16:15:50 +03:00
Vladimir ELazar Tokarev 7d2eedfc1e The middle interfaces of Status log and settings removed
Those interfaces was unsued
2016-06-12 16:06:24 +03:00
Vladimir ELazar Tokarev 61c65594f5 Changed the managing of events in PSDController
Now thw evwnts management is in the EventHandlerMap
2016-06-12 16:00:49 +03:00
Vladimir ELazar Tokarev fc21a215d3 Created EventHandlerMapper
This objects actualy creates Event Handler Map  and fills it withs ids and
the obhject that should manage the events with given ids.
2016-06-12 15:52:22 +03:00
Vladimir ELazar Tokarev 1fb96c8630 Added Ecent Handler Mapper
Polling Station Dashboard have a lot of logics extend or close some
pannels (Settings and the Status log), search for users, and eddit those
users.
In order to simplfy the logic of Polling Station Dashboard Controler this
class was invented, the idea behind is simple every time some event is
trigered we will activate the apropriate handle method of the apropriate
object, this way if tomorow for say i want to implement different search
algoritm of users i will only change the UserSearch part.
2016-06-12 15:20:29 +03:00
Vladimir ELazar Tokarev c80aa8efc1 Removed the adding/removing logic from PSD controller
The only thing that the controller of the Polling Station Dashboard
suppose to do is to handle events (not manage the llogic of adding or
removing actual parts/panels to the main stage ) this is why this logic is
now mainteined in saparated objects as Settings Visual Updater or
Status Log Visual Updater
2016-06-12 13:18:01 +03:00
Vladimir ELazar Tokarev f2dc2ec6d8 Ended the creating of the edit voter xml 2016-06-11 15:00:05 +03:00
Vladimir ELazar Tokarev ab7c12b3f6 Created the voter edit panel
this panel gives the ability to add or eddit existing user
2016-06-11 14:53:57 +03:00
Vladimir ELazar Tokarev b7d8c887ec Ended the settings panel
for now we have all the main flow vor the voter voting process (without
all the logic for example the logic of fetching from server who else is
voting right now is not existing, etc'...)
2016-06-04 16:48:47 +03:00
Vladimir ELazar Tokarev 725589ddfc Createsd the settings panel
the settings panel displays ndifferent options that can happen when on
polliing station dashboard panel.
2016-06-04 16:05:12 +03:00
Vladimir ELazar Tokarev f2a26b7145 Created the status log update interface
in order to reduce coupling between polling station dashboard and all
other elements it produces and uses i have created status log update
interface, which expose the functuality of update the state of status log
panel.

the idea behind this is status log does not have to know polling station
dashboard. all other objects that polling station dashboard will use will
have their own interfaces (for the same reason too).
2016-06-04 15:11:18 +03:00
Vladimir ELazar Tokarev b0c4fff11a Created Status Log
Status log is inchage of representing the progress other people voting
process.
2016-06-04 13:01:06 +03:00
Vladimir ELazar Tokarev c24c6bbbd5 Created the flow that goes till the PSD
all the 4 scenes are now conneted with the flow, but not all the features
of Polling Station Dashboard exists.
2016-05-28 18:00:40 +03:00
Vladimir ELazar Tokarev 4720d66115 Created java and fxml dirs in PSD
the java dir contains the loader class and the handler classes
when the fxml subdir contains the fxml of the polling station dashboard
2016-05-28 17:50:22 +03:00
Vladimir ELazar Tokarev 541a6666fc Reformated the structure of single scene
The meerkat gui is an project consist of scenes every scene is an panel,
now every panel have the loader class which loads it content
and the handler object which handles the visual effects as mouse clicked
etc'...
2016-05-28 17:45:34 +03:00
Vladimir ELazar Tokarev c08fbdfa76 Added the uploading bulletin board controller
after the slash screen displayed we go to uploading bulletin board scene
2016-05-28 15:14:22 +03:00
Vladimir ELazar Tokarev c97910644f Creating splash screen on boot then the uploader BB 2016-05-28 14:15:05 +03:00
Vladimir ELazar Tokarev 213ab2a4ea Created spesific package for every fxml
I have come to conclusoin (after few projects inspection) thatevery fxml
should have his own conroller and its own java class that represents it
and loads it.
2016-05-28 13:12:30 +03:00
Vladimir ELazar Tokarev 357fab2d96 Filled the polling_station_dashboard
Now the file have the basic structure needed
2016-05-28 12:58:18 +03:00
Vladimir ELazar Tokarev 49f8e597a3 Added the polling station dashboard
for now created the baseic parts of the dashboard
2016-05-21 11:46:52 +03:00
Vladimir ELazar Tokarev ccdb3b4b01 Removed the external classes
for now we dont need any animation
2016-05-21 09:59:14 +03:00
Vladimir ELazar Tokarev ac2fc3a83d Ended the fxml of uploading to bulletin board
ended its fxml and addedexternal loadinig pane class
2016-05-21 09:54:21 +03:00
Vladimir ELazar Tokarev 6d01be0d13 Loading gif removed
Loading gif removed after all fxmls loaded
2016-05-20 12:54:33 +03:00
Dasha-1 b76bd76854 Created loader of all next fxmls
Now we display the spalsh screen on boot then load all of the fxmls
2016-05-20 12:10:17 +03:00
Dasha-1 7eb5aec1d1 Created the splash screen on boot. 2016-05-20 11:27:24 +03:00
Dasha-1 81dcdf6f25 Renamed the project 2016-05-20 10:44:59 +03:00
Dasha-1 df6e40e385 Created new branch which will have the initial voting station gui. 2016-05-20 10:34:06 +03:00
Vladimir Eliezer Tokarev 7fc0af2b1f Added logging to Voter-Registry 2016-04-15 06:51:36 -07:00
Vladimir Eliezer Tokarev 47f68acae4 working version of VoterRegistry with localBulletinBoardServer. 2016-04-15 04:11:54 -07:00
Vladimir Eliezer Tokarev 630588ca5b Put some unused files into git ignore 2016-04-15 03:11:47 -07:00
Vladimir Eliezer Tokarev 53fc701444 Merge branch 'master' of http://cs.idc.ac.il/rhodecode/meerkat/meerkat-java into Voter-Registry 2016-04-15 02:45:35 -07:00
Vladimir Eliezer Tokarev 14d6759803 The tests suing LocalBullteinBoardClient instead of the Cached one. 2016-04-01 04:12:21 -07:00
Vladimir Eliezer Tokarev 25781f40f7 Changed AsyncVoterRegistry to use CachedBulletinBoardClient
Instead of using ThreadedBulletinBoardClient.
The test have been changed to use LocalBulletinBoardClient.
2016-04-01 02:20:47 -07:00
Vladimir Eliezer Tokarev 1bf5861808 Merge branch 'master' into Voter-Registry 2016-04-01 00:26:29 -07:00
Vladimir Eliezer Tokarev 01874f7d1c Removed alll the printStackTrace. 2016-03-26 04:16:08 -07:00
Vladimir Eliezer Tokarev 7f39badaf7 Removed the system.out.println. 2016-03-26 04:14:27 -07:00
Vladimir Eliezer Tokarev 259b4c2ae5 Anded return statment after onFailure for the object dont send onSucces. 2016-03-26 04:13:45 -07:00
Vladimir Eliezer Tokarev f3ec49acc7 Removed the usage of the collection of digital signers 2016-03-26 04:11:09 -07:00
Vladimir Eliezer Tokarev 5398d5adc3 Removed the usage of DigitalSignature where should be single instace 2016-03-26 03:58:21 -07:00
Vladimir Eliezer Tokarev b8cc12dfc1 Removed serialization from the project (we have protobufs!). 2016-03-26 03:53:53 -07:00
Vladimir Eliezer Tokarev 8140dcd516 Changed the documentation of some files to document things that have changed since last commit. 2016-03-18 10:53:01 -07:00
Vladimir Eliezer Tokarev c767d8af58 Changed the writing of all the groups ids of one simple voter. 2016-03-18 10:42:07 -07:00
Vladimir Eliezer Tokarev 37002a7f1e Changed the getLatestMessage to be java 7 syntax 2016-03-12 05:50:42 -08:00
Vladimir Eliezer Tokarev b4661d0fed Splited LatestMessagesCallBack into number of callbacks according to their destanation. 2016-03-12 05:23:51 -08:00
Vladimir Eliezer Tokarev a9d96e59b2 Correcting arbel peled cr 2016-03-11 06:02:09 -08:00
Vladimir Eliezer Tokarev 4fac4bbb8c Changed the usage of test from (junit 3 to 4) from extend to @Test. 2016-03-05 06:38:12 -08:00
Vladimir Eliezer Tokarev 6d807cdd4d Added the option to check if some voter have voted already. 2016-03-05 06:33:07 -08:00
Vladimir Eliezer Tokarev 4d72d6083e Changed addVoterToGroup to setVotersGroup. 2016-03-05 03:20:07 -08:00
Vladimir Eliezer Tokarev da614c13ab Changed the signatures of methods according to java standarts (camelCaseConvention). 2016-03-05 02:36:35 -08:00
Vladimir Eliezer Tokarev 4b31e87d07 Changed the code according to Arbel Peled CR. 2016-03-04 08:53:42 -08:00
Vladimir Eliezer Tokarev 2d72822405 Changed the MessageCollectionUtils file and the files that affacted by this change. 2016-03-04 08:26:55 -08:00
Vladimir Eliezer Tokarev 9828832553 Changed the type of the message validator and reformated the classes in an appropriate way. 2016-03-04 07:22:34 -08:00
Vladimir Eliezer Tokarev d9272c9f94 Renamed SimpleRegistry to Registry. 2016-03-04 06:06:37 -08:00
Vladimir Eliezer Tokarev 9c52eff109 Updated the VoterRegistry.proto file according to the new timestamp of the unsingedBulletinBoardMessage. 2016-03-04 06:05:06 -08:00
Vladimir Eliezer Tokarev 6359f74a7b Updated the VoterRegistry.proto file according to the new timestamp of the unsingedBulletinBoardMessage. 2016-03-04 06:02:53 -08:00
Vladimir Eliezer Tokarev fea0e8880f changed the files according to the new futureInterface. 2016-03-04 05:43:43 -08:00
Vladimir Eliezer Tokarev 843d50c276 changed the files according to the new futureInterface. 2016-03-04 05:36:48 -08:00
Vladimir Eliezer Tokarev 5c4b5a2150 mereging with master for getting the new timestamp uasge 2016-03-04 04:56:14 -08:00
Vladimir Eliezer Tokarev 687c2c6d7e Pulled the first version of the BulletinBoardClientIntegretionTest file 2016-03-04 04:50:33 -08:00
Vladimir Eliezer Tokarev 311d1e8e8e Removed the voterRegistryMessage and swaped the usage of it to BulletinBoardMessage 2016-02-27 03:55:45 -08:00
Vladimir Eliezer Tokarev 87420a9d7d Removed the voterRegistryMessage and swaped the usage of it to BulletinBoardMessage 2016-02-27 03:48:51 -08:00
Vladimir Eliezer Tokarev 5169c935bf Changed the usage of timestamp to miliseconds and removed the aqurate timestamp 2016-02-27 03:00:14 -08:00
Vladimir Eliezer Tokarev 097aad4e7b Changed the enumartion of RegistryTags to abstract class with static final strings as tags 2016-02-27 01:27:19 -08:00
Vladimir Eliezer Tokarev 64a9356dc2 Change part of the code (java 8 usage) for gralde to be able to run the test and not fail. 2016-02-26 05:52:03 -08:00
Vladimir Eliezer Tokarev 230dfe6d3f Realocated the VoterRegistry.proto file and changed the usage of it 2016-02-26 05:17:29 -08:00
Vladimir Eliezer Tokarev c8e747285c Added the verefication process to the receiving of messages from voter registry 2016-02-26 04:54:39 -08:00
Vladimir Eliezer Tokarev 16a3102ca4 Replaced part of the files according to Arbel Peled CR and remove unnessesry files 2016-02-25 21:56:46 -08:00
Vladimir Eliezer Tokarev 20d2b3e68c Ended the refactoring of the code acording to Arbel Peled first CR commit 2016-02-25 21:45:52 -08:00
Vladimir Eliezer Tokarev 6ec0d4a668 Changed the simple voter registry tests (all passes) to the new strcutrue of the registry 2016-02-20 08:54:22 -08:00
Vladimir Eliezer Tokarev 3347a6c42d Refactoring the code of voter-registry tests according to Arbel Peled CR 2016-02-20 07:48:10 -08:00
Vladimir Eliezer Tokarev 8c0e7f57bb Refactoring the code of voter-registry tests according to Arbel Peled CR 2016-02-19 08:41:02 -08:00
Vladimir Eliezer Tokarev 64ccaff508 Refactoring the code of voter-registry according to Arbel Peled CR 2016-02-19 06:33:32 -08:00
Vladimir Eliezer Tokarev 298dd5bf6e Refactoring the code of voter-registry according to Arbel Peled CR 2016-02-19 06:18:28 -08:00
Vladimir Eliezer Tokarev bb4cc5b087 Refactoring the code of voter-registry according to Arbel Peled CR 2016-02-19 06:17:43 -08:00
Vladimir Eliezer Tokarev 91e41af7a0 Merge branch 'Voter-Registry' of http://cs.idc.ac.il/rhodecode/meerkat/meerkat-java into Voter-Registry
Need to correct the data according to Arbel-peled CR
2016-02-19 03:11:26 -08:00
Vladimir Eliezer Tokarev 414452db84 Added The protobufs file and its java representation Those protobufs are representing the messages that the registry will use when communicating with the bulletin-board
Summary:
D:/Work/Wombat Working/voter-registry/comment-info.txt

Changed the location of the protobufs file The location have been changed to create order in the packages

Changed the location of the  ProtobufsMessages file so that the Registry file could use it freely

Changed the location of the Protobufs file and added the Registry class The protobufs files location was changed for the right location of the packages for Registry class be able to use the protobufs files

Changed the location of the ProtobufsMessages file for creating more organized project

Created the SimpleRegistry file SimpleRegistry expose the ability of manging voters information (their groups, and personal data)

Created RegistryTagTypes file this file have the different tags for registry messages

Changed the SimpleRegistry file started to implement the different methods of this class (such as created basic messages)

Changed the ProtobufMessages file now using only the basic registry messages

Changed the SimpleRegistry file Managed to create the signatory and add empty builder

Added the AccurateTimestamp file This file converts string timestamp to timestamp and the other way , its used for the SimpleRegistry tags

Moved the AccurateTimeStamp and the RegistryTagTypes to package called util This way the project files are more organized

Add the MessagesUtil file This file contain helpfull methods for working with messages (such as basicMessage and BulletinBoardMessage)

Created VoterRegistryMessage VoterRegistryMessage extending the abilities of the basic message also changed the name of  MessagesUtils  to CollectionMessagesUtils because its suits more this class destination

Changed the simpleRegistry file Edited the GetPersonIDDetails method , and refactored the basic methods of upload data to BulletinBoardServer

Added the SimpleRegistryTest This object tests the simple registry functionality

Added the SimpleRegistryTest This object tests the simple registry functionality

Changed the RegistryTagsType to RegistryTags The Name RegistryTags more indicative

Added The Wombat Code And Documentation This file describes the conventions of the wombat project

Changed the SimpleRegistry and VoterRegistryMessage Documentation The documentation was partial in part of the methods

Changed the SimpleRegistry to work with UnsignedBulletinBoardMessage The basicMessage is not needed

Changed the SimpleRegistry to work with UnsignedBulletinBoardMessage The basicMessage is not needed

Changed the VoterRegistryMessage to wrap UnsignedBulletinBoardMessage there is no need to wrap unused basic message when using UnsignedBulletinBoardMessage

Re-organized the voter-registry Since there no need for basicMessage i have removed it, and changed few methods to be in language level 7

Re-organized the voter-registry Since there no need for basicMessage i have removed it, and changed few methods to be in language level 7

added the RegistryInstance interface Which gives the basic registry functionality (because there going to be at least two registries)

Changed the SimpleRegistry The new Simple Registry works according to the RegistryInstance interface

Changed the SimpleRegistry The new Simple Registry works according to the RegistryInstance interface

Changed the SimpleRegistry The new Simple Registry works according to the RegistryInstance interface

Added testing to the SimpleRegistryTest class The Test checking that SetVoter AddVoter AddToGroup RemoveFromGroup methods working.

Added testing to the SimpleRegistryTest class The Test checking that SetVoter AddVoter AddToGroup RemoveFromGroup methods working.

Test Plan: The idea is to create number of BulletinBoardMessage's that and post them, then ask from the server for message with relevant filter and check that all the messages that have been posted there.

Reviewers: arbel.peled

Differential Revision: https://proj-cs.idc.ac.il/D1
2016-02-12 07:37:32 -08:00
Vladimir Eliezer Tokarev c4177cf487 Added testing to the SimpleRegistryTest class
The Test checking that SetVoter AddVoter AddToGroup RemoveFromGroup methods working.
2016-01-30 09:19:25 -08:00
Vladimir Eliezer Tokarev 003720839c Added testing to the SimpleRegistryTest class
The Test checking that SetVoter AddVoter AddToGroup RemoveFromGroup methods working.
2016-01-30 02:30:12 -08:00
Vladimir Eliezer Tokarev 6020ed3ab8 Changed the SimpleRegistry
The new Simple Registry works according to the RegistryInstance interface
2016-01-23 09:16:57 -08:00
Vladimir Eliezer Tokarev 68caeee114 Changed the SimpleRegistry
The new Simple Registry works according to the RegistryInstance interface
2016-01-23 05:51:41 -08:00
Vladimir Eliezer Tokarev c30ea072f2 Changed the SimpleRegistry
The new Simple Registry works according to the RegistryInstance interface
2016-01-23 03:31:04 -08:00
Vladimir Eliezer Tokarev 7a167639db added the RegistryInstance interface
Which gives the basic registry functionality (because there going to be at least two registries)
2016-01-23 03:29:29 -08:00
Vladimir Eliezer Tokarev 01604d1acb Re-organized the voter-registry
Since there no need for basicMessage i have removed it,
and changed few methods to be in language level 7
2016-01-22 10:22:36 -08:00
Vladimir Eliezer Tokarev 89bac8d346 Re-organized the voter-registry
Since there no need for basicMessage i have removed it,
and changed few methods to be in language level 7
2016-01-22 08:14:13 -08:00
Vladimir Eliezer Tokarev dfc5bf4b24 Changed the VoterRegistryMessage to wrap UnsignedBulletinBoardMessage
there is no need to wrap unused basic message when using UnsignedBulletinBoardMessage
2016-01-22 08:03:52 -08:00
Vladimir Eliezer Tokarev 1815863746 Changed the SimpleRegistry to work with UnsignedBulletinBoardMessage
The basicMessage is not needed
2016-01-22 07:47:39 -08:00
Vladimir Eliezer Tokarev 0d8e522e93 Changed the SimpleRegistry to work with UnsignedBulletinBoardMessage
The basicMessage is not needed
2016-01-22 07:35:30 -08:00
Vladimir Eliezer Tokarev 4324bdeecd Changed the SimpleRegistry and VoterRegistryMessage Documentation
The documentation was partial in part of the methods
2016-01-22 06:23:25 -08:00
Vladimir Eliezer Tokarev d4d2d2f5b6 Added The Wombat Code And Documentation
This file describes the conventions of the wombat project
2016-01-22 06:10:13 -08:00
Vladimir Eliezer Tokarev e75317efa9 Changed the RegistryTagsType to RegistryTags
The Name RegistryTags more indicative
2016-01-22 05:13:32 -08:00
Vladimir Eliezer Tokarev 5971e8c16e Added the SimpleRegistryTest
This object tests the simple registry functionality
2016-01-16 06:58:09 -08:00
Vladimir Eliezer Tokarev de835a8c13 Added the SimpleRegistryTest
This object tests the simple registry functionality
2016-01-16 06:57:12 -08:00
Vladimir Eliezer Tokarev 109135ae1b Changed the simpleRegistry file
Edited the GetPersonIDDetails method , and refactored the basic methods of upload data to BulletinBoardServer
2016-01-16 06:00:07 -08:00
Vladimir Eliezer Tokarev 7734ba8c91 Created VoterRegistryMessage
VoterRegistryMessage extending the abilities of the basic message also changed the
name of  MessagesUtils  to CollectionMessagesUtils because its suits more this class destination
2016-01-15 08:41:20 -08:00
Vladimir Eliezer Tokarev 8546a347ca Add the MessagesUtil file
This file contain helpfull methods for working with messages (such as basicMessage and BulletinBoardMessage)
2016-01-15 06:52:05 -08:00
Vladimir Eliezer Tokarev 65bc8bc160 Moved the AccurateTimeStamp and the RegistryTagTypes to package called util
This way the project files are more organized
2016-01-15 06:27:15 -08:00
Vladimir Eliezer Tokarev 36d94b41ab Added the AccurateTimestamp file
This file converts string timestamp to timestamp and the other way , its used for the SimpleRegistry tags
2016-01-15 05:04:43 -08:00
Vladimir Eliezer Tokarev 87e8ad9470 Changed the SimpleRegistry file
Managed to create the signatory and add empty builder
2016-01-15 02:28:02 -08:00
Vladimir Eliezer Tokarev 717c2e6e65 Changed the ProtobufMessages file
now using only the basic registry messages
2016-01-15 01:32:12 -08:00
Vladimir Eliezer Tokarev 51b9f9decd Changed the SimpleRegistry file
started to implement the different methods of this class (such as created basic messages)
2016-01-09 03:52:42 -08:00
Vladimir Eliezer Tokarev 05871a2ea7 Created RegistryTagTypes file
this file have the different tags for registry messages
2016-01-09 02:29:15 -08:00
Vladimir Eliezer Tokarev 070b851203 Created the SimpleRegistry file
SimpleRegistry expose the ability of manging voters information (their groups, and personal data)
2016-01-08 10:09:19 -08:00
Vladimir Eliezer Tokarev 4aa6c25c0f Changed the location of the ProtobufsMessages file
for creating more organized project
2016-01-08 08:40:04 -08:00
Vladimir Eliezer Tokarev 84555f0639 Changed the location of the Protobufs file and added the Registry class
The protobufs files location was changed for the right location of the packages for Registry
class be able to use the protobufs files
2016-01-08 08:07:15 -08:00
Vladimir Eliezer Tokarev 42bc35cbe8 Changed the location of the ProtobufsMessages file
so that the Registry file could use it freely
2016-01-08 07:55:59 -08:00
Vladimir Eliezer Tokarev f9d7b4b1ce Changed the location of the protobufs file
The location have been changed to create order in the packages
2016-01-08 07:41:26 -08:00
Vladimir Eliezer Tokarev 25eefc4b16 Added The protobufs file and its java representation
Those protobufs are representing the messages that the registry will use when communicating with the bulletin-board

D:/Work/Wombat Working/voter-registry/comment-info.txt
2016-01-08 06:00:40 -08:00
Arbel Deutsch Peled a12685d757 Stub Voter Registry project 2016-01-02 13:23:39 +02:00
140 changed files with 5646 additions and 31 deletions
bulletin-board-server
meerkat-common/src/main

36
.gitignore vendored
View File

@ -1,16 +1,20 @@
.gradle
.idea
build
bin
.settings
.classpath
.project
out
*.iml
*.ipr
*.iws
**/*.swp
*.prefs
*.project
*.classpath
bulletin-board-server/local-instances/meerkat.db
/SQLiteDBTest.db
/Wombat Code And Documentation Conventions
/bulletin-board-server/trace.db/h2datasource.trace.db
/bulletin-board-server/SQLiteDBTest.db
.gradle
.idea
build
bin
.settings
.classpath
.project
out
*.iml
*.ipr
*.iws
**/*.swp
*.prefs
*.project
*.classpath
bulletin-board-server/local-instances/meerkat.db

Binary file not shown.

View File

@ -0,0 +1,46 @@
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.filter.ThresholdFilter
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.util.Duration
import static ch.qos.logback.classic.Level.*
if (System.getProperty("log.debug") != null) {
println "Logback configuration debugging enabled"
statusListener(OnConsoleStatusListener)
}
def LOG_LEVEL = toLevel(System.getProperty("log.level"), INFO)
def haveBeagle = System.getProperty("log.beagle") != null
def logOps = System.getProperty("log.ops") != null
appender("CONSOLE", ConsoleAppender) {
filter(ThresholdFilter) {
level = toLevel(System.getProperty("log.level"), TRACE)
}
encoder(PatternLayoutEncoder) {
pattern = "%d{HH:mm:ss.SSS} [%thread %file:%line] %-5level %logger{0} - %msg%n"
}
}
def appenders = [ "CONSOLE" ]
if (haveBeagle) {
appender("SOCKET", SocketAppender) {
includeCallerData = true
remoteHost = "localhost"
port = 4321
reconnectionDelay = new Duration(10000)
}
appenders += ["SOCKET"]
}
root(LOG_LEVEL, appenders)

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

View File

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="250.0" prefWidth="753.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="polling_station_dashboard.search.addVoter.AddVoterController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="251.0" minWidth="10.0" prefWidth="118.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="467.0" minWidth="10.0" prefWidth="194.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="470.0" minWidth="10.0" prefWidth="458.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints maxHeight="195.0" minHeight="10.0" prefHeight="178.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="119.0" minHeight="10.0" prefHeight="72.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="3" GridPane.rowIndex="5">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="58.0" minHeight="10.0" prefHeight="41.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="85.0" minHeight="10.0" prefHeight="84.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="16.0" minHeight="9.0" prefHeight="12.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="28.0" minHeight="10.0" prefHeight="25.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="9.0" minHeight="4.0" prefHeight="4.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextArea prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
</children>
</GridPane>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="92.0" minWidth="10.0" prefWidth="84.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="110.0" minWidth="10.0" prefWidth="110.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<bottom>
<Label prefHeight="17.0" prefWidth="77.0" text="ID number" BorderPane.alignment="CENTER" />
</bottom>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
<center>
<Label text="Eligible to vote" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
<center>
<Label text="Status" BorderPane.alignment="CENTER">
<padding>
<Insets right="45.0" />
</padding>
</Label>
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
<center>
<Label text="Channel" BorderPane.alignment="CENTER">
<padding>
<Insets right="35.0" />
</padding>
</Label>
</center>
</BorderPane>
<ComboBox prefWidth="150.0" promptText="No" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<ComboBox prefWidth="150.0" promptText="Provisional" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<ComboBox prefWidth="150.0" promptText="IDC Maths" GridPane.columnIndex="1" GridPane.rowIndex="3" />
<BorderPane minHeight="40.0" prefHeight="40.0" prefWidth="200.0" GridPane.columnIndex="1">
<center>
<TextField text="434575845" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="5">
<center>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/profile.png" />
</image>
</ImageView>
</center>
</BorderPane>
<GridPane GridPane.columnIndex="4" GridPane.rowIndex="5">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="70.0" minHeight="10.0" prefHeight="48.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="130.0" minHeight="10.0" prefHeight="125.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="149.0" minWidth="10.0" prefWidth="26.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="408.0" minWidth="10.0" prefWidth="403.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="119.0" minWidth="10.0" prefWidth="27.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="0.0" prefHeight="6.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="112.0" minHeight="10.0" prefHeight="84.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="35.0" minHeight="0.0" prefHeight="35.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextArea prefHeight="89.0" prefWidth="406.0" text="Update reason (optional)" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
</GridPane>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="342.0" minWidth="10.0" prefWidth="304.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="226.0" minWidth="10.0" prefWidth="158.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<Button mnemonicParsing="false" text="Cancel" onMousePressed="#RemoveAddVoterPanel" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="52.0" text="Save" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
</children>
</GridPane>
<GridPane GridPane.columnIndex="4" GridPane.rowIndex="6">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="323.0" minWidth="10.0" prefWidth="295.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="224.0" minWidth="10.0" prefWidth="167.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="140.0" minWidth="10.0" prefWidth="138.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="67.0" minWidth="10.0" prefWidth="29.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="140.0" text="Ready To Vote" />
</children>
</GridPane>
</children>
</GridPane>
</children>
</GridPane>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="polling_station_dashboard.PollingStationDashboardController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane prefHeight="585.0" prefWidth="829.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<Pane layoutX="24.0" layoutY="14.0" prefHeight="102.0" prefWidth="714.0">
<children>
<BorderPane prefHeight="102.0" prefWidth="714.0">
<right>
<Button fx:id="SearchButton" mnemonicParsing="false" onMousePressed="#SearchTrigered" prefHeight="50.0" prefWidth="112.0" text="Search" BorderPane.alignment="CENTER" />
</right>
<bottom>
<Separator prefWidth="200.0" BorderPane.alignment="CENTER" />
</bottom>
<left>
<ImageView fitHeight="65.0" fitWidth="66.0" BorderPane.alignment="CENTER">
<image>
<Image url="@/images/barcode.png" />
</image>
</ImageView>
</left>
<center>
<TextField fx:id="SearchValue" prefHeight="56.0" prefWidth="536.0" BorderPane.alignment="CENTER" text="IDNumber: 123123123, FilterName2: value2 ..." />
</center>
</BorderPane>
</children>
</Pane>
<Pane layoutX="8.0" prefHeight="26.0" prefWidth="755.0">
<children>
<BorderPane layoutX="12.0" prefHeight="26.0" prefWidth="743.0">
<bottom>
<Separator prefWidth="200.0" BorderPane.alignment="CENTER" />
</bottom>
</BorderPane>
</children>
</Pane>
<BorderPane layoutX="12.0" layoutY="531.0" prefHeight="26.0" prefWidth="755.0">
<bottom>
<Separator prefWidth="200.0" BorderPane.alignment="CENTER" />
</bottom>
</BorderPane>
<BorderPane layoutX="-8.0" layoutY="32.0" prefHeight="517.0" prefWidth="22.0">
<right>
<Separator orientation="VERTICAL" prefHeight="200.0" BorderPane.alignment="CENTER" />
</right>
</BorderPane>
<BorderPane layoutX="756.0" layoutY="31.0" prefHeight="517.0" prefWidth="22.0">
<right>
<Separator orientation="VERTICAL" prefHeight="200.0" BorderPane.alignment="CENTER" />
</right>
</BorderPane>
<Pane fx:id="StatusLog" layoutX="788.0" layoutY="12.0" onMousePressed="#OnStatusLogPressed" prefHeight="544.0" prefWidth="42.0">
<children>
<Button fx:id="StatusLogButton" layoutX="-251.0" layoutY="250.0" mnemonicParsing="false" onMousePressed="#OnStatusLogPressed" prefHeight="43.0" prefWidth="545.0" rotate="-90.0" text="Status Log" />
</children>
</Pane>
<Pane fx:id="Settings" layoutX="20" layoutY="557.0" onMousePressed="#OnSettingsPressed" prefHeight="34.0" prefWidth="830.0">
<children>
<Button fx:id="SettingsButton" mnemonicParsing="false" onMousePressed="#OnSettingsPressed" prefHeight="34.0" prefWidth="790.0" text="Settings" />
</children>
</Pane>
<Pane fx:id="AddEditPane" layoutX="17.0" layoutY="120.0" prefHeight="428.0" prefWidth="749.0" />
</children>
</AnchorPane>
</children>
</GridPane>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane fx:id="SettingsGridPane" prefHeight="70.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="polling_station_dashboard.settings.settingsController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="177.0" minWidth="10.0" prefWidth="177.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="172.0" minWidth="10.0" prefWidth="144.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="216.0" minWidth="10.0" prefWidth="200.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="165.0" minWidth="10.0" prefWidth="136.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="202.0" minHeight="0.0" prefHeight="54.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="561.0" minHeight="10.0" prefHeight="561.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="80.0" minWidth="10.0" prefWidth="53.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="125.0" minWidth="10.0" prefWidth="117.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<right>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/bullets.png" />
</image>
</ImageView>
</right>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Label text="Manage voting booths" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
</children>
</GridPane>
<GridPane GridPane.columnIndex="1" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="80.0" minWidth="10.0" prefWidth="57.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="128.0" minWidth="10.0" prefWidth="113.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Label text="Manage Polls workers" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<right>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@../../../pictures/women.png" />
</image>
</ImageView>
</right>
</BorderPane>
</children>
</GridPane>
<GridPane GridPane.columnIndex="2" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="79.0" minWidth="10.0" prefWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="120.0" minWidth="10.0" prefWidth="110.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Label text="Manage provisional votes" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<right>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@../../../pictures/settings.png" />
</image>
</ImageView>
</right>
</BorderPane>
</children>
</GridPane>
<GridPane GridPane.columnIndex="3" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="76.0" minWidth="10.0" prefWidth="54.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="108.0" minWidth="10.0" prefWidth="108.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Label text="Close polling station" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<right>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@../../../pictures/exit.png" />
</image>
</ImageView>
</right>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import javafx.geometry.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane fx:id="StatusLogGridPane" prefHeight="615.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="polling_station_dashboard.statusLog.StatusLogController">
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<Label text="Status Log" BorderPane.alignment="CENTER" />
</center>
<left>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/blacktriangle.png" />
</image>
<BorderPane.margin>
<Insets left="10.0" />
</BorderPane.margin>
</ImageView>
</left>
</BorderPane>
<Accordion GridPane.rowIndex="1">
<panes>
<TitledPane animated="false" text="Voters In Progress">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<AnchorPane prefHeight="486.0" prefWidth="400.0" />
<ScrollPane prefHeight="488.0" prefWidth="400.0" />
</children>
</AnchorPane>
</content>
</TitledPane>
<TitledPane animated="false" text="Pending Upload">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ScrollPane prefHeight="485.0" prefWidth="400.0">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="200.0" />
</content>
</ScrollPane>
</children>
</AnchorPane>
</content>
</TitledPane>
<TitledPane animated="false" text="Completed">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<ScrollPane prefHeight="486.0" prefWidth="400.0">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="200.0" />
</content>
</ScrollPane>
</children>
</AnchorPane>
</content>
</TitledPane>
</panes>
</Accordion>
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="202.0" minHeight="0.0" prefHeight="54.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="561.0" minHeight="10.0" prefHeight="561.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>

View File

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.image.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane fx:id="SubmitVoterPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="250.0" prefWidth="753.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="polling_station_dashboard.search.submitVoter.SubmitVoterController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="251.0" minWidth="10.0" prefWidth="118.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="467.0" minWidth="10.0" prefWidth="194.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="470.0" minWidth="10.0" prefWidth="458.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints maxHeight="195.0" minHeight="10.0" prefHeight="178.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="119.0" minHeight="10.0" prefHeight="72.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="3" GridPane.rowIndex="5">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="58.0" minHeight="10.0" prefHeight="41.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="85.0" minHeight="10.0" prefHeight="84.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="16.0" minHeight="9.0" prefHeight="12.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="28.0" minHeight="10.0" prefHeight="25.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="9.0" minHeight="4.0" prefHeight="4.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label prefHeight="29.0" prefWidth="188.0" text="Name" GridPane.rowIndex="1" />
</children>
</GridPane>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="92.0" minWidth="10.0" prefWidth="84.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="110.0" minWidth="10.0" prefWidth="110.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<bottom>
<Label prefHeight="17.0" prefWidth="77.0" text="ID number" BorderPane.alignment="CENTER" />
</bottom>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
<center>
<Label text="Eligible to vote" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
<center>
<Label text="Status" BorderPane.alignment="CENTER">
<padding>
<Insets right="45.0" />
</padding>
</Label>
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
<center>
<Label text="Channel" BorderPane.alignment="CENTER">
<padding>
<Insets right="35.0" />
</padding>
</Label>
</center>
</BorderPane>
<Label fx:id="IDNumberValue" prefHeight="29.0" prefWidth="107.0" text="234234234" GridPane.columnIndex="1" />
<Label fx:id="EligibleToVoteValue" prefHeight="23.0" prefWidth="107.0" text="YES" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="3.0" />
</padding></Label>
<Label fx:id="StatusValue" prefHeight="38.0" prefWidth="107.0" text="Has Not Voted" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label fx:id="ChannelValue" prefHeight="60.0" prefWidth="107.0" text="IDC Maths" GridPane.columnIndex="1" GridPane.rowIndex="3" />
</children>
</GridPane>
</children>
</GridPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="5">
<center>
<ImageView BorderPane.alignment="CENTER">
<image>
<Image url="@/images/profile.png" />
</image>
</ImageView>
</center>
</BorderPane>
<GridPane GridPane.columnIndex="4" GridPane.rowIndex="5">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="70.0" minHeight="10.0" prefHeight="48.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="130.0" minHeight="10.0" prefHeight="125.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="342.0" minWidth="10.0" prefWidth="304.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="226.0" minWidth="10.0" prefWidth="158.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<Button mnemonicParsing="false" onMousePressed="#RemoveSubmitVoterPanel" text="Cancel" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<left>
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="52.0" text="Save" BorderPane.alignment="CENTER" />
</left>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
</children>
</GridPane>
<GridPane GridPane.columnIndex="4" GridPane.rowIndex="6">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="323.0" minWidth="10.0" prefWidth="295.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="224.0" minWidth="10.0" prefWidth="167.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.columnIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="140.0" minWidth="10.0" prefWidth="138.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="67.0" minWidth="10.0" prefWidth="29.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="140.0" text="Ready To Vote" />
</children>
</GridPane>
</children>
</GridPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="6">
<top>
<Button mnemonicParsing="false" text="Lodge appeal" BorderPane.alignment="CENTER" />
</top>
</BorderPane>
</children>
</GridPane>

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import java.lang.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane alignment="center" hgap="10" prefHeight="267.0" prefWidth="541.0" vgap="10" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="set_up_complete.SetUpCompleteController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane prefHeight="348.0" prefWidth="547.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<GridPane prefHeight="288.0" prefWidth="547.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="143.0" minHeight="10.0" prefHeight="143.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<Label text="This is the name of the Election" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="134.0" minWidth="10.0" prefWidth="88.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="445.0" minWidth="10.0" prefWidth="372.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="179.0" minWidth="10.0" prefWidth="85.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<center>
<Separator prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="177.0" minWidth="10.0" prefWidth="98.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="267.0" minWidth="10.0" prefWidth="267.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<top>
<Label prefHeight="30.0" prefWidth="267.0" text="Polling Station Setup Is Complete " BorderPane.alignment="CENTER">
<font>
<Font size="17.5" />
</font>
</Label>
</top>
</BorderPane>
</children>
</GridPane>
<GridPane GridPane.rowIndex="2">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
<center>
<Label text="Go to polling station dashboard" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
<center>
<Button mnemonicParsing="false" onMouseClicked="#GoToPollingStationDashboard" onMousePressed="#GoToPollingStationDashboard" text="Ok" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
</children>
</AnchorPane>
</children>
</GridPane>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import javafx.scene.image.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane prefHeight="348.0" prefWidth="547.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<GridPane layoutX="-4.0" layoutY="-14.0" prefHeight="358.0" prefWidth="558.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<AnchorPane GridPane.columnIndex="1">
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<ImageView fx:id="LoadingGif" BorderPane.alignment="CENTER">
<image>
<Image url="@/images/loadingGif.gif" />
</image>
</ImageView>
</center>
</BorderPane>
</children>
</AnchorPane>
</children>
</GridPane>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<center>
<Label prefHeight="17.0" prefWidth="573.0" text="Initializing Polling Station" BorderPane.alignment="CENTER">
<padding>
<Insets left="220.0" />
</padding>
</Label>
</center>
</BorderPane>
</children>
</GridPane>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Meerkat Logo" />
</children>
</GridPane>
</children>
</GridPane>
</children>
</AnchorPane>
</children>
</GridPane>

View File

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created By Vladimir Eliezer Tokarev !-->
<?import javafx.scene.text.*?>
<?import javafx.scene.image.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="uploading_to_bulletin_board.UploadingToBulletinBoardController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane prefHeight="348.0" prefWidth="547.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<GridPane layoutX="-4.0" layoutY="-14.0" prefHeight="358.0" prefWidth="558.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="177.0" minHeight="10.0" prefHeight="78.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="213.0" minHeight="10.0" prefHeight="75.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="175.0" minHeight="10.0" prefHeight="175.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="36.0" minHeight="10.0" prefHeight="25.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="60.0" minHeight="10.0" prefHeight="40.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0">
<bottom>
<Label prefHeight="17.0" prefWidth="214.0" text=" Election Parameters being loaded...." BorderPane.alignment="CENTER" />
</bottom>
</BorderPane>
<GridPane prefHeight="42.0" prefWidth="566.0" GridPane.rowIndex="1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="116.0" minWidth="10.0" prefWidth="68.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="455.0" minWidth="10.0" prefWidth="422.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="181.0" minWidth="10.0" prefWidth="65.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="41.0" prefWidth="428.0" GridPane.columnIndex="1">
<center>
<Separator prefHeight="2.0" prefWidth="446.0" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</GridPane>
<GridPane prefHeight="7.0" prefWidth="558.0" GridPane.rowIndex="2">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="291.0" minWidth="10.0" prefWidth="269.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="10.0" prefWidth="103.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="20.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<top>
<Label text="Station Fingerprit:" BorderPane.alignment="CENTER" />
</top>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
<center>
<GridPane BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="280.0" minWidth="10.0" prefWidth="32.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="497.0" minWidth="10.0" prefWidth="497.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="429.0" minWidth="10.0" prefWidth="32.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="25.0" minHeight="8.0" prefHeight="8.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="72.0" minHeight="10.0" prefHeight="72.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="24.0" minHeight="9.0" prefHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: #a9a9a9;" GridPane.columnIndex="1" GridPane.rowIndex="1">
<center>
<Label prefHeight="36.0" prefWidth="486.0" style="-fx-background-color: #a9a9a9;" text="43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8" BorderPane.alignment="CENTER">
<font>
<Font size="24.0" />
</font></Label>
</center>
</BorderPane>
</children>
</GridPane>
</center>
</BorderPane>
<GridPane GridPane.rowIndex="2">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="183.0" minWidth="10.0" prefWidth="161.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="340.0" minWidth="10.0" prefWidth="246.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="179.0" minWidth="10.0" prefWidth="151.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="54.0" minHeight="10.0" prefHeight="28.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="89.0" minHeight="10.0" prefHeight="89.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
<top>
<Label text="Waiting for Verification" BorderPane.alignment="CENTER" />
</top>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<top>
<ImageView fx:id="LoadingGif" BorderPane.alignment="CENTER">
<image>
<Image url="@/images/VerticalLoading.gif" />
</image>
</ImageView>
</top>
</BorderPane>
<BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
<center>
<Button mnemonicParsing="false" onMouseClicked="#Override" onMousePressed="#Override" text="Override" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</GridPane>
</children>
</GridPane>
</children>
</AnchorPane>
</children>
</GridPane>

View File

@ -0,0 +1 @@
signed-messages/* -text

View File

@ -0,0 +1,6 @@
Certs and private keys for testing generated using OpenSSL
.crt and .pem files are in PEM format
.der files are in binary DER format
files that have a name of the form *-with-password-xxxx.pem are encrypted with the password xxxx

View File

@ -0,0 +1,8 @@
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,243D718A0D80C59590E582A26E87A49C
RG6ITUTIdbJdWYX57oMn3tTCzHJSTjXAIZLjoVxy/v4UFYjluaFhGonIlbH1q2pP
ueu29Q3eT6144ypB8ARUJ1x0kRX1OL9zNHgdF9ulrCf9/nhGyC2nL+tHZ0YPbxoQ
+6yCQcRWvjUXLVzPEUnwMuHXJDpaXES8X0R4CISQKIA=
-----END EC PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQge8JqCoaLoZq61aQki5Xm
GppcfAAkhHDGNQw/wLof5LmhRANCAAQJD1kW6BsNkRY9tslaugpOJOaoKX4uBz4S
Q96lPaPWkatNVgQchwNeB/hdjZwNuwE7A7XAwr69HFmhXRhsM005
-----END PRIVATE KEY-----

View File

@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAECQ9ZFugbDZEWPbbJWroKTiTmqCl+Lgc+
EkPepT2j1pGrTVYEHIcDXgf4XY2cDbsBOwO1wMK+vRxZoV0YbDNNOQ==
-----END PUBLIC KEY-----

View File

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDFjCCArygAwIBAgICEAAwCgYIKoZIzj0EAwIwgYIxKTAnBgNVBAMMIE1lZXJr
YXQgVm90aW5nIEludGVybWVkaWF0ZSBDQSAxMRMwEQYDVQQIDApTb21lLVN0YXRl
MQswCQYDVQQGEwJJTDEVMBMGA1UECgwMSURDIEhlcnpsaXlhMRwwGgYDVQQLDBNN
ZWVya2F0IFZvdGluZyBUZWFtMB4XDTE1MTExMTE2MTM1NFoXDTI1MTEwODE2MTM1
NFowbjEaMBgGA1UEAwwRUG9sbGluZyBTdGF0aW9uIDExEzARBgNVBAgMClNvbWUt
U3RhdGUxCzAJBgNVBAYTAklMMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAECQ9ZFugb
DZEWPbbJWroKTiTmqCl+Lgc+EkPepT2j1pGrTVYEHIcDXgf4XY2cDbsBOwO1wMK+
vRxZoV0YbDNNOaOCATYwggEyMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLamS8o2
hFNd0vWy/irEBNWVNwFXMB8GA1UdIwQYMBaAFBeyv0c75eT6PNumHo9TZ2B9vtcp
MAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBEBgNVHR8EPTA7MDmg
N6A1hjNodHRwOi8vY3JsLmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRp
YXRlMS5jcmwwegYIKwYBBQUHAQEEbjBsMEEGCCsGAQUFBzAChjVodHRwOi8vcGtp
LmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRpYXRlLWNhLmNydDAnBggr
BgEFBQcwAYYbaHR0cDovL29jc3AuZmFjdGNlbnRlci5vcmcvMAoGCCqGSM49BAMC
A0gAMEUCIQD6QbhNNmB3AVVqhmXuiLA7WF6raShw6n0g/VloVGQebQIgEvxYclpO
MMynt5wH6X65rtn4Q1EGaDMvNbFweCDsldk=
-----END CERTIFICATE-----

View File

@ -0,0 +1,9 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIBOjCB4QIBADCBgTELMAkGA1UEBhMCSUwxEzARBgNVBAgMClNvbWUtU3RhdGUx
ETAPBgNVBAcMCEhlcnpsaXlhMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMRowGAYDVQQDDBFQb2xsaW5nIFN0YXRpb24gMTBW
MBAGByqGSM49AgEGBSuBBAAKA0IABAkPWRboGw2RFj22yVq6Ck4k5qgpfi4HPhJD
3qU9o9aRq01WBByHA14H+F2NnA27ATsDtcDCvr0cWaFdGGwzTTmgADAKBggqhkjO
PQQDAgNIADBFAiEA8gmIhALr7O5M1QLReGH3jheildTIr1mDWl14WyMf9U4CIF23
mInyo4VqNHLzxMLg5Cn3Oddokng3OXa63y4nTfv+
-----END CERTIFICATE REQUEST-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgYpBEO+XWm/n6VPeMVK76
mrZkDTpiwLsDykG7M4fU5RKhRANCAAR71/kVGyA3hdxcLBBT3NPQF6R3LholmLRN
qhnvHqzJWuy7ev+Xbuxtt9AN0ajyeFDy8Oe1bUSidnLyQi+nXC0f
-----END PRIVATE KEY-----

View File

@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEe9f5FRsgN4XcXCwQU9zT0Bekdy4aJZi0
TaoZ7x6syVrsu3r/l27sbbfQDdGo8nhQ8vDntW1EonZy8kIvp1wtHw==
-----END PUBLIC KEY-----

View File

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDFjCCArygAwIBAgICEAEwCgYIKoZIzj0EAwIwgYIxKTAnBgNVBAMMIE1lZXJr
YXQgVm90aW5nIEludGVybWVkaWF0ZSBDQSAxMRMwEQYDVQQIDApTb21lLVN0YXRl
MQswCQYDVQQGEwJJTDEVMBMGA1UECgwMSURDIEhlcnpsaXlhMRwwGgYDVQQLDBNN
ZWVya2F0IFZvdGluZyBUZWFtMB4XDTE1MTExMTE2MjAzM1oXDTI1MTEwODE2MjAz
M1owbjEaMBgGA1UEAwwRUG9sbGluZyBTdGF0aW9uIDIxEzARBgNVBAgMClNvbWUt
U3RhdGUxCzAJBgNVBAYTAklMMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEe9f5FRsg
N4XcXCwQU9zT0Bekdy4aJZi0TaoZ7x6syVrsu3r/l27sbbfQDdGo8nhQ8vDntW1E
onZy8kIvp1wtH6OCATYwggEyMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKCdquYj
DGHqAHt+4PIDlw0h2UvuMB8GA1UdIwQYMBaAFBeyv0c75eT6PNumHo9TZ2B9vtcp
MAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBEBgNVHR8EPTA7MDmg
N6A1hjNodHRwOi8vY3JsLmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRp
YXRlMS5jcmwwegYIKwYBBQUHAQEEbjBsMEEGCCsGAQUFBzAChjVodHRwOi8vcGtp
LmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRpYXRlLWNhLmNydDAnBggr
BgEFBQcwAYYbaHR0cDovL29jc3AuZmFjdGNlbnRlci5vcmcvMAoGCCqGSM49BAMC
A0gAMEUCIQDpo5B0vvEJSax3YzOMfE8l0pfDUIKLdBWJVGeq0VLtIgIgVr0+4/0e
n+R+l1OVOLh2GirloOgbv5Ch5BQ2pQNAG2Y=
-----END CERTIFICATE-----

View File

@ -0,0 +1,9 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIBOzCB4QIBADCBgTELMAkGA1UEBhMCSUwxEzARBgNVBAgMClNvbWUtU3RhdGUx
ETAPBgNVBAcMCEhlcnpsaXlhMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMRowGAYDVQQDDBFQb2xsaW5nIFN0YXRpb24gMjBW
MBAGByqGSM49AgEGBSuBBAAKA0IABHvX+RUbIDeF3FwsEFPc09AXpHcuGiWYtE2q
Ge8erMla7Lt6/5du7G230A3RqPJ4UPLw57VtRKJ2cvJCL6dcLR+gADAKBggqhkjO
PQQDAgNJADBGAiEA6Ls/ojRaZT+u4YeOBYcPbRcJE3jSTe1Sm/lR7fDyEhMCIQCk
UOca+e2b8+CqM3CURBv6TqUMmZ3HeMRvEAxFPqOWSw==
-----END CERTIFICATE REQUEST-----

View File

@ -0,0 +1,8 @@
-----BEGIN CERTIFICATE-----
MIIBGjCBw6ADAgECAgEBMAkGByqGSM49BAEwEDEOMAwGA1UEAxMFY2VydDEwHhcN
MTUxMTI4MTEwNDAwWhcNMTYxMTI4MTEwNDAwWjAQMQ4wDAYDVQQDEwVjZXJ0MTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABLiyFMVWQtFi4fCjOGLDwQcdjyr48Y8j
P+eLEIGMYKKv8bqL3Vchs0iOPoyGH6jxYj2/ShnLSIEuIMPfVgV9kxSjDzANMAsG
A1UdDwQEAwIHgDAJBgcqhkjOPQQBA0cAMEQCIH7R0AWO0AYiHOs+QsHEpWiebFc1
cyxCKJGkf8KA1KJrAiArCia7PWl0KzaqA0RQC4J0BKp4rZo1PCqKI8DirKQf/Q==
-----END CERTIFICATE-----

View File

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDFjCCArygAwIBAgICEAAwCgYIKoZIzj0EAwIwgYIxKTAnBgNVBAMMIE1lZXJr
YXQgVm90aW5nIEludGVybWVkaWF0ZSBDQSAxMRMwEQYDVQQIDApTb21lLVN0YXRl
MQswCQYDVQQGEwJJTDEVMBMGA1UECgwMSURDIEhlcnpsaXlhMRwwGgYDVQQLDBNN
ZWVya2F0IFZvdGluZyBUZWFtMB4XDTE1MTExMTE2MTM1NFoXDTI1MTEwODE2MTM1
NFowbjEaMBgGA1UEAwwRUG9sbGluZyBTdGF0aW9uIDExEzARBgNVBAgMClNvbWUt
U3RhdGUxCzAJBgNVBAYTAklMMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAECQ9ZFugb
DZEWPbbJWroKTiTmqCl+Lgc+EkPepT2j1pGrTVYEHIcDXgf4XY2cDbsBOwO1wMK+
vRxZoV0YbDNNOaOCATYwggEyMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLamS8o2
hFNd0vWy/irEBNWVNwFXMB8GA1UdIwQYMBaAFBeyv0c75eT6PNumHo9TZ2B9vtcp
MAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBEBgNVHR8EPTA7MDmg
N6A1hjNodHRwOi8vY3JsLmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRp
YXRlMS5jcmwwegYIKwYBBQUHAQEEbjBsMEEGCCsGAQUFBzAChjVodHRwOi8vcGtp
LmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRpYXRlLWNhLmNydDAnBggr
BgEFBQcwAYYbaHR0cDovL29jc3AuZmFjdGNlbnRlci5vcmcvMAoGCCqGSM49BAMC
A0gAMEUCIQD6QbhNNmB3AVVqhmXuiLA7WF6raShw6n0g/VloVGQebQIgEvxYclpO
MMynt5wH6X65rtn4Q1EGaDMvNbFweCDsldk=
-----END CERTIFICATE-----

View File

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDFjCCArygAwIBAgICEAEwCgYIKoZIzj0EAwIwgYIxKTAnBgNVBAMMIE1lZXJr
YXQgVm90aW5nIEludGVybWVkaWF0ZSBDQSAxMRMwEQYDVQQIDApTb21lLVN0YXRl
MQswCQYDVQQGEwJJTDEVMBMGA1UECgwMSURDIEhlcnpsaXlhMRwwGgYDVQQLDBNN
ZWVya2F0IFZvdGluZyBUZWFtMB4XDTE1MTExMTE2MjAzM1oXDTI1MTEwODE2MjAz
M1owbjEaMBgGA1UEAwwRUG9sbGluZyBTdGF0aW9uIDIxEzARBgNVBAgMClNvbWUt
U3RhdGUxCzAJBgNVBAYTAklMMRUwEwYDVQQKDAxJREMgSGVyemxpeWExFzAVBgNV
BAsMDk1lZXJrYXQgVm90aW5nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEe9f5FRsg
N4XcXCwQU9zT0Bekdy4aJZi0TaoZ7x6syVrsu3r/l27sbbfQDdGo8nhQ8vDntW1E
onZy8kIvp1wtH6OCATYwggEyMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKCdquYj
DGHqAHt+4PIDlw0h2UvuMB8GA1UdIwQYMBaAFBeyv0c75eT6PNumHo9TZ2B9vtcp
MAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATBEBgNVHR8EPTA7MDmg
N6A1hjNodHRwOi8vY3JsLmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRp
YXRlMS5jcmwwegYIKwYBBQUHAQEEbjBsMEEGCCsGAQUFBzAChjVodHRwOi8vcGtp
LmZhY3RjZW50ZXIub3JnL21lZXJrYXQtaW50ZXJtZWRpYXRlLWNhLmNydDAnBggr
BgEFBQcwAYYbaHR0cDovL29jc3AuZmFjdGNlbnRlci5vcmcvMAoGCCqGSM49BAMC
A0gAMEUCIQDpo5B0vvEJSax3YzOMfE8l0pfDUIKLdBWJVGeq0VLtIgIgVr0+4/0e
n+R+l1OVOLh2GirloOgbv5Ch5BQ2pQNAG2Y=
-----END CERTIFICATE-----

View File

@ -0,0 +1,2 @@
V 251108161354Z 1000 unknown /CN=Polling Station 1/ST=Some-State/C=IL/O=IDC Herzliya/OU=Meerkat Voting
V 251108162033Z 1001 unknown /CN=Polling Station 2/ST=Some-State/C=IL/O=IDC Herzliya/OU=Meerkat Voting

View File

@ -0,0 +1 @@
unique_subject = no

View File

@ -0,0 +1 @@
unique_subject = no

View File

@ -0,0 +1 @@
V 251108161354Z 1000 unknown /CN=Polling Station 1/ST=Some-State/C=IL/O=IDC Herzliya/OU=Meerkat Voting

View File

@ -0,0 +1 @@
1002

View File

@ -0,0 +1 @@
1001

View File

@ -0,0 +1 @@
1000

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgJvMhOfcQfdK/42QlBbri
IYXLM/gVHq/yppOykDqB3s6hRANCAAQoShAtCGW5c9pk/4/sKN1qjCgDKngqJpba
kku6cIDqXDr+aHsl+/KdSHd46OI3fEynl+/Pc85wRsaY6Z7b1PdS
-----END PRIVATE KEY-----

View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDfDCCAyGgAwIBAgICEAAwCgYIKoZIzj0EAwIwgbAxCzAJBgNVBAYTAklMMRMw
EQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQHDAhIZXJ6bGl5YTEUMBIGA1UECgwL
SURDIEhlcmxpeWExHzAdBgNVBAsMFk1lZXJrYXQgVm90aW5nIFByb2plY3QxGDAW
BgNVBAMMD1Rlc3RpbmcgUm9vdCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGluZy1j
YUBmYWN0Y2VudGVyLm9yZzAeFw0xNTExMTExNjA4MDJaFw0yNTExMDgxNjA4MDJa
MIGCMSkwJwYDVQQDDCBNZWVya2F0IFZvdGluZyBJbnRlcm1lZGlhdGUgQ0EgMTET
MBEGA1UECAwKU29tZS1TdGF0ZTELMAkGA1UEBhMCSUwxFTATBgNVBAoMDElEQyBI
ZXJ6bGl5YTEcMBoGA1UECwwTTWVlcmthdCBWb3RpbmcgVGVhbTBWMBAGByqGSM49
AgEGBSuBBAAKA0IABChKEC0IZblz2mT/j+wo3WqMKAMqeComltqSS7pwgOpcOv5o
eyX78p1Id3jo4jd8TKeX789zznBGxpjpntvU91KjggFYMIIBVDAPBgNVHRMBAf8E
BTADAQH/MB0GA1UdDgQWBBQXsr9HO+Xk+jzbph6PU2dgfb7XKTAfBgNVHSMEGDAW
gBSJD9L1fLmX4A9CBoLsYXn3OPy1ojALBgNVHQ8EBAMCAaYwEwYDVR0lBAwwCgYI
KwYBBQUHAwEwPgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2NybC5mYWN0Y2VudGVy
Lm9yZy9tZWVya2F0LXJvb3QtY2EuY3JsMCsGA1UdEQQkMCKCIE1lZXJrYXQgVm90
aW5nIEludGVybWVkaWF0ZSBDQSAxMHIGCCsGAQUFBwEBBGYwZDA5BggrBgEFBQcw
AoYtaHR0cDovL3BraS5mYWN0Y2VudGVyLm9yZy9tZWVya2F0LXJvb3QtY2EuY3J0
MCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5mYWN0Y2VudGVyLm9yZy8wCgYIKoZI
zj0EAwIDSQAwRgIhALEMHq2ssC9rLXiG8v6NcZetwwxdu3B3LW9s0KeGoNIEAiEA
skA56tMnhiZe38msyanRyRrAHyBI2fGs6GP3UBrg2P8=
-----END CERTIFICATE-----

View File

@ -0,0 +1,10 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIBTTCB9QIBADCBlTELMAkGA1UEBhMCSUwxEzARBgNVBAgMClNvbWUtU3RhdGUx
ETAPBgNVBAcMCEhlcnpsaXlhMRUwEwYDVQQKDAxJREMgSGVyemxpeWExHDAaBgNV
BAsME01lZXJrYXQgVm90aW5nIFRlYW0xKTAnBgNVBAMMIE1lZXJrYXQgVm90aW5n
IEludGVybWVkaWF0ZSBDQSAxMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEKEoQLQhl
uXPaZP+P7CjdaowoAyp4KiaW2pJLunCA6lw6/mh7JfvynUh3eOjiN3xMp5fvz3PO
cEbGmOme29T3UqAAMAoGCCqGSM49BAMCA0cAMEQCIFlyJO5NFqnMUu5hOlQa872E
yy0V3zkqeN6Aly+LtEQqAiAfHwbi1lkJOZT2tOX8gfJzcac2jKmbgIhmITNq7uma
Wg==
-----END CERTIFICATE REQUEST-----

View File

@ -0,0 +1,46 @@
[ ca ]
default_ca = myca
[ crl_ext ]
issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always
[ myca ]
dir = ./
new_certs_dir = $dir
unique_subject = no
certificate = $dir/intermediate-ca-1.crt
database = $dir/certindex
private_key = $dir/intermediate-ca-1-private-key.pem
serial = $dir/certserial
default_days = 3650
default_md = sha256
policy = myca_policy
x509_extensions = myca_extensions
crlnumber = $dir/crlnumber
default_crl_days = 3650
[ myca_policy ]
commonName = supplied
stateOrProvinceName = optional
countryName = optional
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional
[ myca_extensions ]
basicConstraints = critical,CA:FALSE
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
authorityInfoAccess = @ocsp_section
[crl_section]
URI.0 = http://crl.factcenter.org/meerkat-intermediate1.crl
[ocsp_section]
caIssuers;URI.0 = http://pki.factcenter.org/meerkat-intermediate-ca.crt
OCSP;URI.0 = http://ocsp.factcenter.org/

View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDfDCCAyGgAwIBAgICEAAwCgYIKoZIzj0EAwIwgbAxCzAJBgNVBAYTAklMMRMw
EQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQHDAhIZXJ6bGl5YTEUMBIGA1UECgwL
SURDIEhlcmxpeWExHzAdBgNVBAsMFk1lZXJrYXQgVm90aW5nIFByb2plY3QxGDAW
BgNVBAMMD1Rlc3RpbmcgUm9vdCBDQTEoMCYGCSqGSIb3DQEJARYZdGVzdGluZy1j
YUBmYWN0Y2VudGVyLm9yZzAeFw0xNTExMTExNjA4MDJaFw0yNTExMDgxNjA4MDJa
MIGCMSkwJwYDVQQDDCBNZWVya2F0IFZvdGluZyBJbnRlcm1lZGlhdGUgQ0EgMTET
MBEGA1UECAwKU29tZS1TdGF0ZTELMAkGA1UEBhMCSUwxFTATBgNVBAoMDElEQyBI
ZXJ6bGl5YTEcMBoGA1UECwwTTWVlcmthdCBWb3RpbmcgVGVhbTBWMBAGByqGSM49
AgEGBSuBBAAKA0IABChKEC0IZblz2mT/j+wo3WqMKAMqeComltqSS7pwgOpcOv5o
eyX78p1Id3jo4jd8TKeX789zznBGxpjpntvU91KjggFYMIIBVDAPBgNVHRMBAf8E
BTADAQH/MB0GA1UdDgQWBBQXsr9HO+Xk+jzbph6PU2dgfb7XKTAfBgNVHSMEGDAW
gBSJD9L1fLmX4A9CBoLsYXn3OPy1ojALBgNVHQ8EBAMCAaYwEwYDVR0lBAwwCgYI
KwYBBQUHAwEwPgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2NybC5mYWN0Y2VudGVy
Lm9yZy9tZWVya2F0LXJvb3QtY2EuY3JsMCsGA1UdEQQkMCKCIE1lZXJrYXQgVm90
aW5nIEludGVybWVkaWF0ZSBDQSAxMHIGCCsGAQUFBwEBBGYwZDA5BggrBgEFBQcw
AoYtaHR0cDovL3BraS5mYWN0Y2VudGVyLm9yZy9tZWVya2F0LXJvb3QtY2EuY3J0
MCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5mYWN0Y2VudGVyLm9yZy8wCgYIKoZI
zj0EAwIDSQAwRgIhALEMHq2ssC9rLXiG8v6NcZetwwxdu3B3LW9s0KeGoNIEAiEA
skA56tMnhiZe38msyanRyRrAHyBI2fGs6GP3UBrg2P8=
-----END CERTIFICATE-----

View File

@ -0,0 +1 @@
V 251108160802Z 1000 unknown /CN=Meerkat Voting Intermediate CA 1/ST=Some-State/C=IL/O=IDC Herzliya/OU=Meerkat Voting Team

View File

@ -0,0 +1 @@
unique_subject = no

View File

@ -0,0 +1 @@
1001

View File

@ -0,0 +1 @@
1000

View File

@ -0,0 +1 @@
1000

View File

@ -0,0 +1,61 @@
[ ca ]
default_ca = myca
[ crl_ext ]
issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always
[ myca ]
dir = ./
new_certs_dir = $dir
unique_subject = no
certificate = $dir/root-ca.crt
database = $dir/certindex
private_key = $dir/root-ca-private-key.pem
serial = $dir/certserial
default_days = 3650
default_md = sha256
policy = myca_policy
x509_extensions = myca_extensions
crlnumber = $dir/crlnumber
default_crl_days = 3650
[ myca_policy ]
commonName = supplied
stateOrProvinceName = optional
countryName = optional
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional
[ myca_extensions ]
basicConstraints = critical,CA:TRUE
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
subjectAltName = @alt_names
authorityInfoAccess = @ocsp_section
[ v3_ca ]
basicConstraints = critical,CA:TRUE,pathlen:0
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
subjectAltName = @alt_names
authorityInfoAccess = @ocsp_section
[alt_names]
DNS.0 = Meerkat Voting Intermediate CA 1
[crl_section]
URI.0 = http://crl.factcenter.org/meerkat-root-ca.crl
[ocsp_section]
caIssuers;URI.0 = http://pki.factcenter.org/meerkat-root-ca.crt
OCSP;URI.0 = http://ocsp.factcenter.org/

View File

@ -0,0 +1,8 @@
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,B8CA131346FD6C9568A6C80935F2AF14
8q1seEln39/tQTo5KqN+qNRhd0fQ0oC71dYpfTHsP0NlNmjMtwKo2niFwzjxnSyP
vpJjGzUlnq30ucbeJA7CDm/1cmYAU5gGQ7gldgpi2TQVS+EBjqi/Y5P9AlrgLv6K
tKe4AvkqQcpi4ZvlUL9xmNaM9jEH4syopR9YClEMfa8=
-----END EC PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIEi9y6pSKu1kDZcIfQQAnojl1iFxm32W0DVCp2P6HRrkoAcGBSuBBAAK
oUQDQgAEoijIYF12bpA0tcjyQnWZGQ4lzdBGR+hK/5al/M+zFgFwvWHoWf6yJsSB
ymviB5yUaH+cE+/3LXlGbpRzYKLBYQ==
-----END EC PRIVATE KEY-----

View File

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICpTCCAkygAwIBAgIJAJoVb07aGgNaMAoGCCqGSM49BAMCMIGwMQswCQYDVQQG
EwJJTDETMBEGA1UECAwKU29tZS1TdGF0ZTERMA8GA1UEBwwISGVyemxpeWExFDAS
BgNVBAoMC0lEQyBIZXJsaXlhMR8wHQYDVQQLDBZNZWVya2F0IFZvdGluZyBQcm9q
ZWN0MRgwFgYDVQQDDA9UZXN0aW5nIFJvb3QgQ0ExKDAmBgkqhkiG9w0BCQEWGXRl
c3RpbmctY2FAZmFjdGNlbnRlci5vcmcwHhcNMTUxMTExMTUzODE4WhcNMjUxMTA4
MTUzODE4WjCBsDELMAkGA1UEBhMCSUwxEzARBgNVBAgMClNvbWUtU3RhdGUxETAP
BgNVBAcMCEhlcnpsaXlhMRQwEgYDVQQKDAtJREMgSGVybGl5YTEfMB0GA1UECwwW
TWVlcmthdCBWb3RpbmcgUHJvamVjdDEYMBYGA1UEAwwPVGVzdGluZyBSb290IENB
MSgwJgYJKoZIhvcNAQkBFhl0ZXN0aW5nLWNhQGZhY3RjZW50ZXIub3JnMFYwEAYH
KoZIzj0CAQYFK4EEAAoDQgAEoijIYF12bpA0tcjyQnWZGQ4lzdBGR+hK/5al/M+z
FgFwvWHoWf6yJsSBymviB5yUaH+cE+/3LXlGbpRzYKLBYaNQME4wHQYDVR0OBBYE
FIkP0vV8uZfgD0IGguxhefc4/LWiMB8GA1UdIwQYMBaAFIkP0vV8uZfgD0IGguxh
efc4/LWiMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDRwAwRAIgNftHrW30Git8
VFQKyMCkasauSpEHpAGdcRAhRHqUQMUCIDxw++trz/Iv8818xVB1ARr9EQAmH0aC
7MHETGuiBC7L
-----END CERTIFICATE-----

View File

@ -0,0 +1,3 @@
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----

View File

@ -0,0 +1 @@
0D r=¥|n“Ò2ɪ‰!S»®[gCŸ$ä°Ž/ Ê”(Âò½ ^esüHLŸ½o,oV®”§ce²p0(èXÆ]&@

View File

@ -1,6 +1,6 @@
#Fri Jan 29 21:00:29 IST 2016
#Sat Jul 02 14:15:59 IDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip

View File

@ -1,15 +1,52 @@
package meerkat.util;
import meerkat.protobuf.BulletinBoardAPI.*;
import meerkat.crypto.DigitalSignature;
import meerkat.protobuf.BulletinBoardAPI.BulletinBoardMessage;
import meerkat.protobuf.BulletinBoardAPI.UnsignedBulletinBoardMessage;
import meerkat.protobuf.Crypto;
import java.util.LinkedList;
import java.util.List;
import java.security.SignatureException;
import java.util.*;
/**
* Created by Arbel Deutsch Peled on 16-Feb-16.
*/
public class BulletinBoardUtils {
/**
* Creates BulletinBoardMessage with UnsignedBulletinBoardMessage and its signature
* signed by all given DigitalSignatures
*
* @param unsignedMessage BasicMessage
* @param signer collection of DigitalSignature which will sign the
* UnsignedBulletinBoardMessage message
* @return BulletinBoardMessage
*/
public static BulletinBoardMessage signBulletinBoardMessage(UnsignedBulletinBoardMessage unsignedMessage,
DigitalSignature signer) throws SignatureException {
BulletinBoardMessage.Builder bulletinBoardMessage = BulletinBoardMessage.newBuilder();
bulletinBoardMessage.setMsg(unsignedMessage);
signer.updateContent(unsignedMessage);
Crypto.Signature signature = signer.sign();
bulletinBoardMessage.addSig(signature);
return bulletinBoardMessage.build();
}
/**
* Gets the latest message from collection of messages (BulletinBoardMessage) based on timestamp
* @param messages List of BulletinBoardMessage
* @return BulletinBoardMessage
*/
public static BulletinBoardMessage getLatestMessage(Collection<BulletinBoardMessage> messages){
return Collections.max(messages, new Comparator<BulletinBoardMessage>() {
@Override
public int compare(BulletinBoardMessage o1, BulletinBoardMessage o2) {
TimestampComparator comparator = new TimestampComparator();
return comparator.compare(o1.getMsg().getTimestamp(), o2.getMsg().getTimestamp());
}
});
}
/**
* Searches the tags in the message for one that begins with given prefix
* @param message is the message to search
@ -17,7 +54,6 @@ public class BulletinBoardUtils {
* @return the tag without the prefix, if found, or null if not found
*/
public static String findTagWithPrefix(BulletinBoardMessage message, String prefix) {
for (String tag : message.getMsg().getTagList()){
if (tag.startsWith(prefix)) {
return tag.substring(prefix.length());
@ -28,6 +64,22 @@ public class BulletinBoardUtils {
}
/**
* Gets list of tags values from given messages (tagName values)
* @param messages list of messages from which we want to retrieve specific tag values
* @return List<String>
*/
public static List<String> GetListOfTags(List<BulletinBoardMessage> messages, String tagName) {
List<String> tagsValues = new ArrayList<>(messages.size());
for ( int i = 0 ; i < messages.size() ; i++ ){
BulletinBoardMessage message = messages.get(i);
tagsValues.add(findTagWithPrefix(message, tagName));
}
return tagsValues;
}
/**
* Searches the tags in a message for tags that do not contain a given list of prefixes
* @param message is the message to search

View File

@ -7,7 +7,7 @@ import java.util.Comparator;
/**
* Created by Arbel Deutsch Peled on 20-Feb-16.
*/
public class TimestampComparator implements Comparator<com.google.protobuf.Timestamp> {
public class TimestampComparator implements Comparator<Timestamp> {
@Override
public int compare(Timestamp o1, Timestamp o2) {

View File

@ -0,0 +1,23 @@
syntax = "proto3";
package meerkat;
option java_package = "meerkat.protobuf";
message VoterID{
string id = 1;
}
message VoterInfo{
VoterID id = 1;
string info = 2;
}
message GroupID{
string id = 1;
}
message VoterRegistryMessage{
VoterID voterID = 1;
repeated GroupID groupID = 2;
}

View File

@ -0,0 +1,222 @@
plugins {
id "us.kirchmeier.capsule" version "1.0.1"
id 'com.google.protobuf' version '0.7.0'
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven-publish'
// Uncomment the lines below to define an application
// (this will also allow you to build a "fatCapsule" which includes
// the entire application, including all dependencies in a single jar)
apply plugin: 'application'
mainClassName='splash_screen_on_boot.Main'
// Is this a snapshot version?
ext { isSnapshot = false }
ext {
groupId = 'org.factcenter.meerkat'
nexusRepository = "https://cs.idc.ac.il/nexus/content/groups/${isSnapshot ? 'unstable' : 'public'}/"
// Credentials for IDC nexus repositories (needed only for using unstable repositories and publishing)
// Should be set in ${HOME}/.gradle/gradle.properties
nexusUser = project.hasProperty('nexusUser') ? project.property('nexusUser') : ""
nexusPassword = project.hasProperty('nexusPassword') ? project.property('nexusPassword') : ""
}
description = "GUI For polling station"
// Your project version
version = "0.0"
version += "${isSnapshot ? '-SNAPSHOT' : ''}"
dependencies {
// Meerkat common
compile project(':meerkat-common')
// Logging
compile 'org.slf4j:slf4j-api:1.7.7'
runtime 'ch.qos.logback:logback-classic:1.1.2'
runtime 'ch.qos.logback:logback-core:1.1.2'
// Google protobufs
compile 'com.google.protobuf:protobuf-java:3.+'
testCompile 'junit:junit:4.+'
runtime 'org.codehaus.groovy:groovy:2.4.+'
}
/*==== You probably don't have to edit below this line =======*/
// Setup test configuration that can appear as a dependency in
// other subprojects
configurations {
testOutput.extendsFrom (testCompile)
}
task testJar(type: Jar, dependsOn: testClasses) {
classifier = 'tests'
from sourceSets.test.output
}
artifacts {
testOutput testJar
}
// The run task added by the application plugin
// is also of type JavaExec.
tasks.withType(JavaExec) {
// Assign all Java system properties from
// the command line to the JavaExec task.
systemProperties System.properties
}
protobuf {
// Configure the protoc executable
protoc {
// Download from repositories
artifact = 'com.google.protobuf:protoc:3.+'
}
}
idea {
module {
project.sourceSets.each { sourceSet ->
def srcDir = "${protobuf.generatedFilesBaseDir}/$sourceSet.name/java"
println "Adding $srcDir"
// add protobuf generated sources to generated source dir.
if ("test".equals(sourceSet.name)) {
testSourceDirs += file(srcDir)
} else {
sourceDirs += file(srcDir)
}
generatedSourceDirs += file(srcDir)
}
// Don't exclude build directory
excludeDirs -= file(buildDir)
}
}
/*===================================
* "Fat" Build targets
*===================================*/
if (project.hasProperty('mainClassName') && (mainClassName != null)) {
task mavenCapsule(type: MavenCapsule) {
description = "Generate a capsule jar that automatically downloads and caches dependencies when run."
applicationClass mainClassName
destinationDir = buildDir
}
task fatCapsule(type: FatCapsule) {
description = "Generate a single capsule jar containing everything. Use -Pfatmain=... to override main class"
destinationDir = buildDir
def fatMain = hasProperty('fatmain') ? fatmain : mainClassName
applicationClass fatMain
def testJar = hasProperty('test')
if (hasProperty('fatmain')) {
appendix = "fat-${fatMain}"
} else {
appendix = "fat"
}
if (testJar) {
from sourceSets.test.output
}
}
}
/*===================================
* Repositories
*===================================*/
repositories {
// Prefer the local nexus repository (it may have 3rd party artifacts not found in mavenCentral)
maven {
url nexusRepository
if (isSnapshot) {
credentials { username
password
username nexusUser
password nexusPassword
}
}
}
// Use local maven repository
mavenLocal()
// Use 'maven central' for other dependencies.
mavenCentral()
}
task "info" << {
println "Project: ${project.name}"
println "Description: ${project.description}"
println "--------------------------"
println "GroupId: $groupId"
println "Version: $version (${isSnapshot ? 'snapshot' : 'release'})"
println ""
}
info.description 'Print some information about project parameters'
/*===================================
* Publishing
*===================================*/
publishing {
publications {
mavenJava(MavenPublication) {
groupId project.groupId
pom.withXml {
asNode().appendNode('description', project.description)
}
from project.components.java
}
}
repositories {
maven {
url "https://cs.idc.ac.il/nexus/content/repositories/${project.isSnapshot ? 'snapshots' : 'releases'}"
credentials { username
password
username nexusUser
password nexusPassword
}
}
}
}

1
polling-station-gui/gradlew vendored Symbolic link
View File

@ -0,0 +1 @@
../gradlew

View File

@ -0,0 +1,40 @@
package polling_station_dashboard;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import java.util.HashMap;
// TODO: add logging to the process
/**
* Created by Vladimir Eliezer Tokarev on 12/06/2016.
* EventHandlerMap maps events ids (that are part of polling station dashboard)
* to the object that handles this specific event
* when EventHandlerMap gets specific event it activates the handle method of the object
*/
public class EventHandlerMap {
private HashMap<String, EventHandler<Event>> eventIdToHandler;
public EventHandlerMap()
{
this.eventIdToHandler = new HashMap<>();
}
public void Add(String eventId, EventHandler<Event> eventHandler)
{
this.eventIdToHandler.put(eventId, eventHandler);
}
public void Handle(Event event)
{
try {
this.eventIdToHandler.get(((Parent) event.getSource()).getId()).handle(event);
}
catch (RuntimeException e) {
System.out.println("The event map doesn't have this kind of event handler : " + e);
// add logs ...
}
}
}

View File

@ -0,0 +1,56 @@
package polling_station_dashboard;
import javafx.stage.Stage;
import polling_station_dashboard.search.SearchHandler;
import polling_station_dashboard.search.advancedSearch.AdvancedSearchHandler;
import polling_station_dashboard.search.advancedSearch.AdvancedSearchLoader;
import polling_station_dashboard.search.submitVoter.lodgeAppeal.LodgeAppealLoader;
import polling_station_dashboard.search.submitVoter.lodgeAppeal.LodgeAppealVisualUpdater;
import polling_station_dashboard.search.votersFetcher.DummyVotersFetcher;
import polling_station_dashboard.settings.SettingsVisualUpdater;
import polling_station_dashboard.settings.settingsLoader;
import polling_station_dashboard.statusLog.StatusLogLoader;
import polling_station_dashboard.statusLog.StatusLogVisualUpdater;
import java.io.IOException;
/**
* Created by Vladimir Eliezer Tokarev on 12/06/2016.
* EventHandlerMapper creates EventHandlerMap with objects that handles next parts:
* 1. Status Log extension
* 2. Settings extension
* 3. Search Handling
*/
public class EventHandlerMapper {
public static EventHandlerMap CreateEventHandlerMap(Stage primaryStage) throws IOException
{
EventHandlerMap map = new EventHandlerMap();
// maps status log object to settings visual updater
settingsLoader settingsLoader = new settingsLoader(primaryStage);
SettingsVisualUpdater settingsVisualUpdater =
new SettingsVisualUpdater(settingsLoader.GetSettingsInstance(), primaryStage);
map.Add("SettingsButton", settingsVisualUpdater);
map.Add("Settings", settingsVisualUpdater);
// maps settings object to status log visual updater
StatusLogLoader statusLogLoader = new StatusLogLoader(primaryStage);
StatusLogVisualUpdater statusLogVisualUpdater =
new StatusLogVisualUpdater(statusLogLoader.GetStatusLogInstance(), primaryStage);
map.Add("StatusLogButton", statusLogVisualUpdater);
map.Add("StatusLog", statusLogVisualUpdater);
// map advanced search object to its handler
AdvancedSearchLoader advancedSearchLoader = new AdvancedSearchLoader(primaryStage);
AdvancedSearchHandler advancedSearchHandler = new AdvancedSearchHandler(
advancedSearchLoader.GetSettingsInstance(), primaryStage);
map.Add("ExpandAdvanceSearch", advancedSearchHandler);
// map add voter to search button triggered
SearchHandler searchHandler = new SearchHandler(primaryStage, new DummyVotersFetcher());
map.Add("SearchButton", searchHandler);
return map;
}
}

View File

@ -0,0 +1,38 @@
package polling_station_dashboard;
import javafx.fxml.FXML;
import javafx.scene.input.MouseEvent;
/**
* Created by Vladimir Eliezer Tokarev on 28/05/2016.
* PollingStationDashboardController controls the behavior of the polling station dashboard
*/
public class PollingStationDashboardController {
private EventHandlerMap eventHandlerMap;
public void SetEventHandlerMap(EventHandlerMap map)
{
this.eventHandlerMap = map;
}
@FXML
private void OnStatusLogPressed(MouseEvent mousePressed)
{
this.eventHandlerMap.Handle(mousePressed);
}
@FXML
private void OnSettingsPressed(MouseEvent mousePressed)
{
this.eventHandlerMap.Handle(mousePressed);
}
@FXML
private void SearchTrigered(MouseEvent mousePressed)
{
this.eventHandlerMap.Handle(mousePressed);
}
@FXML
private void ExpandAdvanceSearch(MouseEvent mousePressed) { this.eventHandlerMap.Handle(mousePressed);}
}

View File

@ -0,0 +1,36 @@
package polling_station_dashboard;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
/**
* Created by Vladimir Eliezer Tokarev on 28/05/2016
* This class loads the polling station fxml
*/
public class PollingStationDashboardLoader {
private static final String POLLING_STATION_DASHBOARD_FXML_PATH = "/view/dashboard/polling_station_dashboard.fxml";
private Stage currentStage;
public PollingStationDashboardLoader (Stage primaryStage) throws IOException
{
primaryStage.setX(100);
primaryStage.setY(100);
currentStage = primaryStage;
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(POLLING_STATION_DASHBOARD_FXML_PATH));
Parent root = fxmlLoader.load();
PollingStationDashboardController controller = fxmlLoader.getController();
currentStage.setTitle("Polling Station Dashboard");
currentStage.setScene(new Scene(root, 850, 615));
currentStage.show();
controller.SetEventHandlerMap(EventHandlerMapper.CreateEventHandlerMap(primaryStage));
}
}

View File

@ -0,0 +1,96 @@
package polling_station_dashboard.search;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import polling_station_dashboard.search.submitVoter.SubmitVoterLoader;
import polling_station_dashboard.search.votersFetcher.VotersFetcher;
import polling_station_dashboard.search.addVoter.AddVoterLoader;
import javafx.scene.control.Button;
import java.io.IOException;
import java.util.*;
/**
* Created by Vladimir Eliezer Tokarev on 12/06/2016.
* SearchHandler trying to fetch wanted users by given strings (votersFetcher) and then
* Starts the eddit/add panel based on what the votersFetcher Have fetched.
*/
public class SearchHandler implements EventHandler {
private Stage currentStage;
private VotersFetcher votersFetcher;
private Button AddVoterButton;
public SearchHandler(Stage primaryStage, VotersFetcher votersFetcher)
{
this.currentStage = primaryStage;
this.votersFetcher = votersFetcher;
}
private List<String> GetFilters()
{
String unSeparatedFilters = ((TextField)this.currentStage.getScene().lookup("#SearchValue")).getText();
String[] filters = unSeparatedFilters.split(" -|\\:|\\,");
return Arrays.asList(filters);
}
private void AddVoterPanel() throws IOException
{
((Pane)this.currentStage.getScene().lookup("#AddEditPane")).getChildren().remove(this.AddVoterButton);
new AddVoterLoader(this.currentStage);
}
private void AddVoterAddButton() throws IOException {
this.AddVoterButton = new Button("Add New Voter");
this.AddVoterButton.setOnAction(e -> {
try {
AddVoterPanel();
} catch (IOException e1) {
e1.printStackTrace();
}
});
((Pane)currentStage.getScene().lookup("#AddEditPane")).getChildren().add(AddVoterButton);
}
private void AddSubmitVoterPanel(HashMap<String, String> voter) throws IOException
{
SubmitVoterLoader submitVoterLoader = new SubmitVoterLoader(this.currentStage);
submitVoterLoader.GenerateVoterSubmit(voter);
}
private void VotersCheck() throws IOException {
List<String> filters = GetFilters();
List<HashMap<String,String>> voters = votersFetcher.FetchVoters(filters);
if (voters.isEmpty())
{
AddVoterAddButton();
}
else if(voters.get(0).get("EligibleToVote").equals("no") || voters.get(0).get("EligibleToVote").equals("yes"))
{
AddSubmitVoterPanel(voters.get(0));
}
else
{
throw new IOException("The given voter have no valid EligibleToVote field");
}
}
private void CleanSearchLine()
{
((TextField)this.currentStage.getScene().lookup("#SearchValue")).setText(" ");
}
@Override
public void handle(Event event) {
try {
VotersCheck();
CleanSearchLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,31 @@
package polling_station_dashboard.search.addVoter;
import javafx.fxml.FXML;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import java.util.HashMap;
/**
* Created by Vladimir Eliezer Tokarev on 11/06/2016.
* This object controls the add voter panel behavior
*/
public class AddVoterController {
private Stage currentStage;
public void SetStage(Stage primaryStage)
{
this.currentStage = primaryStage;
}
@FXML
private void RemoveAddVoterPanel()
{
// when this button pressed (the cancel button) only the add voter panel is in list of children of AddEditPane
// this why removing the element at index 0 will remove this panel
System.out.println(((Pane)this.currentStage.getScene().lookup("#AddEditPane")).getChildren());
((Pane)this.currentStage.getScene().lookup("#AddEditPane")).getChildren().remove(0);
}
}

View File

@ -0,0 +1,31 @@
package polling_station_dashboard.search.addVoter;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import java.io.IOException;
/**
* Created by Vladimir Eliezer Tokarev on 11/06/2016.
* This class loads the add voter panel (which adds voters)
*/
public class AddVoterLoader {
private static final String ADD_VOTER_FXML_PATH = "/view/dashboard/add_voter.fxml";
private Stage currentStage;
public AddVoterLoader (Stage primaryStage) throws IOException
{
currentStage = primaryStage;
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(ADD_VOTER_FXML_PATH));
Parent root = fxmlLoader.load();
AddVoterController controller = fxmlLoader.getController();
Pane addEditPane = (Pane)currentStage.getScene().lookup("#AddEditPane");
addEditPane.getChildren().add(root);
controller.SetStage(primaryStage);
}
}

View File

@ -0,0 +1,34 @@
package polling_station_dashboard.search.advancedSearch;
import javafx.fxml.FXML;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Created by dasha on 7/9/2016.
* AdvancedSearchController controls the behavior of the adnvaced search panel
* for example searching by tag type
*/
public class AdvancedSearchController {
private Stage currentStage;
private BorderPane regularSearch;
public void SetStage(Stage stage){
this.currentStage = stage;
}
public void SetRegularSearch(BorderPane regularSearch) { this.regularSearch = regularSearch; }
@FXML
private void RemoveAdvancedSearch(){
// the only object in this container by now is the advanced search
Pane searchContainer = (Pane) this.currentStage.getScene().lookup("#SearchContainer");
searchContainer.getChildren().remove(0);
// after removed the advanced search we need to return the regular one
searchContainer.getChildren().add(this.regularSearch);
}
}

View File

@ -0,0 +1,45 @@
package polling_station_dashboard.search.advancedSearch;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Created by dasha on 7/9/2016.
* AdvancedSearchHandler handles the event that being passed from the polling station dashboard
*/
public class AdvancedSearchHandler implements EventHandler {
private GridPane advancedSearch;
private Stage currentStage;
public AdvancedSearchHandler(GridPane advancedSearch, Stage primalStage)
{
this.advancedSearch = advancedSearch;
this.currentStage = primalStage;
}
private void UpdateAdvancedSearch() {
RemoveRegularSearch();
AddAdvancedSearch();
}
private void AddAdvancedSearch() {
Pane searchContainer = (Pane) currentStage.getScene().lookup("#SearchContainer");
searchContainer.getChildren().add(advancedSearch);
}
private void RemoveRegularSearch() {
// the only element that is in this container is the regular search
Pane searchContainer = (Pane) currentStage.getScene().lookup("#SearchContainer");
searchContainer.getChildren().remove(0);
}
@Override
public void handle(Event event) {
UpdateAdvancedSearch();
}
}

View File

@ -0,0 +1,39 @@
package polling_station_dashboard.search.advancedSearch;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import polling_station_dashboard.settings.settingsController;
import java.io.IOException;
/**
* Created by dasha on 7/9/2016.
* AdvancedSearchLoader loads the advanced search panel
*/
public class AdvancedSearchLoader {
private static final String ADVANCED_SEARCH_FXML_PATH = "/view/dashboard/advanced_search.fxml";
private Stage currentStage;
private FXMLLoader fxmlLoader;
public AdvancedSearchLoader(Stage primaryStage) throws IOException
{
currentStage = primaryStage;
fxmlLoader = new FXMLLoader(getClass().getResource(ADVANCED_SEARCH_FXML_PATH));
}
public GridPane GetSettingsInstance() throws IOException {
GridPane settings = fxmlLoader.load();
AdvancedSearchController controller = fxmlLoader.getController();
Pane searchContainer = (Pane) currentStage.getScene().lookup("#SearchContainer");
BorderPane regularSearch = (BorderPane) searchContainer.getChildren().get(0);
controller.SetRegularSearch(regularSearch);
controller.SetStage(currentStage);
return settings;
}
}

View File

@ -0,0 +1,39 @@
package polling_station_dashboard.search.submitVoter;
import javafx.fxml.FXML;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import polling_station_dashboard.search.submitVoter.lodgeAppeal.LodgeAppealVisualUpdater;
/**
* Created by Vladimir Eliezer Tokarev on 18/06/2016.
* SubmitVoterController controls the behavior of the submit panel which gives the ability
* to change the ability of vote to a voter
*/
public class SubmitVoterController {
private Stage currentStage;
private LodgeAppealVisualUpdater lodgeAppealVisualUpdater;
public void SetStage(Stage primaryStage)
{
this.currentStage = primaryStage;
}
public void SetLodgeAppeal(GridPane lodgeAppeal){
this.lodgeAppealVisualUpdater = new LodgeAppealVisualUpdater(lodgeAppeal, currentStage);
}
@FXML
private void AddLodgeAppeal(){
this.lodgeAppealVisualUpdater.UpdateLodgeAppeal();
}
@FXML
private void RemoveSubmitVoterPanel()
{
// when this button pressed (the cancel button) only the add voter panel is in list of children of AddEditPane
// this why removing the element at index 0 will remove this panel
((Pane)this.currentStage.getScene().lookup("#AddEditPane")).getChildren().remove(0);
}
}

View File

@ -0,0 +1,52 @@
package polling_station_dashboard.search.submitVoter;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import polling_station_dashboard.search.submitVoter.lodgeAppeal.LodgeAppealLoader;
import java.io.IOException;
import java.util.HashMap;
/**
* Created by Vladimir Eliezer Tokarev on 18/06/2016.
* SubmitVoterLoader Loads the submit voter fxml
*/
public class SubmitVoterLoader {
private static final String SUBMIT_VOTER_FXML_PATH = "/view/dashboard/submit_voter.fxml";
private Stage currentStage;
private FXMLLoader fxmlLoader;
private void ResetVoterParams(HashMap<String, String> voter, Parent root)
{
((Label)root.lookup("#IDNumberValue")).setText(voter.get("IDNumber"));
((Label)root.lookup("#EligibleToVoteValue")).setText(voter.get("EligibleToVote"));
((Label)root.lookup("#StatusValue")).setText(voter.get("Status"));
((Label)root.lookup("#ChannelValue")).setText(voter.get("Channel"));
}
public SubmitVoterLoader (Stage primaryStage) throws IOException
{
currentStage = primaryStage;
this.fxmlLoader = new FXMLLoader(getClass().getResource(SUBMIT_VOTER_FXML_PATH));
}
public void GenerateVoterSubmit(HashMap<String, String> voter) throws IOException
{
Parent root = this.fxmlLoader.load();
ResetVoterParams(voter, root);
LodgeAppealLoader lodgeAppealLoader = new LodgeAppealLoader(currentStage);
SubmitVoterController controller = fxmlLoader.getController();
Pane addEditPane = (Pane)currentStage.getScene().lookup("#AddEditPane");
addEditPane.getChildren().add(root);
controller.SetStage(currentStage);
controller.SetLodgeAppeal(lodgeAppealLoader.GetSettingsInstance());
}
}

View File

@ -0,0 +1,26 @@
package polling_station_dashboard.search.submitVoter.lodgeAppeal;
import javafx.fxml.FXML;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Created by dasha on 7/2/2016.
* Contros the behavior od the lodge appeal panel
*/
public class LodgeAppealController {
private Stage currentStage;
public void SetStage(Stage primaryStage)
{
this.currentStage = primaryStage;
}
@FXML
private void HandleCancel(){
Pane addEditPane = (Pane) currentStage.getScene().lookup("#AddEditPane");
// the add edit pane have only one child at a time which mean removing the child in index 0 will
// clean the add edit pane
addEditPane.getChildren().remove(0);
}
}

View File

@ -0,0 +1,33 @@
package polling_station_dashboard.search.submitVoter.lodgeAppeal;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import polling_station_dashboard.settings.settingsController;
import java.io.IOException;
/**
* Created by dasha on 7/2/2016.
* Loads the lodge appeal fxml file
*/
public class LodgeAppealLoader {
private static final String LODGE_APPEAL_PATH = "/view/dashboard/lodge_appeal.fxml";
private Stage currentStage;
private FXMLLoader fxmlLoader;
public LodgeAppealLoader(Stage primaryStage) throws IOException
{
currentStage = primaryStage;
fxmlLoader = new FXMLLoader(getClass().getResource(LODGE_APPEAL_PATH));
}
public GridPane GetSettingsInstance() throws IOException {
GridPane settings = fxmlLoader.load();
LodgeAppealController controller = fxmlLoader.getController();
controller.SetStage(currentStage);
return settings;
}
}

View File

@ -0,0 +1,46 @@
package polling_station_dashboard.search.submitVoter.lodgeAppeal;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Created by dasha on 7/2/2016.
* LodgeAppealVisualUpdater is in response of add and remove the lodge appeal panel
* to polling station dashboard
*/
public class LodgeAppealVisualUpdater {
private Stage currentStage;
private GridPane lodgeAppeal;
private boolean lodgeAppealOpened = false;
public LodgeAppealVisualUpdater(GridPane lodgeAppeal, Stage primalStage)
{
this.lodgeAppeal = lodgeAppeal;
this.currentStage = primalStage;
}
public void UpdateLodgeAppeal() {
if (!lodgeAppealOpened) {
ClearAddEditPanel();
AddLodgeAppeal();
}
else {
ClearAddEditPanel();
}
lodgeAppealOpened = !lodgeAppealOpened;
}
private void ClearAddEditPanel(){
Pane addEditPane = (Pane) currentStage.getScene().lookup("#AddEditPane");
// the add edit pane have only one child at a time which mean removing the child in index 0 will
// clean the add edit pane
addEditPane.getChildren().remove(0);
}
private void AddLodgeAppeal() {
Pane addEditPane = (Pane)currentStage.getScene().lookup("#AddEditPane");
addEditPane.getChildren().add(lodgeAppeal);
}
}

View File

@ -0,0 +1,60 @@
package polling_station_dashboard.search.votersFetcher;
import java.util.*;
/**
* Created by Vladimir Eliezer Tokarev on 18/06/2016.
* This object used for receiving empty list of object for the logic of add voter could be tested
* is implemented in this dummy way for testing the normal gui flow
*/
public class DummyVotersFetcher implements VotersFetcher {
private List<HashMap<String,String>> dummyVoters;
public DummyVotersFetcher()
{
this.dummyVoters = new ArrayList<>();
// voter that cant vote
HashMap<String, String> voter1 = new HashMap<>();
voter1.put("IDNumber", "123123123");
voter1.put("EligibleToVote", "no");
voter1.put("Status", "HasNotVoted");
voter1.put("Channel", "IDCMaths");
// voter that can vote
HashMap<String, String> voter2 = new HashMap<>();
voter2.put("IDNumber", "234234234");
voter2.put("EligibleToVote", "yes");
voter2.put("Status", "HasNotVoted");
voter2.put("Channel", "IDCPhysics");
this.dummyVoters.add(voter1);
this.dummyVoters.add(voter2);
}
/**
* Gets list of filters and return all the voters from dummy voters that have those filters
* @param filters list of strings
*/
@Override
public List<HashMap<String,String>> FetchVoters(List<String> filters)
{
List<HashMap<String,String>> votersWithFilters = new ArrayList<>();
for (String filter : filters) {
for (HashMap<String, String> voter: this.dummyVoters) {
Iterator it = voter.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
if (((String) pair.getKey()).contains(filter) || ((String) pair.getValue()).contains(filter)) {
votersWithFilters.add(voter);
break;
}
}
}
}
return votersWithFilters;
}
}

View File

@ -0,0 +1,13 @@
package polling_station_dashboard.search.votersFetcher;
import java.util.HashMap;
import java.util.List;
/**
* Created by Vladimir Eliezer Tokarev on 12/06/2016.
* votersFetcher gives the ability of fetching voters based on given list of filters
*/
public interface VotersFetcher {
List<HashMap<String,String>> FetchVoters(List<String> filters);
}

View File

@ -0,0 +1,66 @@
package polling_station_dashboard.settings;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Created by Vladimir Eliezer Tokarev on 12/06/2016.
* This object manages the visual changes of the settings panel
* which means that he opens and closes settings panel)
*/
public class SettingsVisualUpdater implements EventHandler {
private GridPane settings;
private static final int SETTINGS_HEIGHT_EXPANSION_VALUE = 60;
private boolean settingsOpened = false;
private Stage currentStage;
public SettingsVisualUpdater(GridPane settings, Stage primalStage)
{
this.settings = settings;
this.currentStage = primalStage;
}
public void UpdateSettings() {
showSettingsButton(settingsOpened);
if (!settingsOpened) {
SetSettingsSize(SETTINGS_HEIGHT_EXPANSION_VALUE);
addSettings();
}
else {
SetSettingsSize(-SETTINGS_HEIGHT_EXPANSION_VALUE);
removeSettings();
}
settingsOpened = !settingsOpened;
}
private void SetSettingsSize(int expansionHeight) {
currentStage.setHeight(currentStage.getHeight() + expansionHeight);
Pane statusLog = (Pane) currentStage.getScene().lookup("#Settings");
statusLog.setPrefHeight(expansionHeight);
}
private void showSettingsButton(boolean showOrNot){
Button settings = (Button) currentStage.getScene().lookup("#SettingsButton");
settings.setVisible(showOrNot);
}
private void addSettings() {
Pane settingsPane = (Pane) currentStage.getScene().lookup("#Settings");
settingsPane.getChildren().add(settings);
}
private void removeSettings(){
Pane settingsPane = (Pane) currentStage.getScene().lookup("#Settings");
settingsPane.getChildren().remove(settings);
}
@Override
public void handle(Event event) {
UpdateSettings();
}
}

View File

@ -0,0 +1,17 @@
package polling_station_dashboard.settings;
import javafx.stage.Stage;
/**
* Created by Vladimir Eliezer Tokarev on 04/06/2016.
* manages the button pressing of the settings
*/
public class settingsController {
private Stage currentStage;
public void SetStage(Stage stage){
this.currentStage = stage;
}
}

View File

@ -0,0 +1,33 @@
package polling_station_dashboard.settings;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import java.io.IOException;
/**
* Created by Vladimir Eliezer Tokarev on 04/06/2016.
* Loads the settings fxml file
*/
public class settingsLoader {
private static final String SETTINGS_FXML_PATH = "/view/dashboard/settings.fxml";
private Stage currentStage;
private FXMLLoader fxmlLoader;
public settingsLoader(Stage primaryStage) throws IOException
{
currentStage = primaryStage;
fxmlLoader = new FXMLLoader(getClass().getResource(SETTINGS_FXML_PATH));
}
public GridPane GetSettingsInstance() throws IOException {
GridPane settings = fxmlLoader.load();
settingsController controller = fxmlLoader.getController();
controller.SetStage(currentStage);
return settings;
}
}

View File

@ -0,0 +1,16 @@
package polling_station_dashboard.statusLog;
import javafx.stage.Stage;
/**
* Created by Vladimir Eliezer Tokarev on 04/06/2016.
* This class represent status of other users progress in the voting process
*/
public class StatusLogController {
private Stage primaryStage;
public void SetStage(Stage stage){
primaryStage = stage;
}
}

Some files were not shown because too many files have changed in this diff Show More