package org.activityinfo.server.entity.change; import com.google.common.collect.Maps; import org.activityinfo.model.auth.AuthenticatedUser; import org.activityinfo.server.database.hibernate.entity.User; import java.util.Map; import java.util.Set; /** * Wraps a legacy Command as a ChangeRequest */ public class ChangeRequestBuilder implements ChangeRequest { private AuthenticatedUser user; private ChangeType changeType; private String entityType; private String entityId; private final Map<String, Object> properties = Maps.newHashMap(); public ChangeRequestBuilder() { } public static ChangeRequestBuilder delete() { return new ChangeRequestBuilder().setChangeType(ChangeType.DELETE); } public AuthenticatedUser getUser() { return user; } public ChangeRequestBuilder setUser(AuthenticatedUser user) { this.user = user; return this; } public ChangeRequestBuilder setChangeType(ChangeType changeType) { this.changeType = changeType; return this; } public ChangeRequestBuilder setEntityType(String entityType) { this.entityType = entityType; return this; } public ChangeRequestBuilder setEntityId(int entityId) { return setEntityId(Integer.toString(entityId)); } public ChangeRequestBuilder setEntityId(String entityId) { this.entityId = entityId; return this; } @Override public AuthenticatedUser getRequestingUser() { return user; } @Override public ChangeType getChangeType() { return changeType; } @Override public String getEntityType() { return entityType; } @Override public <T> T getPropertyValue(Class<T> propertyClass, String propertyName) { if (!properties.containsKey(propertyName)) { throw new ChangeException(ChangeFailureType.REQUIRED_PROPERTY_MISSING, propertyName); } Object value = properties.get(propertyName); if (value != null && !value.getClass().equals(propertyClass)) { throw new ChangeException(ChangeFailureType.MALFORMED_PROPERTY, propertyName); } return (T) value; } @Override public Set<String> getUpdatedProperties() { return properties.keySet(); } public ChangeRequestBuilder setProperty(String name, Object value) { properties.put(name, value); return this; } @Override public String getEntityId() { return entityId; } public ChangeRequestBuilder setUser(User user) { return setUser(new AuthenticatedUser("xyz", user.getId(), user.getEmail())); } public ChangeRequestBuilder setProperties(Map<String, Object> map) { properties.putAll(map); return this; } }