package org.karmaexchange.dao; import static org.karmaexchange.util.OfyService.ofy; import java.util.List; import javax.annotation.Nullable; import javax.xml.bind.annotation.XmlRootElement; import org.karmaexchange.resources.msg.BaseDaoView; import org.karmaexchange.resources.msg.ValidationErrorInfo; import org.karmaexchange.resources.msg.ValidationErrorInfo.ValidationError; import org.karmaexchange.resources.msg.ValidationErrorInfo.ValidationErrorType; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Entity; @XmlRootElement @Entity @Data @NoArgsConstructor @EqualsAndHashCode(callSuper=true) @ToString(callSuper=true) public class Waiver extends IdBaseDao<Waiver> implements BaseDaoView<Waiver> { private String description; private String embeddedContent; public static void insert(Key<Organization> orgKey, @Nullable Waiver waiver) { waiver.initAndValidateOwner(orgKey); BaseDao.upsert(waiver); } private void initAndValidateOwner(Key<Organization> orgKey) { if (owner == null) { owner = orgKey; } else if (!owner.equals(orgKey)) { throw ValidationErrorInfo.createException(ImmutableList.of( new ResourceValidationError(this, ValidationErrorType.RESOURCE_FIELD_VALUE_INVALID, "owner"))); } } @Override protected void preProcessInsert() { super.preProcessInsert(); validateUpsert(); } @Override protected void processUpdate(Waiver prevWaiver) { super.processUpdate(prevWaiver); validateUpsert(); } private void validateUpsert() { List<ValidationError> validationErrors = Lists.newArrayList(); if (description == null) { validationErrors.add(new ResourceValidationError(this, ValidationErrorType.RESOURCE_FIELD_VALUE_REQUIRED, "description")); } if (embeddedContent == null) { validationErrors.add(new ResourceValidationError(this, ValidationErrorType.RESOURCE_FIELD_VALUE_REQUIRED, "embeddedContent")); } if (!validationErrors.isEmpty()) { throw ValidationErrorInfo.createException(validationErrors); } } @Override protected Permission evalPermission() { BaseDao<?> ownerDao = (BaseDao<?>) ofy().load().key(owner).now(); return ownerDao.getPermission(); } @Override public Waiver getDao() { return this; } }