Merge pull request #2140 from OpenRefine/issue-2117-scatterplot
Fix scatterplot drawing command
This commit is contained in:
commit
e935730c6f
@ -104,7 +104,7 @@ public class ScatterplotFacet implements Facet {
|
|||||||
protected int rotation;
|
protected int rotation;
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
protected double l;
|
protected double l = 1.;
|
||||||
@JsonProperty(DOT)
|
@JsonProperty(DOT)
|
||||||
protected double dot;
|
protected double dot;
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.google.refine.browsing.Engine;
|
import com.google.refine.browsing.Engine;
|
||||||
import com.google.refine.browsing.FilteredRows;
|
import com.google.refine.browsing.FilteredRows;
|
||||||
@ -101,9 +102,9 @@ public class GetScatterplotCommand extends Command {
|
|||||||
public int size = 100;
|
public int size = 100;
|
||||||
@JsonProperty(ScatterplotFacet.DOT)
|
@JsonProperty(ScatterplotFacet.DOT)
|
||||||
double dot = 100;
|
double dot = 100;
|
||||||
@JsonProperty(ScatterplotFacet.DIM_X)
|
@JsonIgnore
|
||||||
public int dim_x = ScatterplotFacet.LIN;
|
public int dim_x = ScatterplotFacet.LIN;
|
||||||
@JsonProperty(ScatterplotFacet.DIM_Y)
|
@JsonIgnore
|
||||||
public int dim_y = ScatterplotFacet.LIN;
|
public int dim_y = ScatterplotFacet.LIN;
|
||||||
@JsonProperty(ScatterplotFacet.ROTATION)
|
@JsonProperty(ScatterplotFacet.ROTATION)
|
||||||
public int rotation = ScatterplotFacet.NO_ROTATION;
|
public int rotation = ScatterplotFacet.NO_ROTATION;
|
||||||
@ -119,6 +120,36 @@ public class GetScatterplotCommand extends Command {
|
|||||||
public String columnName_y = "";
|
public String columnName_y = "";
|
||||||
@JsonProperty(ScatterplotFacet.Y_EXPRESSION)
|
@JsonProperty(ScatterplotFacet.Y_EXPRESSION)
|
||||||
public String expression_y = "value";
|
public String expression_y = "value";
|
||||||
|
|
||||||
|
@JsonProperty(ScatterplotFacet.DIM_X)
|
||||||
|
public String getDimX() {
|
||||||
|
return dim_x == ScatterplotFacet.LIN ? "lin" : "log";
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty(ScatterplotFacet.DIM_Y)
|
||||||
|
public String getDimY() {
|
||||||
|
return dim_y == ScatterplotFacet.LIN ? "lin" : "log";
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty(ScatterplotFacet.DIM_X)
|
||||||
|
public void setDimX(String dim) {
|
||||||
|
dim_x = dim.equals("lin") ? ScatterplotFacet.LIN : ScatterplotFacet.LOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty(ScatterplotFacet.DIM_Y)
|
||||||
|
public void setDimY(String dim) {
|
||||||
|
dim_y = dim.equals("lin") ? ScatterplotFacet.LIN : ScatterplotFacet.LOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
// rotation can be set to "none" (a JSON string) in which case it should be ignored
|
||||||
|
@JsonProperty(ScatterplotFacet.ROTATION)
|
||||||
|
public void setRotation(Object rotation) {
|
||||||
|
try {
|
||||||
|
this.rotation = Integer.parseInt(rotation.toString());
|
||||||
|
} catch(NumberFormatException e) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void draw(OutputStream output, Project project, Engine engine, PlotterConfig o) throws IOException {
|
public void draw(OutputStream output, Project project, Engine engine, PlotterConfig o) throws IOException {
|
||||||
|
@ -26,6 +26,9 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package com.google.refine.browsing.facets;
|
package com.google.refine.browsing.facets;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertFalse;
|
||||||
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
@ -34,6 +37,7 @@ import com.fasterxml.jackson.core.JsonParseException;
|
|||||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
import com.google.refine.RefineTest;
|
import com.google.refine.RefineTest;
|
||||||
import com.google.refine.browsing.Engine;
|
import com.google.refine.browsing.Engine;
|
||||||
|
import com.google.refine.browsing.RowFilter;
|
||||||
import com.google.refine.browsing.facets.ScatterplotFacet;
|
import com.google.refine.browsing.facets.ScatterplotFacet;
|
||||||
import com.google.refine.browsing.facets.ScatterplotFacet.ScatterplotFacetConfig;
|
import com.google.refine.browsing.facets.ScatterplotFacet.ScatterplotFacetConfig;
|
||||||
import com.google.refine.model.Cell;
|
import com.google.refine.model.Cell;
|
||||||
@ -102,7 +106,11 @@ public class ScatterplotFacetTests extends RefineTest {
|
|||||||
|
|
||||||
ScatterplotFacet facet = config.apply(project);
|
ScatterplotFacet facet = config.apply(project);
|
||||||
facet.computeChoices(project, engine.getAllFilteredRows());
|
facet.computeChoices(project, engine.getAllFilteredRows());
|
||||||
|
|
||||||
TestUtils.isSerializedTo(facet, facetJson);
|
TestUtils.isSerializedTo(facet, facetJson);
|
||||||
|
|
||||||
|
RowFilter filter = facet.getRowFilter(project);
|
||||||
|
assertTrue(filter.filterRow(project, 0, project.rows.get(0)));
|
||||||
|
assertFalse(filter.filterRow(project, 1, project.rows.get(1)));
|
||||||
|
assertTrue(filter.filterRow(project, 3, project.rows.get(3)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
package com.google.refine.commands.browsing;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.testng.Assert;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonParseException;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.google.refine.browsing.facets.ScatterplotFacet;
|
||||||
|
import com.google.refine.commands.Command;
|
||||||
|
import com.google.refine.commands.browsing.GetScatterplotCommand;
|
||||||
|
import com.google.refine.util.ParsingUtilities;
|
||||||
|
|
||||||
|
public class ScatterplotDrawCommandTests {
|
||||||
|
protected HttpServletRequest request = null;
|
||||||
|
protected HttpServletResponse response = null;
|
||||||
|
protected StringWriter writer = null;
|
||||||
|
protected Command command = null;
|
||||||
|
|
||||||
|
@BeforeMethod
|
||||||
|
public void setUp() {
|
||||||
|
request = mock(HttpServletRequest.class);
|
||||||
|
response = mock(HttpServletResponse.class);
|
||||||
|
command = new GetScatterplotCommand();
|
||||||
|
writer = new StringWriter();
|
||||||
|
try {
|
||||||
|
when(response.getWriter()).thenReturn(new PrintWriter(writer));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String configJson = "{"
|
||||||
|
+ "\"name\":\"a (x) vs. b (y)\","
|
||||||
|
+ "\"cx\":\"a\","
|
||||||
|
+ "\"cy\":\"b\","
|
||||||
|
+ "\"l\":150,"
|
||||||
|
+ "\"ex\":\"value\","
|
||||||
|
+ "\"ey\":\"value\","
|
||||||
|
+ "\"dot\":0.8,"
|
||||||
|
+ "\"dim_x\":\"log\","
|
||||||
|
+ "\"dim_y\":\"lin\","
|
||||||
|
+ "\"type\":\"scatterplot\","
|
||||||
|
+ "\"from_x\":1,"
|
||||||
|
+ "\"to_x\":2,"
|
||||||
|
+ "\"from_y\":3,"
|
||||||
|
+ "\"to_y\":4,"
|
||||||
|
+ "\"color\":\"ff6a00\""
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
|
||||||
|
public static String configJsonWithNone = "{"
|
||||||
|
+ "\"name\":\"b (x) vs. y (y)\","
|
||||||
|
+ "\"cx\":\"b\","
|
||||||
|
+ "\"cy\":\"y\","
|
||||||
|
+ "\"l\":150,"
|
||||||
|
+ "\"ex\":\"value\","
|
||||||
|
+ "\"ey\":\"value\","
|
||||||
|
+ "\"dot\":1.4,"
|
||||||
|
+ "\"dim_x\":\"lin\","
|
||||||
|
+ "\"dim_y\":\"lin\","
|
||||||
|
+ "\"r\":\"none\","
|
||||||
|
+ "\"type\":\"scatterplot\","
|
||||||
|
+ "\"from_x\":0,"
|
||||||
|
+ "\"to_x\":0,"
|
||||||
|
+ "\"from_y\":0,"
|
||||||
|
+ "\"to_y\":0,"
|
||||||
|
+ "\"color\":\"ff6a00\"}";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParseConfig() throws JsonParseException, JsonMappingException, IOException {
|
||||||
|
GetScatterplotCommand.PlotterConfig config = ParsingUtilities.mapper.readValue(configJson, GetScatterplotCommand.PlotterConfig.class);
|
||||||
|
Assert.assertEquals("a", config.columnName_x);
|
||||||
|
Assert.assertEquals("b", config.columnName_y);
|
||||||
|
Assert.assertEquals(ScatterplotFacet.LOG, config.dim_x);
|
||||||
|
Assert.assertEquals(ScatterplotFacet.LIN, config.dim_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParseConfigWithNone() throws JsonParseException, JsonMappingException, IOException {
|
||||||
|
GetScatterplotCommand.PlotterConfig config = ParsingUtilities.mapper.readValue(configJsonWithNone, GetScatterplotCommand.PlotterConfig.class);
|
||||||
|
Assert.assertEquals(0, config.rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user