MaterialAddedEvent.java
package com.university.bookstore.observer;
import java.util.Objects;
import com.university.bookstore.model.Material;
/**
* Event that occurs when a material is added to the system.
*
* @author Navid Mohaghegh
* @version 3.0
* @since 2024-09-15
*/
public class MaterialAddedEvent implements MaterialEvent {
private final Material material;
private final long timestamp;
/**
* Creates a new material added event.
*
* @param material the material that was added
* @throws IllegalArgumentException if material is null
*/
public MaterialAddedEvent(Material material) {
this.material = Objects.requireNonNull(material, "Material cannot be null");
this.timestamp = System.currentTimeMillis();
}
@Override
public Material getMaterial() {
return material;
}
@Override
public long getTimestamp() {
return timestamp;
}
@Override
public String getEventType() {
return "MATERIAL_ADDED";
}
@Override
public String getDescription() {
return String.format("Material added: %s (ID: %s, Price: $%.2f)",
material.getTitle(), material.getId(), material.getPrice());
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MaterialAddedEvent that = (MaterialAddedEvent) obj;
return timestamp == that.timestamp &&
Objects.equals(material, that.material);
}
@Override
public int hashCode() {
return Objects.hash(material, timestamp);
}
@Override
public String toString() {
return String.format("MaterialAddedEvent[%s at %d]", material.getTitle(), timestamp);
}
}