HW 3 - Implement a simple chat log parser
2022. 8. 25. 19:04ㆍProgramming/Java
The third Java programming assignment is to implement a simple chat message parser. Through this HW, we practice all concepts we learned until now.
Purpose of HW3
- To practice how to implement a Java program by using various development tools such as Gradle, Eclipse, git, and GitHub.
- Practice most concepts we learned until now and majorly
- interface, inheritance
- reusable packages and javadoc
- Use of String class and its public methods
- Encapsulation
Assignment Description
1. Implement HW3
Execution Example
2. Write Javadoc for all public classes/interface/methods
a. You can add javadoc comments for the provided java files. but do not change or modify their code.
ChatParser.java
package edu.handong.csee.java.hw3;
import edu.handong.csee.java.hw3.datamodel.Message;
import edu.handong.csee.java.hw3.parser.ParserForMac;
import edu.handong.csee.java.hw3.parser.ParserForWindows;
import edu.handong.csee.java.hw3.parser.Parserable;
// 2022 Summer Version
/**
* This is a public class named ChatParser
*/
public class ChatParser {
private int numOfMessages=0;
public static enum ValueTypes {DATETIME, WRITER, MESSAGE};
/**
* This is a main method
* @param args one string type argument
*/
public static void main(String[] args) {
ChatParser myChatParser = new ChatParser();
myChatParser.run(args);
}
/**
* This is a public method named run
* @param args one string type argument
*/
public void run(String[] ChatMessages) {
setNumOfMessages(ChatMessages.length);
System.out.println("The number of all messages processing: " + getNumOfMessages() + "\n");
for(int messageIndex = 0; messageIndex < this.getNumOfMessages(); messageIndex++) {
String currentChatMessage = ChatMessages[messageIndex];
Parserable parser = null;
System.out.println("Parsing Message " + (messageIndex+1));
if(Utils.isMacExportedMessage(currentChatMessage))
parser = new ParserForMac();
else if (Utils.isWindowsExportedMessage(currentChatMessage))
parser = new ParserForWindows();
else {
System.out.println("Message cannot be processed as its format is not supported!!: " + currentChatMessage);
return;
}
Message newMessage = parser.parse(currentChatMessage);
System.out.println(parser.getValue(ValueTypes.DATETIME) +
"|" + parser.getValue(ValueTypes.WRITER) +
"|" + parser.getValue(ValueTypes.MESSAGE));
newMessage.print();
if (messageIndex!=this.getNumOfMessages()-1)
System.out.println();
}
if(ChatMessages.length==0)
System.out.println("No messages!!");
}
/**
* This is a public method named getNumOfMessages
* @return an integer
*/
public int getNumOfMessages() {
return numOfMessages;
}
/**
* This is a public method named setNumOfMessages
* @param args one integer type argument
*/
public void setNumOfMessages(int numOfMessages) {
this.numOfMessages = numOfMessages;
}
}
Utils.java
package edu.handong.csee.java.hw3;
/**
* This is a public class named Utils
*/
public class Utils {
/**
* This is a public method named isMacExportedMessage
* @param message one string type argument
* @return boolean type
*/
public static boolean isMacExportedMessage(String message) {
return message.startsWith("-",4) ;
}
/**
* This is a public method named isWindowsExportedMessage
* @param message one string type argument
* @return boolean type
*/
public static boolean isWindowsExportedMessage(String message) {
return message.startsWith("[") ;
}
}
Message.java
package edu.handong.csee.java.hw3.datamodel;
/**
* This is a public class Message
*/
public class Message {
private String dateTime ;
private String writer ;
private String message ;
/**
* This is a public constructor for Message class
* @param string dateTime
* @param string writer
* @param string message
*/
public Message(String dateTime, String writer, String message) {
this.setDateTime(dateTime) ;
this.setWriter(writer) ;
this.setMessage(message) ;
}
/**
* This is a getter for variable datetime
* @return dateTime
*/
public String getDateTime() {
return dateTime ;
}
/**
* This is a setter for variable datetime
*/
public void setDateTime(String dateTime) {
this.dateTime = dateTime ;
}
/**
* This is a getter for variable writer
* @return writer
*/
public String getWriter() {
return writer ;
}
/**
* This is a setter for variable writer
*/
public void setWriter(String writer) {
this.writer = writer ;
}
/**
* This is a getter for variable message
* @return message
*/
public String getMessage() {
return message ;
}
/**
* This is a setter for variable message
*/
public void setMessage(String message) {
this.message = message ;
}
/**
* This is a method to print message information in the output file
*/
public void print() {
System.out.println("When: " + dateTime) ;
System.out.println("Who: " + writer) ;
System.out.println("What: " + message) ;
}
}
Parserable.java
package edu.handong.csee.java.hw3.parser;
import edu.handong.csee.java.hw3.ChatParser;
import edu.handong.csee.java.hw3.datamodel.Message;
/**
* This is a public interface Parserable
* @author hanna
*
*/
public interface Parserable {
/**
* This is a public method to parse messages
* @param message
* @return Message class
*/
public Message parse(String message) ;
/**
* This is a public method to get values
* @param enum type
* @return String
*/
public String getValue(ChatParser.ValueTypes type) ;
}
ParserForMac.java
package edu.handong.csee.java.hw3.parser;
import edu.handong.csee.java.hw3.ChatParser;
import edu.handong.csee.java.hw3.datamodel.Message;
/**
* This is a parser for mac
* @author hanna
*
*/
public class ParserForMac implements Parserable {
private Message p ;
/**
* This is a public method to parse messages
* @param message
* @return Message class
*/
public Message parse(String message) {
String[] pArry = message.split(",",3) ;
p = new Message(pArry[0],pArry[1],pArry[2]) ;
return p ;
}
/**
* This is a public method to get values
* @param enum type
* @return String
*/
public String getValue(ChatParser.ValueTypes type) {
String value = null ;
switch(type) {
case DATETIME :
value = p.getDateTime() ;
break ;
case WRITER :
value = p.getWriter() ;
break ;
case MESSAGE :
value = p.getMessage() ;
break ;
}
return value ;
}
}
ParserForWindows.java
package edu.handong.csee.java.hw3.parser;
import edu.handong.csee.java.hw3.ChatParser;
import edu.handong.csee.java.hw3.datamodel.Message;
/**
* This is a parser for mac
* @author hanna
*
*/
public class ParserForWindows implements Parserable{
private Message p ;
/**
* This is a public method to parse messages
* @param message
* @return Message class
*/
public Message parse(String message) {
message = message.replace("[","") ;
String[] pArry = message.split("] ",3) ;
p = new Message(pArry[0],pArry[1],pArry[2]) ;
return p ;
}
/**
* This is a public method to get values
* @param enum type
* @return String
*/
public String getValue(ChatParser.ValueTypes type) {
String value = null ;
switch(type) {
case DATETIME :
value = p.getDateTime() ;
break ;
case WRITER :
value = p.getWriter() ;
break ;
case MESSAGE :
value = p.getMessage() ;
break ;
}
return value ;
}
}
build.gradle
Execute
gradle build
gradle run --args="'[ShyGirl] [오전 10:42] I see! Thank you professor!!' '2018-04-17 09:59:56,JS,From the subclass' '[JC] [4:39 PM] it depends. When you joined what i was talking?' Message2"
gradle clean
https://github.com/hannahchun/2021-1-Java-HW3.git
'Programming > Java' 카테고리의 다른 글
Streams and File I/O (0) | 2022.08.26 |
---|---|
Exception Handling (0) | 2022.08.25 |
Initiate git and gradle on Eclipse (0) | 2022.08.21 |
Inheritance (0) | 2022.08.21 |
Interfaces (0) | 2022.08.21 |