2018-09-05 12:00:20 +02:00
|
|
|
package com.google.refine.browsing;
|
|
|
|
|
2018-09-05 13:03:54 +02:00
|
|
|
import java.util.Collections;
|
2018-09-05 12:00:20 +02:00
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Properties;
|
|
|
|
|
|
|
|
import org.json.JSONArray;
|
|
|
|
import org.json.JSONException;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import org.json.JSONWriter;
|
|
|
|
|
|
|
|
import com.google.refine.Jsonizable;
|
|
|
|
import com.google.refine.browsing.Engine.Mode;
|
|
|
|
import com.google.refine.browsing.facets.FacetConfig;
|
|
|
|
import com.google.refine.browsing.facets.ListFacet.ListFacetConfig;
|
|
|
|
import com.google.refine.browsing.facets.RangeFacet.RangeFacetConfig;
|
|
|
|
import com.google.refine.browsing.facets.ScatterplotFacet.ScatterplotFacetConfig;
|
|
|
|
import com.google.refine.browsing.facets.TextSearchFacet.TextSearchFacetConfig;
|
|
|
|
import com.google.refine.browsing.facets.TimeRangeFacet.TimeRangeFacetConfig;
|
|
|
|
|
|
|
|
|
|
|
|
public class EngineConfig implements Jsonizable {
|
|
|
|
|
|
|
|
protected final List<FacetConfig> _facets;
|
|
|
|
protected final Mode _mode;
|
|
|
|
|
|
|
|
public EngineConfig(List<FacetConfig> facets, Mode mode) {
|
|
|
|
_facets = facets;
|
|
|
|
_mode = mode;
|
|
|
|
}
|
|
|
|
|
2018-09-05 13:03:54 +02:00
|
|
|
public Mode getMode() {
|
|
|
|
return _mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<FacetConfig> getFacetConfigs() {
|
|
|
|
return _facets;
|
|
|
|
}
|
|
|
|
|
2018-09-05 12:00:20 +02:00
|
|
|
public static EngineConfig reconstruct(JSONObject o) {
|
|
|
|
if (o == null) {
|
2018-09-05 13:03:54 +02:00
|
|
|
return new EngineConfig(Collections.emptyList(), Mode.RowBased);
|
2018-09-05 12:00:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
List<FacetConfig> facets = new LinkedList<>();
|
|
|
|
if (o.has("facets") && !o.isNull("facets")) {
|
|
|
|
JSONArray a = o.getJSONArray("facets");
|
|
|
|
int length = a.length();
|
|
|
|
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
|
|
JSONObject fo = a.getJSONObject(i);
|
|
|
|
String type = fo.has("type") ? fo.getString("type") : "list";
|
|
|
|
|
|
|
|
FacetConfig facet = null;
|
|
|
|
if ("list".equals(type)) {
|
|
|
|
facet = new ListFacetConfig();
|
|
|
|
} else if ("range".equals(type)) {
|
|
|
|
facet = new RangeFacetConfig();
|
|
|
|
} else if ("timerange".equals(type)) {
|
|
|
|
facet = new TimeRangeFacetConfig();
|
|
|
|
} else if ("scatterplot".equals(type)) {
|
|
|
|
facet = new ScatterplotFacetConfig();
|
|
|
|
} else if ("text".equals(type)) {
|
|
|
|
facet = new TextSearchFacetConfig();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (facet != null) {
|
|
|
|
facet.initializeFromJSON(fo);
|
|
|
|
facets.add(facet);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Mode mode = Mode.RowBased;
|
|
|
|
// for backward compatibility
|
|
|
|
if (o.has(Engine.INCLUDE_DEPENDENT) && !o.isNull(Engine.INCLUDE_DEPENDENT)) {
|
|
|
|
mode = o.getBoolean(Engine.INCLUDE_DEPENDENT) ? Mode.RecordBased : Mode.RowBased;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (o.has(Engine.MODE) && !o.isNull(Engine.MODE)) {
|
|
|
|
mode = Engine.MODE_ROW_BASED.equals(o.getString(Engine.MODE)) ? Mode.RowBased : Mode.RecordBased;
|
|
|
|
}
|
|
|
|
|
|
|
|
return new EngineConfig(facets, mode);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void write(JSONWriter writer, Properties options)
|
|
|
|
throws JSONException {
|
|
|
|
writer.object();
|
|
|
|
writer.key("facets");
|
|
|
|
writer.array();
|
|
|
|
for (FacetConfig facet : _facets) {
|
|
|
|
facet.write(writer, options);
|
|
|
|
}
|
|
|
|
writer.endArray();
|
|
|
|
writer.key(Engine.MODE); writer.value(_mode == Mode.RowBased ? Engine.MODE_ROW_BASED : Engine.MODE_RECORD_BASED);
|
|
|
|
writer.endObject();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|