HW 3 - Implement a simple chat log parser

2022. 8. 25. 19:04Programming/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