Migrate ComputeClustersCommand to use new architecture

This commit is contained in:
Antonin Delpeuch 2018-09-05 17:52:05 +01:00
parent c9436f563d
commit 9f964af7d4
4 changed files with 43 additions and 20 deletions

View File

@ -0,0 +1,35 @@
package com.google.refine.clustering;
import org.json.JSONObject;
import com.google.refine.Jsonizable;
import com.google.refine.model.Project;
/**
* Represents the configuration data for a clusterer.
* @author Antonin Delpeuch
*
*/
public abstract class ClustererConfig implements Jsonizable {
protected String columnName;
/**
* Reads the configuration from a JSON payload (TODO: delete)
* @param o
*/
public void initializeFromJSON(JSONObject o) {
columnName = o.getString("column");
}
public String getColumnName() {
return columnName;
}
/**
* Instantiate the configuration on a particular project.
* @param project
* @return
*/
public abstract Clusterer apply(Project project);
}

View File

@ -238,13 +238,6 @@ public class BinningClusterer extends Clusterer {
}
}
@Deprecated
public void initializeFromJSON(Project project, JSONObject o) throws Exception {
BinningClustererConfig config = new BinningClustererConfig();
config.initializeFromJSON(o);
initializeFromConfig(project, config);
}
public void initializeFromConfig(Project project, BinningClustererConfig config) {
super.initializeFromConfig(project, config);
_keyer = config.getKeyer();

View File

@ -253,13 +253,6 @@ public class kNNClusterer extends Clusterer {
return _clusterer.getClusters(_radius);
}
}
@Deprecated
public void initializeFromJSON(Project project, JSONObject o) throws Exception {
kNNClustererConfig config = new kNNClustererConfig();
config.initializeFromJSON(o);
initializeFromConfig(project, config);
}
public void initializeFromConfig(Project project, kNNClustererConfig config) {
super.initializeFromConfig(project, config);

View File

@ -45,8 +45,9 @@ import org.slf4j.LoggerFactory;
import com.google.refine.browsing.Engine;
import com.google.refine.clustering.Clusterer;
import com.google.refine.clustering.binning.BinningClusterer;
import com.google.refine.clustering.knn.kNNClusterer;
import com.google.refine.clustering.ClustererConfig;
import com.google.refine.clustering.binning.BinningClusterer.BinningClustererConfig;
import com.google.refine.clustering.knn.kNNClusterer.kNNClustererConfig;
import com.google.refine.commands.Command;
import com.google.refine.model.Project;
@ -64,16 +65,17 @@ public class ComputeClustersCommand extends Command {
Engine engine = getEngine(request, project);
JSONObject clusterer_conf = getJsonParameter(request,"clusterer");
Clusterer clusterer = null;
String type = clusterer_conf.has("type") ? clusterer_conf.getString("type") : "binning";
ClustererConfig clustererConfig = null;
if ("knn".equals(type)) {
clusterer = new kNNClusterer();
clustererConfig = new kNNClustererConfig();
} else {
clusterer = new BinningClusterer();
clustererConfig = new BinningClustererConfig();
}
clusterer.initializeFromJSON(project, clusterer_conf);
clustererConfig.initializeFromJSON(clusterer_conf);
Clusterer clusterer = clustererConfig.apply(project);
clusterer.computeClusters(engine);