Problem Specification
You have been approached by a local university for designing and implementing a room access control system on the university campus. Access to each room on each floor of each campus building is controlled via a swipe card system. All staff and students are permanently issued swipe cards appropriate to their role at the university while visitors are issued with a visitor card upon arrival at reception. Each room can be configured to admit a user based on the roles assigned to their swipe card and the type of room the user is trying to access. In addition certain roles may only allow access to a room at certain times. A user can only access one room at a time.
In addition to the swipe card systems normal operations, and to support health and safety requirements, it should be possible to place a room, building or the entire campus into an "emergency mode". Each campus building has a supply of ‘emergency responder' cards that can be accessed by fire, police and medical personnel. In "normal mode" these cards cannot be used to access any room. When in "emergency mode" these cards should allow access to ANY room.
The swipe card system should log into a text file the following information every time a card holder attempts to access a room:
1. The date and time that the user made the attempt to access a room.
2. The users name and swipe card ID number.
3. A code identifying the building in which the room is located (i.e. Babbage = BGB)
4. The room's floor and room number (i.e. room 7 on floor 2 of the Babbage building might be logged as BGB 207).
5. The mode in which that room is operating (i.e. "Normal" or "Emergency").
6. Whether access was granted or refused.
Whenever a room, building or the entire campus enters "emergency mode" the log file should record the date and time as well as the reason for the change (room X entered emergency mode, building Y entered emergency mode or the whole campus went into emergency mode). A folder should be created named EM_. A copy of the following items should be placed into this folder:
1. The current log file and
2. A copy of the current state of the swipe card data model. (You may save the data model's current state using either object serialization, an XML file OR a database). It should be possible to load the saved data model using your GUI and view the campus data model as it appeared after emergency mode was entered.
Each room has 3 states: Busy, Available and Free. In Busy state, a room is being used for a lecture, practical session or a formal meeting. In Available state, a room is being used for informal meeting of university staff members or students. In Free state, a room is empty and is available to any authorised user. A room changes its state from Free to Available state once an authorised user enters the room.
Each room has a seating capacity. In "normal mode", the access to a room is blocked when it reaches its full capacity. When a room is in Busy or Available state and the number of people in the room are at least 75% of the total room capacity then all the room lights are automatically turned on. When the room is in Busy or Available state and the number of people in the room are at least 50% of the total room capacity, 50% of the room lights are automatically turned on. When the room is in Busy or Available state and the number of people in the room are at least 25% of the total room capacity, 33% of the room lights are automatically turned on. When the room is in Busy or Available state and the number of people in the room are up to 25% of the total room capacity, 25% of the room lights are automatically turned on. When the room is in Free state, all the lights are turned off.
The system should be able to maintain an hourly record of room states for improving the workspace utilisation as well as the energy consumption pattern. A log file should be separately stored in the system carrying hourly entries about the room, its state, utilisation statistics and energy consumption statistics.
Requirements
You are required to produce a Java desktop application OR a Java web application that meets the universities requirement specification given in the problem statement of this assignment. This application should follow the Model-View-Controller (MVC) pattern.
Using additional software design patterns in your data model design from the following list will earn you:
- Strategy Pattern
- State Pattern
- Observer Pattern
- Command Pattern
- Decorator Pattern
- Factory Pattern
- Singleton Pattern
You are required to use test driven development (TDD) to create your solution to the scenario. Your solution should be implemented in the Java programing language using the NetBeans IDE.
The implementation should contain two NetBeans projects as follows:
1. A Java Class Library containing the implementation of your data model as per your UML Class diagram. This project should also include the set of JUnit tests used to create your data model. The data model should have a full set of documentation generated for it using the Javadoc tool. It is not sufficient to simply mark-up your classes you MUST GENERATE the Javadoc web site. A 5% marking penalty will be applied if this is not done.
2. A Java NetBeans project which provides a Java application OR a Java web application. This project MUST make use of the classes in your Java Class Library (see 1 above). The application should provide the following functionalities by allowing a user to:
a. Add or remove a room and modify its capacity
b. See and change the current operating mode for every room and building on the university campus.
c. Add, remove, modify or view the lightning bulbs installed in a room
d. View an alphabetical list of campus users.
e. Add or remove people from the list of campus users
f. Add or remove roles from people on the list of campus users
g. "Simulate" a person on the list of campus users "swiping into a room on campus". This should generate the appropriate log entry.
h. View the current log file of users for accessing the rooms.
i. Save / load the campus data model and log file.
j. View the hourly record of room states
In addition to the software you are also required to write a short reflection on the design and implementation of your solution.
There is no minimum word count for this section. You are not expected to write more than 1000 words. The reflection should cover the following:
- How your design meets good design criteria?
- How your design has evolved during implementation?