/* * Copyright (c) 2014 antoniomariasanchez at gmail.com. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * antoniomaria - initial API and implementation */ package net.sf.gazpachoquest.domain.core; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import net.sf.gazpachoquest.domain.support.Persistable; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.springframework.util.Assert; public class QuestionnaireAnswers implements Persistable { private static final long serialVersionUID = -214686516454070394L; private Integer id; private Map<String, Object> answers; public QuestionnaireAnswers() { super(); } public Map<String, Object> getAnswers() { if (answers == null) { answers = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER); } return answers; } public void setAnswers(Map<String, Object> answers) { this.answers = answers; } public void setAnswer(String code, Object answer) { Assert.notNull(code); getAnswers().put(code.toLowerCase(), answer); } public Object getAnswer(String code) { return getAnswers().get(code); } @Override public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public boolean isNew() { return null == getId(); } @Override public int hashCode() { if (!isNew()) { return (new HashCodeBuilder()).append(getId()).toHashCode(); } else { return HashCodeBuilder.reflectionHashCode(this); } } @Override public boolean equals(Object obj) { if (obj instanceof Persistable) { final Persistable other = (Persistable) obj; if (!isNew()) { return (new EqualsBuilder()).append(getId(), other.getId()).isEquals(); } else { return EqualsBuilder.reflectionEquals(this, obj); } } else { return false; } } @Override public String toString() { return String.format("Entity of type %s with id: %s", this.getClass().getName(), getId()); } public static Builder with() { return new Builder(); } /** * @hidden */ public static class Builder { private Integer id; private Map<String, Object> answers; public Builder id(Integer id) { this.id = id; return this; } public Builder answer(String code, Object answer) { Assert.notNull(code); if (answer == null) { answers = new HashMap<String, Object>(); } answers.put(code.toLowerCase(), answer); return this; } public QuestionnaireAnswers build() { QuestionnaireAnswers questionnaireAnswers = new QuestionnaireAnswers(); questionnaireAnswers.setId(id); return questionnaireAnswers; } } }