Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
3ff79bf
Add members to README.md
Oct 12, 2021
5324e89
Make line separators compatible with Unix and Windows
Oct 13, 2021
c5d5636
Implement char logging feature to match shouldLogChar test
Oct 14, 2021
213fe64
Implement string, boolean and object logging feature to match all app…
Oct 14, 2021
617674e
Fix incorrect type for boolean
Oct 14, 2021
3c4af8f
Refactor methods in Logger
Oct 14, 2021
fb2c2aa
Implements methods to pass second tests iteration
Oct 17, 2021
2b109a6
Implements methods to pass third tests iteration
Oct 18, 2021
8fb6a6a
Fix calling extra method in tests with flush modification
Oct 19, 2021
28e6157
1 and 2 iterations refactored to OO
Oct 20, 2021
c027a16
1 and 2 iterations refactored to OO (2nd)
Oct 21, 2021
103edf3
Added 1st test of Iteration 3
Oct 21, 2021
abd6ffa
Added tests of Iteration 3 (w/o matrix)
Oct 22, 2021
dfa3e23
Tests work
MarsArsDev Oct 22, 2021
2ca058d
Removed default String values
MarsArsDev Oct 22, 2021
3d4f707
Dead code removed
MarsArsDev Oct 25, 2021
6627bc7
Mockito and JUnit 5 dependencies added
MarsArsDev Oct 25, 2021
33955df
JUnit 4 dependency added
MarsArsDev Oct 25, 2021
24ec979
isArray removed
MarsArsDev Oct 25, 2021
ef0f16b
Changed back to static
Oct 25, 2021
0333b54
Updated project to the changes in pom (plugins for tests)
Oct 26, 2021
cff46bd
MessageContainer refactored
MarsArsDev Oct 26, 2021
e7f0dca
Changed target classes in pom
Oct 26, 2021
9350f0c
MessageContainer refactored
MarsArsDev Oct 26, 2021
48d23e2
Null in MessageContainer removed
MarsArsDev Oct 26, 2021
766de24
MessageContainer refactored
MarsArsDev Oct 26, 2021
29a1063
Added test flush check
Oct 26, 2021
d7cb2bc
Exceptions added
MarsArsDev Oct 26, 2021
16786e1
Test refactored
MarsArsDev Oct 27, 2021
27f8051
Printer added
MarsArsDev Oct 27, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
Sen Shi Khen
# Java Junior Developer Training Course.
88 hours training + 32 hours work project = 120 hr.

Expand Down
70 changes: 69 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,83 @@
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.7.2</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.15</version>
</dependency>
</dependencies>
<configuration>
<targetClasses>
<param>com.acme.edu.*</param>
</targetClasses>
<targetTests>
<param>com.acme.edu.*</param>
</targetTests>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<id>mutation-coverage</id>
<goals>
<goal>mutationCoverage</goal>
</goals>
</execution>
<execution>
<id>mutation-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
Expand Down
51 changes: 49 additions & 2 deletions src/main/java/com/acme/edu/Logger.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,58 @@
package com.acme.edu;


import com.acme.edu.model.message.*;
import com.acme.edu.model.MessageContainer;


public class Logger {
private static MessageContainer container;

public Logger() {
container = new MessageContainer();
}

public static void log(int message) {
System.out.println("primitive: " + message);
container.addMessage(new IntMessage(message));
}

public static void log(byte message) {
System.out.println("primitive: " + message);
container.addMessage(new ByteMessage(message));
}

public static void log(char message) {
container.addMessage(new CharMessage(message));
}


public static void log(String message) {
container.addMessage(new StringMessage(message));
}

public static void log(boolean message) {
container.addMessage(new BooleanMessage(message));
}

public static void log(Object message) {
container.addMessage(new ObjectMessage(String.valueOf(message)));
}

public void log(int... messages) {
container.addMessage(new ArrayMessage(messages));
}

public static void log(int[][] messages) {
int[] formattedMessage = new int[messages.length * messages[0].length];
container.addMessage(new MatrixMessage(formattedMessage));
}

public static void log(String... messages) {
for (String message : messages) {
container.addMessage(new StringMessageWithConcatenation(message));
}
}

public static void flush() {
container.flush();
}
}
35 changes: 35 additions & 0 deletions src/main/java/com/acme/edu/model/MessageContainer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.acme.edu.model;

import com.acme.edu.model.exception.LoggerException;
import com.acme.edu.model.message.Message;
import com.acme.edu.model.message.NullMessage;
import com.acme.edu.model.printer.ConsolePrinter;
import com.acme.edu.model.printer.Printer;


public class MessageContainer {
private Message lastMessage = new NullMessage();

public void addMessage(Message message) {
try {
if (lastMessage.canAccumulateMessage(message)) {
lastMessage = lastMessage.getAccumulatedMessage(message);
} else {
flush();
lastMessage = message;
}
} catch (LoggerException e) {
System.out.println("Exception in addMessage");
}
}

public void flush() {
Printer printer = new ConsolePrinter(lastMessage.toString());
try {
printer.print();
} catch (LoggerException e) {
System.out.println("Unable to log last message");
}
lastMessage = new NullMessage();
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/acme/edu/model/exception/LoggerException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.acme.edu.model.exception;

public class LoggerException extends Exception{
public LoggerException() {
super();
}

public LoggerException(String message) {
super(message);
}

public LoggerException(String message, Throwable cause) {
super(message, cause);
}

public LoggerException(Throwable cause) {
super(cause);
}

protected LoggerException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
28 changes: 28 additions & 0 deletions src/main/java/com/acme/edu/model/message/ArrayMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.acme.edu.model.message;

public class ArrayMessage extends UnableToJoinMessage {
private final int[] values;

public ArrayMessage(int[] values) {
this.values = values;
}

@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("primitives array: {");
for (int i = 0; i < values.length; i++) {
stringBuilder.append(values[i]);
if (i != values.length - 1){
stringBuilder.append(", ");
}
}
stringBuilder.append("}");
return stringBuilder.toString();
}

@Override
public int[] getBody() {
return values;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/acme/edu/model/message/BooleanMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.acme.edu.model.message;

public class BooleanMessage extends UnableToJoinMessage {
private final boolean value;

public BooleanMessage(boolean value) {
this.value = value;
}

@Override
public Boolean getBody() {
return value;
}

@Override
public String toString() {
return "primitive: " + value;
}

}
43 changes: 43 additions & 0 deletions src/main/java/com/acme/edu/model/message/ByteMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.acme.edu.model.message;


import com.acme.edu.model.exception.LoggerException;

public class ByteMessage implements Message {
private final byte value;

public ByteMessage(byte value) {
this.value = value;
}

@Override
public Message getAccumulatedMessage(Message message) throws LoggerException {
if (!canAccumulateMessage(message)) {
throw new LoggerException("Unable to accumulate messages", new IllegalStateException());
}

byte messageValue = ((ByteMessage) message).getBody();
return new ByteMessage((byte) (value + messageValue));
}

@Override
public String toString() {
return "primitive: " + getBody();
}

@Override
public boolean canAccumulateMessage(Message message) {
if (message instanceof ByteMessage) {
byte messageValue = ((ByteMessage) message).getBody();
return (long) value + messageValue < Byte.MAX_VALUE;
}
return false;
}

@Override
public Byte getBody() {
return value;
}


}
19 changes: 19 additions & 0 deletions src/main/java/com/acme/edu/model/message/CharMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.acme.edu.model.message;

public class CharMessage extends UnableToJoinMessage {
private final char value;

public CharMessage(char value) {
this.value = value;
}

@Override
public String toString() {
return "char: " + value;
}

@Override
public Character getBody() {
return value;
}
}
37 changes: 37 additions & 0 deletions src/main/java/com/acme/edu/model/message/IntMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.acme.edu.model.message;

import com.acme.edu.model.exception.LoggerException;

public class IntMessage implements Message {
private final int value;

public IntMessage(int value) {
this.value = value;
}

@Override
public Message getAccumulatedMessage(Message message) throws LoggerException {
if (!canAccumulateMessage(message)) {
throw new LoggerException("Unable to accumulate messages", new IllegalStateException());
}
return new IntMessage(value + ((IntMessage) message).getBody());
}

@Override
public String toString() {
return "primitive: " + value;
}

@Override
public boolean canAccumulateMessage(Message message) {
if (message instanceof IntMessage) {
return (long) value + ((IntMessage) message).value < Integer.MAX_VALUE;
}
return false;
}

@Override
public Integer getBody() {
return value;
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/acme/edu/model/message/MatrixMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.acme.edu.model.message;

public class MatrixMessage extends UnableToJoinMessage{
private final int sum;

public MatrixMessage(int[] values) {
int result = 0;
for (int value : values) {
result += value;
}
this.sum = result;
}

@Override
public String toString() {
return "primitives matrix: " + sum;
}

@Override
public Integer getBody() {
return sum;
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/acme/edu/model/message/Message.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.acme.edu.model.message;

import com.acme.edu.model.exception.LoggerException;

public interface Message {
Message getAccumulatedMessage(Message message) throws LoggerException;

boolean canAccumulateMessage(Message message);

Object getBody();
}
Loading