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.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.RootPanel; //TODO retry and timeout public class MultiImageLoader { private Map<String,String> lists; private LoadMonitor monitor; public MultiImageLoader(Map<String,String> lists,LoadMonitor monitor){ this.lists=lists; this.monitor=monitor; } private Map<String,Image> geometries; private List<String> remains; public void startLoad(){ geometries=new HashMap<String,Image>(); remains=new ArrayList<String>(); for(String name:lists.keySet()){ remains.add(name); } for(String name:lists.keySet()){ String path=lists.get(name); Image img=new Image(lists.get(name)); img.setVisible(false); RootPanel.get().add(img); img.addLoadHandler(new Loaded(img,name)); } } public synchronized void done(String name){ remains.remove(name); if(remains.size()==0){ monitor.loadComplete(geometries); } } public class Loaded implements LoadHandler{ private String name; private Image img; public Loaded(Image img,String name){ this.img=img; this.name=name; } @Override public void onLoad(LoadEvent event) { geometries.put(name,img); done(name); } } public interface LoadMonitor{ public void loadComplete(Map<String,Image> geos); } public static final native void log(JavaScriptObject object)/*-{ console.log(object); }-*/; public static final native void log(String object)/*-{ console.log(object); }-*/; }