package sample.context.actor;
import java.util.Locale;
import lombok.*;
import sample.context.Dto;
/**
* ユースケースにおける利用者を表現します。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Actor implements Dto {
private static final long serialVersionUID = 1L;
/** 匿名利用者定数 */
public static Actor Anonymous = new Actor("unknown", ActorRoleType.Anonymous);
/** システム利用者定数 */
public static Actor System = new Actor("system", ActorRoleType.System);
/** 利用者ID */
private String id;
/** 利用者名称 */
private String name;
/** 利用者が持つ{@link ActorRoleType} */
private ActorRoleType roleType;
/** 利用者が使用する{@link Locale} */
private Locale locale;
/** 利用者の接続チャネル名称 */
private String channel;
/** 利用者を特定する外部情報。(IPなど) */
private String source;
public Actor(String id, ActorRoleType roleType) {
this(id, id, roleType);
}
public Actor(String id, String name, ActorRoleType roleType) {
this(id, name, roleType, Locale.getDefault(), null, null);
}
/**
* 利用者の役割を表現します。
*/
public static enum ActorRoleType {
/** 匿名利用者(ID等の特定情報を持たない利用者) */
Anonymous,
/** 利用者(主にBtoCの顧客, BtoB提供先社員) */
User,
/** 内部利用者(主にBtoCの社員, BtoB提供元社員) */
Internal,
/** システム管理者(ITシステム担当社員またはシステム管理会社の社員) */
Administrator,
/** システム(システム上の自動処理) */
System;
public boolean isAnonymous() {
return this == Anonymous;
}
public boolean isSystem() {
return this == System;
}
public boolean notSystem() {
return !isSystem();
}
}
}