package org.catrobat.html5player.server; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; //import java.util.zip.ZipInputStream; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.StringUtils; import org.catrobat.html5player.client.CatrobatDebug; public class LoadUtils { public static String getFileExtension(String fileName) { String extension = ""; int i = fileName.lastIndexOf('.'); if (i > 0) { extension = fileName.substring(i+1); } return extension; } public static ProjectData loadDatafromZipStream(ZipArchiveInputStream zip) throws IOException { String xml = ""; Map<String,String> images = new HashMap<String,String>(); Map<String,String> sounds = new HashMap<String,String>(); ZipEntry zipEntry; StringBuilder s = new StringBuilder(); while((zipEntry = zip.getNextZipEntry())!=null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int read = 0; CatrobatDebug.debug(zipEntry.getName() + " " + zipEntry.isDirectory()+ " "+ zipEntry.toString() ); if(zipEntry.getName().endsWith(".xml")) { while ((read = zip.read(buffer, 0, 1024)) >= 0) { s.append(new String(buffer, 0, read)); } xml = s.toString(); xml = xml.replaceAll("<url>(.*?)</url>", "<url></url>"); } else if(!zipEntry.getName().endsWith(".nomedia")) { if(zipEntry.getName().contains("images/")) { while ((read = zip.read(buffer, 0, 1024)) >= 0) { baos.write(buffer, 0, read); } String base64 = StringUtils.newStringUtf8(Base64.encodeBase64(baos.toByteArray())); base64 = "data:image/"+LoadUtils.getFileExtension(zipEntry.getName())+";base64," + base64; images.put(zipEntry.getName().replaceFirst("images/", ""), base64); } else if(zipEntry.getName().contains("sounds/")) { while ((read = zip.read(buffer, 0, 1024)) >= 0) { baos.write(buffer, 0, read); } String base64 = StringUtils.newStringUtf8(Base64.encodeBase64(baos.toByteArray())); base64 = "data:audio/"+LoadUtils.getFileExtension(zipEntry.getName())+";base64," + base64; sounds.put(zipEntry.getName().replaceFirst("sounds/", ""), base64); } } } if(xml == "") { return null; } return new ProjectData(xml, images, sounds); } }