package com.baselet.gwt.client.view.panel.wrapper; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.vectomatic.file.ErrorCode; import org.vectomatic.file.File; import org.vectomatic.file.FileError; import org.vectomatic.file.FileList; import org.vectomatic.file.FileReader; import org.vectomatic.file.events.LoadEndEvent; import org.vectomatic.file.events.LoadEndHandler; import com.baselet.gwt.client.element.DiagramXmlParser; import com.baselet.gwt.client.view.interfaces.AcceptDiagram; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; public class FileOpenHandler { private final Logger log = LoggerFactory.getLogger(FileOpenHandler.class); protected FileReader reader; protected List<File> readQueue = new ArrayList<File>(); public FileOpenHandler(final AcceptDiagram diagram) { reader = new FileReader(); reader.addLoadEndHandler(new LoadEndHandler() { @Override public void onLoadEnd(LoadEndEvent event) { if (reader.getError() == null) { if (readQueue.size() > 0) { try { String result = reader.getStringResult(); diagram.setDiagram(DiagramXmlParser.xmlToDiagram(result)); } catch (RuntimeException e) { log.error("Error at loading diagram from file", e); } finally { readQueue.remove(0); readNext(); } } } } }); } public void processFiles(FileList files) { GWT.log("length=" + files.getLength()); for (File file : files) { readQueue.add(file); } readNext(); } private void readNext() { if (readQueue.size() > 0) { File file = readQueue.get(0); try { reader.readAsText(file); } catch (Throwable t) { // Necessary for FF (see bug https://bugzilla.mozilla.org/show_bug.cgi?id=701154) // Standard-complying browsers will to go in this branch handleError(file); readQueue.remove(0); readNext(); } } } private void handleError(File file) { FileError error = reader.getError(); String errorDesc = ""; if (error != null) { ErrorCode errorCode = error.getCode(); if (errorCode != null) { errorDesc = ": " + errorCode.name(); } } Window.alert("File loading error for file: " + file.getName() + "\n" + errorDesc); } }