OOP Lab Task 3
De la WikiLabs
Required Tutorials
- The Object Oriented Paradigm; Classes and Objects
- Notions About the Java Language
- Writing and Executing a Java Program
- Java Syntax; A Program's Lexical Structure
- Coding Conventions
- Advanced Notions About Object Oriented Programming
- Java Application Programming Interface (API) (EN)
- Exception Handling
- Input/Output Streams
Requirements
- Write a class called ServerConfig which has the role of reading configuration values from a text file. This class will be used later on during the development of the server application, and needs to meet the following requirements:
- The class needs to have two constructors:
- One with an argument of type String, which represents the file to be read
- One without any arguments, which will implicitly consider the configuration file to be server.conf.
- Objects of type ServerConfig have to read the file, line by line, and then expose the parameters that were read through methods.
- The methods in class ServerConfig must throw exceptions if any issues arise when reading or parsing the file:
- IOException if the file is missing or it cannot be opened (this exception is already being thrown by stream related classes, so you only need to rethrow it further up the execution stack).
- InvalidFormatException if at least one line from the file doesn't match the expected pattern (this type of exception doesn't exist and it needs to be created).
- UnknownKeyException if an unknown property is present in the file (this type of exception doesn't exist and it needs to be created).
- MissingKeyException if one of the expected properties is missing from the file (this type of exception doesn't exist and it needs to be created).
- The class must be immutable.
- The class needs to have two constructors:
- The following properties are the only ones valid and must exist in the configuration file:
- TCP_PORT - representing the TCP port on which the server will be listening on.
- MAX_CLIENTS - the maximum number of clients that the server an serve.
- Write a test for this class (which should open a file, read its contents and print the read parameters on the screen) and add it to the main method in class Main.
The configuration file that class ServerConfig is reading is a text file, containing lines of the following form:
PROPERTY=value
- Any line starting with thr character #, preceded or not by spaces or "tab" characters is considered to be a comment and it will be ignored.
- Lines that do not contain any printable character but only spaces and/ or tabs will also be ignored.
- Spaces or tabs from the beginning and end of lines are ignored.
An example of a configuration file:
#this is a config file for the chat server!
# this is made by ME!
MAX_CLIENT=100
TCP_PORT=9000
Note:
- Cele trei tipuri de excepții care trebuie definite au implementări foarte simple. Trebuie definite ca niște clase care extind clasa Exception, și nu este nevoie să conțină decât definiția unui constructor cu un argument de tip String care nu face altceva decât să apeleze constructorul superclasei.
- Fișierele predate vor fi implementările Java a următoarelor clase: ServerConfig, Main, Message, PrivateMessage, InvalidFormatException, UnknownKeyException și MissingKeyException.
- Următoarele clase și metode vă pot fi de folos în realizarea temei. Căutați-le în documentația API:
- String.trim
- String.charAt
- String.contains
- String.startsWith
- String.equals
- String.split
- Integer.parseInt
- BufferedReader.readLine
- Din cauza faptului că puteți avea două obiecte de tip String diferite (cu referințe diferite) dar care conțin același text, iar operatorul == compară referințele, modul corect prin care se compară două String-uri este prin apelarea metodei equals:
String a = "abc";
String b = new String(a);
if(a == b) { // <- incorect, evaluarea va întoarce false
//...
}
if(a.equals(b)) { // <- corect, evaluarea va întoarce true
//...
}
Submitting:
- The assignment is submitted attaching the Java source code files exclusively to an e-mail sent to radu.hobincu@upb.ro.
- The subject of the e-mail will be [POO_3]
- The body of the e-mail will contain the name and group of the student and any additional command you want to make.
- Attention: Any deviation from these instructions may lead to the loss of the entire amount of points.