package com.akjava.gwt.three.client.java;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.akjava.gwt.three.client.js.THREE;
import com.akjava.gwt.three.client.js.core.Geometry;
import com.akjava.gwt.three.client.js.loaders.JSONLoader;
import com.akjava.gwt.three.client.js.loaders.JSONLoader.JSONLoadHandler;
import com.akjava.gwt.three.client.js.materials.Material;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
//TODO retry and timeout
public class MultiGeometryLoader {
private Map<String,String> lists;
private LoadMonitor monitor;
public MultiGeometryLoader(Map<String,String> lists,LoadMonitor monitor){
this.lists=lists;
this.monitor=monitor;
}
private Map<String,Geometry> geometries;
private List<String> remains;
public void startLoad(){
geometries=new HashMap<String,Geometry>();
JSONLoader loader=THREE.JSONLoader();
remains=new ArrayList<String>();
for(String name:lists.keySet()){
remains.add(name);
}
for(String name:lists.keySet()){
String path=lists.get(name);
loader.load(path,new Loaded(name));
}
}
public synchronized void done(String name){
remains.remove(name);
if(remains.size()==0){
monitor.loadComplete(geometries);
}
}
public class Loaded implements JSONLoadHandler{
private String name;
public Loaded(String name){
this.name=name;
}
@Override
public void loaded(Geometry geometry,JsArray<Material> ms) {
log("loaded:"+name);
log(geometry);
// TODO Auto-generated method stub
geometries.put(name, geometry);
done(name);
}
}
public interface LoadMonitor{
public void loadComplete(Map<String,Geometry> geos);
}
public static final native void log(JavaScriptObject object)/*-{
console.log(object);
}-*/;
public static final native void log(String object)/*-{
console.log(object);
}-*/;
}