/** * */ package uk.bl.wa.apache.solr.hadoop; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.hadoop.fs.Path; import org.apache.zookeeper.KeeperException; import com.google.common.io.Files; public class Zipper { public static void zipDir(File dirName, File nameZipFile) throws IOException { ZipOutputStream zip = null; FileOutputStream fW = null; fW = new FileOutputStream(nameZipFile); zip = new ZipOutputStream(fW); for (File f : dirName.listFiles()) { if (f.isDirectory()) { addFolderToZip("", f, zip); } else { addFileToZip("", f, zip, false); } } zip.close(); fW.close(); } private static void addFolderToZip(String path, File srcFolder, ZipOutputStream zip) throws IOException { if (srcFolder.list().length == 0) { addFileToZip(path, srcFolder, zip, true); } else { for (File f : srcFolder.listFiles()) { if (path.equals("")) { addFileToZip(srcFolder.getName(), f, zip, false); } else { addFileToZip(path + "/" + srcFolder.getName(), f, zip, false); } } } } private static void addFileToZip(String path, File folder, ZipOutputStream zip, boolean flag) throws IOException { if (flag) { zip.putNextEntry(new ZipEntry(path + "/" + folder.getName() + "/")); } else { if (folder.isDirectory()) { addFolderToZip(path, folder, zip); } else { byte[] buf = new byte[1024]; int len; FileInputStream in = new FileInputStream(folder); zip.putNextEntry(new ZipEntry(path + "/" + folder.getName())); while ((len = in.read(buf)) > 0) { zip.write(buf, 0, len); } } } } public static void main(String[] args) throws IOException, KeeperException, InterruptedException { String zkHost = "openstack2.ad.bl.uk:2181,openstack4.ad.bl.uk:2181,openstack5.ad.bl.uk:2181/solr"; String collection = "jisc2"; String solrHomeZipName = "cloud-config.zip"; ZooKeeperInspector zki = new ZooKeeperInspector(); org.apache.solr.common.cloud.SolrZkClient zkClient = zki .getZkClient(zkHost); String configName = zki.readConfigName(zkClient, collection); File tmpSolrHomeDir = zki.downloadConfigDir(zkClient, configName); // Create a ZIP file: File solrHomeLocalZip = File.createTempFile("tmp-", solrHomeZipName); solrHomeLocalZip.deleteOnExit(); Zipper.zipDir(tmpSolrHomeDir, solrHomeLocalZip); System.out.println("Written to " + solrHomeLocalZip); Files.copy(solrHomeLocalZip, new File("target/" + solrHomeZipName)); System.out.println("Written to " + solrHomeZipName); // Try to make a core: Solate.createEmbeddedSolrServer(new Path(tmpSolrHomeDir.toString()), null, new Path("target/core")); // Zipper.zipDir(new File("src/test"), new File("target/temp.zip")); } }