/* * Copyright (c) 2014. * * BaasBox - info-at-baasbox.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.baasbox.db.async; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.exception.ExceptionUtils; import com.baasbox.BBConfiguration; import com.baasbox.BBInternalConstants; import com.baasbox.db.DbHelper; import com.baasbox.service.logging.BaasBoxLogger; public class ExportJob implements Runnable{ private String fileName; private String appcode; public ExportJob(String fileName,String appcode){ this.fileName = fileName; this.appcode = appcode; } @Override public void run() { FileOutputStream dest = null; ZipOutputStream zip = null; FileOutputStream tempJsonOS = null; FileInputStream in = null; try{ //File f = new File(this.fileName); File f = File.createTempFile("export",".temp"); dest = new FileOutputStream(f); zip = new ZipOutputStream(dest); File tmpJson = File.createTempFile("export",".json"); tempJsonOS = new FileOutputStream(tmpJson); DbHelper.exportData(this.appcode,tempJsonOS); BaasBoxLogger.info(String.format("Writing %d bytes ",tmpJson.length())); tempJsonOS.close(); ZipEntry entry = new ZipEntry("export.json"); zip.putNextEntry(entry); in = new FileInputStream(tmpJson); final int BUFFER = BBConfiguration.getImportExportBufferSize(); byte buffer[] = new byte[BUFFER]; int length; while ((length = in.read(buffer)) > 0) { zip.write(buffer, 0, length); } zip.closeEntry(); in.close(); File manifest = File.createTempFile("manifest", ".txt"); FileUtils.writeStringToFile(manifest, BBInternalConstants.IMPORT_MANIFEST_VERSION_PREFIX+BBConfiguration.getApiVersion()); ZipEntry entryManifest = new ZipEntry("manifest.txt"); zip.putNextEntry(entryManifest); zip.write(FileUtils.readFileToByteArray(manifest)); zip.closeEntry(); tmpJson.delete(); manifest.delete(); File finaldestination=new File(this.fileName); FileUtils.moveFile(f, finaldestination); }catch(Exception e){ BaasBoxLogger.error(ExceptionUtils.getMessage(e)); }finally{ try{ if(zip!=null) zip.close(); if(dest!=null) dest.close(); if(tempJsonOS!=null) tempJsonOS.close(); if(in!=null) in.close(); }catch(Exception ioe){ BaasBoxLogger.error(ExceptionUtils.getMessage(ioe)); } } } }