CreateUserCommand.java

package es.um.atica.faker.users.application.command;

import es.um.atica.faker.users.domain.model.UserAge;
import es.um.atica.faker.users.domain.model.UserId;
import es.um.atica.faker.users.domain.model.UserName;
import es.um.atica.shared.domain.cqrs.SyncCommand;

public class CreateUserCommand extends SyncCommand<Void> {
    
    private static final String IP_REGEXP = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

    private String id;
    private String name;
    private int age;
    private String ipAddress;

    private CreateUserCommand(String id, String name, int age, String ipAddress) {
        this.id = id; this.name = name; this.age = age; this.ipAddress = ipAddress;
    }

    public static CreateUserCommand of(String id, String name, int age, String ipAddress) {
        // Validate Command Data for UI
        UserName.of(name);
        UserId.of(id);
        UserAge.of(age);
        if (!ipAddress.matches(IP_REGEXP)) throw new IllegalArgumentException("You should use a valid ip address!");
        return new CreateUserCommand(id, name, age, ipAddress);
    }

    public String getId() { return id; }
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getIPAddress() { return ipAddress; }

}