package cokr.xit.foundation.component; import java.util.ArrayList; import java.util.Collections; import java.util.List; import cokr.xit.foundation.AbstractObject; import cokr.xit.foundation.data.DataObject; /**서비스 응답으로 반환하는 정보를 갖는 객체의 베이스 클래스.
* 서비스 결과로 전달해야할 정보가 여러 개일 경우 이 클래스를 상속받아 응답클래스를 정의한다.
* 결과 정보가 하나일 경우는 응답클래스를 정의할 필요없다. * @author mjkhan */ public class ServiceResponse extends AbstractObject { private List results; private DataObject info; public List getResults() { return ifEmpty(results, Collections::emptyList); } public ServiceResponse setResults(List results) { this.results = results; return this; } public ServiceResponse add(ExecInfo result) { if (results == null) results = new ArrayList<>(); else if (!(results instanceof ArrayList)) { List tmp = results; results = new ArrayList<>(tmp); } results.add(result); return this; } /**응답 추가정보를 반환한다. * @return 응답 추가정보 */ public DataObject getInfo() { return info; } /**응답 추가정보를 초기화 후 반환한다. * @return 응답 추가정보 */ private DataObject info() { return ifEmpty(info, () -> info = new DataObject()); } /**주어진 키와 값으로 추가정보를 설정한다. * @param 응답 타입 * @param key 추가정보 키 * @param val 추가정보 * @return 현재 응답 */ public ServiceResponse info(String key, Object val) { info().put(key, val); return this; } /**성공한 결과로 저장한 데이터수를 반환한다. * @return 성공한 결과로 저장한 데이터수 */ public int getAffected() { return ExecInfo.getAffected(results); } /**모든 결과가 성공인지 반환한다. * @return 모든 결과의 성공 여부 */ public boolean isSuccess() { return ExecInfo.isSuccess(results); } }