package sample.context;
import java.math.BigDecimal;
import java.util.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.Size;
import org.hibernate.criterion.MatchMode;
import lombok.*;
import sample.context.orm.*;
import sample.model.constraints.OutlineEmpty;
/**
* アプリケーション設定情報を表現します。
* <p>事前に初期データが登録される事を前提とし、値の変更のみ許容します。
*/
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class AppSetting extends OrmActiveRecord<AppSetting> {
private static final long serialVersionUID = 1l;
/** 設定ID */
@Id
@Size(max = 120)
private String id;
/** 区分 */
@Size(max = 60)
private String category;
/** 概要 */
@Size(max = 1300)
private String outline;
/** 値 */
@Size(max = 1300)
private String value;
/** 設定情報値を取得します。 */
public String str() {
return value;
}
public String str(String defaultValue) {
return value == null ? defaultValue : value;
}
public int intValue() {
return Integer.parseInt(value);
}
public int intValue(int defaultValue) {
return value == null ? defaultValue : Integer.parseInt(value);
}
public long longValue() {
return Long.parseLong(value);
}
public long longValue(long defaultValue) {
return value == null ? defaultValue : Long.parseLong(value);
}
public boolean bool() {
return Boolean.parseBoolean(value);
}
public boolean bool(OrmRepository rep, boolean defaultValue) {
return value == null ? defaultValue : Boolean.parseBoolean(value);
}
public BigDecimal decimal() {
return new BigDecimal(value);
}
public BigDecimal decimal(BigDecimal defaultValue) {
return value == null ? defaultValue : new BigDecimal(value);
}
/** 設定情報を取得します。 */
public static Optional<AppSetting> get(OrmRepository rep, String id) {
return rep.get(AppSetting.class, id);
}
public static AppSetting load(OrmRepository rep, String id) {
return rep.load(AppSetting.class, id);
}
/** 設定情報値を設定します。 */
public AppSetting update(OrmRepository rep, String value) {
setValue(value);
return update(rep);
}
/** アプリケーション設定情報を検索します。 */
public static List<AppSetting> find(OrmRepository rep, FindAppSetting p) {
return rep.tmpl().find(AppSetting.class, (criteria) -> {
return criteria
.like(new String[] { "id", "category", "outline" }, p.keyword, MatchMode.ANYWHERE)
.result();
});
}
/** 検索パラメタ */
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class FindAppSetting implements Dto {
private static final long serialVersionUID = 1l;
@OutlineEmpty
private String keyword;
}
}