From 121661e8ebc393a537e44f75ac5d586ad027ab89 Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Tue, 20 Nov 2018 19:11:34 +0000 Subject: [PATCH] Let OverlayModels access the Project at deserialization time --- main/src/com/google/refine/model/OverlayModel.java | 8 +++++++- main/src/com/google/refine/model/Project.java | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/main/src/com/google/refine/model/OverlayModel.java b/main/src/com/google/refine/model/OverlayModel.java index 7ca914173..4867d4607 100644 --- a/main/src/com/google/refine/model/OverlayModel.java +++ b/main/src/com/google/refine/model/OverlayModel.java @@ -33,7 +33,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package com.google.refine.model; - +/** + * Overlay models must be serializable and deserializable with Jackson. + * It is possible to have access to the project at deserialization time + * by adding the corresponding parameter to the JSON creator with + * @JacksonInject("project"). + * + */ public interface OverlayModel { public void onBeforeSave(Project project); diff --git a/main/src/com/google/refine/model/Project.java b/main/src/com/google/refine/model/Project.java index f07532d86..0d54ff603 100644 --- a/main/src/com/google/refine/model/Project.java +++ b/main/src/com/google/refine/model/Project.java @@ -50,6 +50,8 @@ import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.InjectableValues; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.refine.ProjectManager; import com.google.refine.ProjectMetadata; import com.google.refine.RefineServlet; @@ -188,6 +190,10 @@ public class Project { Project project = new Project(id); int maxCellCount = 0; + ObjectMapper mapper = ParsingUtilities.mapper.copy(); + InjectableValues injections = new InjectableValues.Std().addValue("project", project); + mapper.setInjectableValues(injections); + String line; while ((line = reader.readLine()) != null) { int equal = line.indexOf('=');