Feat: Decorator and facade implemented
Some checks failed
SonarQube Scan / SonarQube Trigger (push) Failing after 19s
Some checks failed
SonarQube Scan / SonarQube Trigger (push) Failing after 19s
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package utils;
|
||||
package decorator;
|
||||
|
||||
import entities.Notification;
|
||||
import notificationsDecorations.NotificationDecoration;
|
||||
|
||||
/**
|
||||
* Ces approches ne seront pas implémentées ici, car elles pourraient alourdir le code sans apport clair.
|
||||
@@ -18,10 +19,11 @@ import entities.Notification;
|
||||
*/
|
||||
public abstract class BaseDecorator {
|
||||
protected Notification notification;
|
||||
protected NotificationDecoration decoration;
|
||||
|
||||
public BaseDecorator(Notification notification) {
|
||||
this.notification = notification;
|
||||
}
|
||||
|
||||
public abstract void send();
|
||||
public abstract String getContent();
|
||||
}
|
||||
23
src/decorator/DateDecorator.java
Normal file
23
src/decorator/DateDecorator.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package decorator;
|
||||
|
||||
import entities.Notification;
|
||||
import notificationsDecorations.DateNotificationDecoration;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class DateDecorator extends BaseDecorator {
|
||||
public DateDecorator(Notification notification, Date date) {
|
||||
super(notification);
|
||||
notification.addDecoration(new DateNotificationDecoration(date));
|
||||
}
|
||||
|
||||
public DateDecorator(BaseDecorator decorator, Date date) {
|
||||
super(decorator.notification);
|
||||
notification.addDecoration(new DateNotificationDecoration(date));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContent() {
|
||||
return notification.getContent();
|
||||
}
|
||||
}
|
||||
21
src/decorator/WatermarkDecorator.java
Normal file
21
src/decorator/WatermarkDecorator.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package decorator;
|
||||
|
||||
import entities.Notification;
|
||||
import notificationsDecorations.WatermarkNotificationDecoration;
|
||||
|
||||
public class WatermarkDecorator extends BaseDecorator {
|
||||
public WatermarkDecorator(Notification notification, String watermark) {
|
||||
super(notification);
|
||||
notification.addDecoration(new WatermarkNotificationDecoration(watermark));
|
||||
}
|
||||
|
||||
public WatermarkDecorator(BaseDecorator decorator, String watermark) {
|
||||
super(decorator.notification);
|
||||
notification.addDecoration(new WatermarkNotificationDecoration(watermark));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContent() {
|
||||
return this.notification.getContent();
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,17 @@
|
||||
package entities;
|
||||
|
||||
import notificationsDecorations.NotificationDecoration;
|
||||
import utils.NotificationState;
|
||||
import utils.SendNotificationStrategy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Notification {
|
||||
protected String content;
|
||||
protected User user;
|
||||
protected List<NotificationDecoration> decorations;
|
||||
|
||||
/**
|
||||
* Pas de change state car chemin multiple. On reste sur des enum !
|
||||
*/
|
||||
@@ -17,6 +23,15 @@ public abstract class Notification {
|
||||
this.user = user;
|
||||
this.state = NotificationState.PENDING;
|
||||
this.strategy = strategy;
|
||||
this.decorations = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a decoration to the notification. Please use a decorator for that
|
||||
* @param decoration
|
||||
*/
|
||||
public void addDecoration(NotificationDecoration decoration) {
|
||||
decorations.add(decoration);
|
||||
}
|
||||
|
||||
protected boolean isSendable() {
|
||||
@@ -41,9 +56,19 @@ public abstract class Notification {
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
if (isSendable()) {
|
||||
if (isSendable() && content != "") {
|
||||
transitionState();
|
||||
return strategy.makeContent(user.id() + " Push: " + user.name() + " " + content);
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
if (decorations.isEmpty())
|
||||
return content;
|
||||
|
||||
builder.append(content);
|
||||
|
||||
for (final NotificationDecoration decoration : decorations)
|
||||
builder.append(decoration.transformContent());
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
setKoState();
|
||||
return "";
|
||||
|
||||
@@ -5,5 +5,10 @@ import utils.SendNotificationStrategy;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record User(int id, String name, List<NotificationType> notificationsTypes, SendNotificationStrategy chosenNotificationStrategy) {
|
||||
public record User(
|
||||
int id,
|
||||
String name,
|
||||
List<NotificationType> notificationsTypes,
|
||||
SendNotificationStrategy chosenNotificationStrategy
|
||||
) {
|
||||
}
|
||||
|
||||
17
src/notificationsDecorations/DateNotificationDecoration.java
Normal file
17
src/notificationsDecorations/DateNotificationDecoration.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package notificationsDecorations;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class DateNotificationDecoration extends NotificationDecoration {
|
||||
private final Date date;
|
||||
|
||||
public DateNotificationDecoration(Date date) {
|
||||
super();
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String transformContent() {
|
||||
return ": " + date.toString();
|
||||
}
|
||||
}
|
||||
21
src/notificationsDecorations/NotificationDecoration.java
Normal file
21
src/notificationsDecorations/NotificationDecoration.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package notificationsDecorations;
|
||||
|
||||
import entities.Notification;
|
||||
|
||||
/**
|
||||
* On cherche à pouvoir ajouter des décorations aux notifications.
|
||||
*
|
||||
* Pour ce faire, on part de cette classe abstraite qui permettra de faire du polymorphisme.
|
||||
*
|
||||
* Ensuite, les décorateurs ajouteront une décoration aux notifications qui ont une liste de
|
||||
* décorations.
|
||||
*/
|
||||
public abstract class NotificationDecoration {
|
||||
protected Notification notification;
|
||||
|
||||
/**
|
||||
* Each decoration apply a transformation on the content of the Notifications
|
||||
* @return the content transformed
|
||||
*/
|
||||
public abstract String transformContent();
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package notificationsDecorations;
|
||||
|
||||
public class WatermarkNotificationDecoration extends NotificationDecoration {
|
||||
private String waterMark;
|
||||
|
||||
public WatermarkNotificationDecoration(String waterMark) {
|
||||
this.waterMark = waterMark;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String transformContent() {
|
||||
return "\n" + waterMark;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package utils;
|
||||
|
||||
import entities.Notification;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class DateDecorator extends BaseDecorator {
|
||||
private final Date date;
|
||||
|
||||
public DateDecorator(Notification notification, Date date) {
|
||||
super(notification);
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send() {
|
||||
System.out.println(this.notification.getContent() + " " + date.toString());
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,12 @@
|
||||
package utils;
|
||||
|
||||
import decorator.BaseDecorator;
|
||||
import decorator.DateDecorator;
|
||||
import decorator.WatermarkDecorator;
|
||||
import entities.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class NotificationObservable {
|
||||
@@ -22,7 +26,9 @@ public class NotificationObservable {
|
||||
for (final var subscriber : this.subscribers) {
|
||||
for (final var notificationType : subscriber.notificationsTypes()) {
|
||||
var notification = factory.createNotification(notificationType, content, subscriber, subscriber.chosenNotificationStrategy());
|
||||
System.out.println(notification.getContent());
|
||||
// Ici j'applique automatiquement les décorations, évidement, il serait mieux de la faire dynamiquement.
|
||||
BaseDecorator decorator = new WatermarkDecorator(new DateDecorator(notification, new Date()), "Thomas");
|
||||
System.out.println(decorator.getContent());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package utils;
|
||||
|
||||
import entities.Notification;
|
||||
|
||||
public class WatermarkDecorator extends BaseDecorator {
|
||||
private final String watermark;
|
||||
|
||||
public WatermarkDecorator(Notification notification, String watermark) {
|
||||
super(notification);
|
||||
this.watermark = watermark;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send() {
|
||||
System.out.println(this.notification.getContent() + " " + watermark);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user