package com.akjava.gwt.lib.client; import java.util.List; import com.akjava.gwt.lib.client.experimental.AsyncMultiCaller; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.gwt.dom.client.ImageElement; import com.google.gwt.event.dom.client.ErrorEvent; /* * not test yet */ public class MultiImageElementLoader { public static interface MultiImageElementListener{ public void onLoad(List<String> successPaths,List<ImageElement> imageElements); public void onError(List<String> errorPaths); } public void loadImages(final MultiImageElementListener listener,String... nameValues){ final List<String> names=Lists.newArrayList(); for(String name:nameValues){ names.add(name); } loadImages(names,listener); } public void loadImages(List<String> fileNames,final MultiImageElementListener listener){ Preconditions.checkNotNull(listener); final List<ImageElement> loaded=Lists.newArrayList(); final List<String> loadedPaths=Lists.newArrayList(); final List<String> faildPaths=Lists.newArrayList(); if(fileNames==null || fileNames.isEmpty()){ listener.onLoad(loadedPaths,loaded); return; } AsyncMultiCaller<String> srcCaller=new AsyncMultiCaller<String>(fileNames) { @Override public void execAsync(final String data) { new ImageElementLoader().load(data, new ImageElementListener() { @Override public void onLoad(ImageElement element) { loaded.add(element); loadedPaths.add(data); done(data,true); } @Override public void onError(String url, ErrorEvent event) { faildPaths.add(data); done(data,true);//not stop on faild } }); } @Override public void doFinally(boolean cancelled) { if(!faildPaths.isEmpty()){ listener.onError(faildPaths); } listener.onLoad(loadedPaths,loaded); } }; srcCaller.startCall(10); } }