package com.constellio.app.modules.tasks.model.wrappers.structures; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; import com.constellio.app.modules.tasks.services.TasksSearchServices; import com.constellio.model.entities.schemas.ModifiableStructure; import com.constellio.model.entities.schemas.StructureFactory; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class TaskFollowerFactory implements StructureFactory { transient private GsonBuilder gsonBuilder; transient private Gson gson; public TaskFollowerFactory() { initTransientObjects(); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); initTransientObjects(); } private void initTransientObjects() { ExclusionStrategy strategy = new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { if (f.getName().equals("dirty")) { return true; } return false; } @Override public boolean shouldSkipClass(Class<?> clazz) { return false; } }; gsonBuilder = new GsonBuilder().setExclusionStrategies(strategy); gson = gsonBuilder.create(); } @Override public ModifiableStructure build(String serializedCriterion) { TaskFollower returnFollower = new TaskFollower(); if (StringUtils.isNotBlank(serializedCriterion)) { returnFollower = gson.fromJson(serializedCriterion, TaskFollower.class); returnFollower = rebuildTaskFollower(returnFollower); } return returnFollower; } public TaskFollower rebuildTaskFollower(TaskFollower taskFollower) { String followerID = taskFollower.getFollowerId(); Boolean assigneeModified = taskFollower.getFollowTaskAssigneeModified(); Boolean subTasksModified = taskFollower.getFollowSubTasksModified(); Boolean statusModified = taskFollower.getFollowTaskStatusModified(); Boolean taskCompleted = taskFollower.getFollowTaskCompleted(); Boolean taskDeleted = taskFollower.getFollowTaskDeleted(); return new TaskFollower().setFollowerId(followerID).setFollowTaskAssigneeModified(assigneeModified) .setFollowSubTasksModified(subTasksModified).setFollowTaskStatusModified(statusModified) .setFollowTaskDeleted(taskDeleted).setFollowTaskCompleted(taskCompleted) .setDirty(false); } @Override public String toString(ModifiableStructure structure) { return gson.toJson(structure); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } }