List of usage examples for org.apache.commons.compress.archivers.zip ZipArchiveOutputStream ZipArchiveOutputStream
public ZipArchiveOutputStream(File file) throws IOException
From source file:divconq.tool.release.Main.java
@Override public void run(Scanner scan, ApiSession api) { Path relpath = null;//w w w .j a v a 2s. com Path gitpath = null; Path wikigitpath = null; XElement fldset = Hub.instance.getConfig().selectFirst("CommandLine/Settings"); if (fldset != null) { relpath = Paths.get(fldset.getAttribute("ReleasePath")); gitpath = Paths.get(fldset.getAttribute("GitPath")); wikigitpath = Paths.get(fldset.getAttribute("WikiGitPath")); } boolean running = true; while (running) { try { System.out.println(); System.out.println("-----------------------------------------------"); System.out.println(" Release Builder Menu"); System.out.println("-----------------------------------------------"); System.out.println("0) Exit"); if (relpath != null) System.out.println("1) Build release package from Settings File"); System.out.println("2) Build custom release package [under construction]"); System.out.println("4) Pack the .jar files"); if (gitpath != null) System.out.println("5) Copy Source to GitHub folder"); System.out.println("6) Update AWWW"); String opt = scan.nextLine(); Long mopt = StringUtil.parseInt(opt); if (mopt == null) continue; switch (mopt.intValue()) { case 0: running = false; break; case 1: { ReleasesHelper releases = new ReleasesHelper(); if (!releases.init(relpath)) break; System.out.println("Select a release to build"); System.out.println("0) None"); List<String> rnames = releases.names(); for (int i = 0; i < rnames.size(); i++) System.out.println((i + 1) + ") " + rnames.get(i)); System.out.println("Option #: "); opt = scan.nextLine(); mopt = StringUtil.parseInt(opt); if ((mopt == null) || (mopt == 0)) break; XElement relchoice = releases.get(mopt.intValue() - 1); if (relchoice == null) { System.out.println("Invalid option"); break; } PackagesHelper availpackages = new PackagesHelper(); availpackages.init(); InstallHelper inst = new InstallHelper(); if (!inst.init(availpackages, relchoice)) break; XElement prindesc = availpackages.get(inst.prinpackage); XElement prininst = prindesc.find("Install"); if (prininst == null) { System.out.println("Principle package: " + inst.prinpackagenm + " cannot be released directly, it must be part of another package."); break; } String relvers = prindesc.getAttribute("Version"); System.out.println("Building release version " + relvers); if (prindesc.hasAttribute("LastVersion")) System.out.println("Previous release version " + prindesc.getAttribute("LastVersion")); String rname = relchoice.getAttribute("Name"); Path destpath = relpath.resolve(rname + "/" + rname + "-" + relvers + "-bin.zip"); if (Files.exists(destpath)) { System.out.println("Version " + relvers + " already exists, overwrite? (y/n): "); if (!scan.nextLine().toLowerCase().startsWith("y")) break; Files.delete(destpath); } System.out.println("Preparing zip files"); AtomicBoolean errored = new AtomicBoolean(); Path tempfolder = FileUtil.allocateTempFolder2(); ListStruct ignorepaths = new ListStruct(); Set<String> nolongerdepends = new HashSet<>(); Set<String> dependson = new HashSet<>(); // put all the release files into a temp folder inst.instpkgs.forEach(pname -> { availpackages.get(pname).selectAll("DependsOn").stream() .filter(doel -> !doel.hasAttribute("Option") || inst.relopts.contains(doel.getAttribute("Option"))) .forEach(doel -> { // copy all libraries we rely on doel.selectAll("Library").forEach(libel -> { dependson.add(libel.getAttribute("File")); Path src = Paths.get("./lib/" + libel.getAttribute("File")); Path dest = tempfolder.resolve("lib/" + libel.getAttribute("File")); try { Files.createDirectories(dest.getParent()); if (Files.notExists(dest)) Files.copy(src, dest, StandardCopyOption.COPY_ATTRIBUTES); } catch (Exception x) { errored.set(true); System.out.println("Unable to copy file: " + src); } }); // copy all files we rely on doel.selectAll("File").forEach(libel -> { Path src = Paths.get("./" + libel.getAttribute("Path")); Path dest = tempfolder.resolve(libel.getAttribute("Path")); try { Files.createDirectories(dest.getParent()); if (Files.notExists(dest)) Files.copy(src, dest, StandardCopyOption.COPY_ATTRIBUTES); } catch (Exception x) { errored.set(true); System.out.println("Unable to copy file: " + src); } }); // copy all folders we rely on doel.selectAll("Folder").forEach(libel -> { Path src = Paths.get("./" + libel.getAttribute("Path")); Path dest = tempfolder.resolve(libel.getAttribute("Path")); try { Files.createDirectories(dest.getParent()); } catch (Exception x) { errored.set(true); System.out.println("Unable to copy file: " + src); } OperationResult cres = FileUtil.copyFileTree(src, dest); if (cres.hasErrors()) errored.set(true); }); }); availpackages.get(pname).selectAll("IgnorePaths/Ignore") .forEach(doel -> ignorepaths.addItem(doel.getAttribute("Path"))); // NoLongerDependsOn functionally currently only applies to libraries availpackages.get(pname).selectAll("NoLongerDependsOn/Library") .forEach(doel -> nolongerdepends.add(doel.getAttribute("File"))); // copy the released packages folders Path src = Paths.get("./packages/" + pname); Path dest = tempfolder.resolve("packages/" + pname); try { Files.createDirectories(dest.getParent()); } catch (Exception x) { errored.set(true); System.out.println("Unable to copy file: " + src); } // we may wish to enhance filter to allow .JAR sometimes, but this is meant to prevent copying of packages/pname/lib/abc.lib.jar files OperationResult cres = FileUtil.copyFileTree(src, dest, path -> !path.toString().endsWith(".jar")); if (cres.hasErrors()) errored.set(true); // copy the released packages libraries Path libsrc = Paths.get("./packages/" + pname + "/lib"); Path libdest = tempfolder.resolve("lib"); if (Files.exists(libsrc)) { cres = FileUtil.copyFileTree(libsrc, libdest); if (cres.hasErrors()) errored.set(true); } }); if (errored.get()) { System.out.println("Error with assembling package"); break; } // copy the principle config Path csrc = Paths.get("./packages/" + inst.prinpackage + "/config"); Path cdest = tempfolder.resolve("config/" + inst.prinpackagenm); if (Files.exists(csrc)) { Files.createDirectories(cdest); OperationResult cres = FileUtil.copyFileTree(csrc, cdest); if (cres.hasErrors()) { System.out.println("Error with prepping config"); break; } } boolean configpassed = true; // copy packages with config = true for (XElement pkg : relchoice.selectAll("Package")) { if (!"true".equals(pkg.getAttribute("Config"))) break; String pname = pkg.getAttribute("Name"); int pspos = pname.lastIndexOf('/'); String pnm = (pspos != -1) ? pname.substring(pspos + 1) : pname; csrc = Paths.get("./packages/" + pname + "/config"); cdest = tempfolder.resolve("config/" + pnm); if (Files.exists(csrc)) { Files.createDirectories(cdest); OperationResult cres = FileUtil.copyFileTree(csrc, cdest); if (cres.hasErrors()) { System.out.println("Error with prepping extra config"); configpassed = false; break; } } } if (!configpassed) break; // also copy installer config if being used if (inst.includeinstaller) { csrc = Paths.get("./packages/dc/dcInstall/config"); cdest = tempfolder.resolve("config/dcInstall"); if (Files.exists(csrc)) { Files.createDirectories(cdest); OperationResult cres = FileUtil.copyFileTree(csrc, cdest); if (cres.hasErrors()) { System.out.println("Error with prepping install config"); break; } } } // write out the deployed file RecordStruct deployed = new RecordStruct(); deployed.setField("Version", relvers); deployed.setField("PackageFolder", relpath.resolve(rname)); deployed.setField("PackagePrefix", rname); OperationResult d1res = IOUtil.saveEntireFile(tempfolder.resolve("config/deployed.json"), deployed.toPrettyString()); if (d1res.hasErrors()) { System.out.println("Error with prepping deployed"); break; } RecordStruct deployment = new RecordStruct(); deployment.setField("Version", relvers); if (prindesc.hasAttribute("LastVersion")) deployment.setField("DependsOn", prindesc.getAttribute("LastVersion")); deployment.setField("UpdateMessage", "This update is complete, you may accept this update as runnable."); nolongerdepends.removeAll(dependson); ListStruct deletefiles = new ListStruct(); nolongerdepends.forEach(fname -> deletefiles.addItem("lib/" + fname)); deployment.setField("DeleteFiles", deletefiles); deployment.setField("IgnorePaths", ignorepaths); d1res = IOUtil.saveEntireFile(tempfolder.resolve("deployment.json"), deployment.toPrettyString()); if (d1res.hasErrors()) { System.out.println("Error with prepping deployment"); break; } // write env file d1res = IOUtil.saveEntireFile(tempfolder.resolve("env.bat"), "set mem=" + relchoice.getAttribute("Memory", "2048") + "\r\n" + "SET project=" + inst.prinpackagenm + "\r\n" + "SET service=" + relchoice.getAttribute("Service", inst.prinpackagenm) + "\r\n" + "SET servicename=" + relchoice.getAttribute("ServiceName", inst.prinpackagenm + " Service") + "\r\n"); if (d1res.hasErrors()) { System.out.println("Error with prepping env"); break; } System.out.println("Packing Release file."); Path relbin = relpath.resolve(rname + "/" + rname + "-" + relvers + "-bin.zip"); if (Files.notExists(relbin.getParent())) Files.createDirectories(relbin.getParent()); ZipArchiveOutputStream zipout = new ZipArchiveOutputStream(relbin.toFile()); try { Files.walkFileTree(tempfolder, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { ZipArchiveEntry entry = new ZipArchiveEntry( tempfolder.relativize(file).toString()); entry.setSize(Files.size(file)); zipout.putArchiveEntry(entry); zipout.write(Files.readAllBytes(file)); zipout.closeArchiveEntry(); return FileVisitResult.CONTINUE; } }); } catch (IOException x) { System.out.println("Error building zip: " + x); } zipout.close(); System.out.println("Release file written"); FileUtil.deleteDirectory(tempfolder); break; } // end case 1 case 3: { System.out.println("Note these utilities are only good from the main console,"); System.out.println("if you are using a remote connection then the encryption will"); System.out.println("not work as expected. [we do not have access the master keys]"); System.out.println(); Foreground.utilityMenu(scan); break; } case 4: { System.out.println("Packing jar library files."); String[] packlist = new String[] { "divconq.core", "divconq.interchange", "divconq.web", "divconq.tasks", "divconq.tasks.api", "ncc.uploader.api", "ncc.uploader.core", "ncc.workflow", "sd.core" }; String[] packnames = new String[] { "dcCore", "dcInterchange", "dcWeb", "dcTasks", "dcTasksApi", "nccUploaderApi", "nccUploader", "nccWorkflow", "sd/sdBackend" }; for (int i = 0; i < packlist.length; i++) { String lib = packlist[i]; String pname = packnames[i]; Path relbin = Paths.get("./ext/" + lib + ".jar"); Path srcbin = Paths.get("./" + lib + "/bin"); Path packbin = Paths.get("./packages/" + pname + "/lib/" + lib + ".jar"); if (Files.notExists(relbin.getParent())) Files.createDirectories(relbin.getParent()); Files.deleteIfExists(relbin); ZipArchiveOutputStream zipout = new ZipArchiveOutputStream(relbin.toFile()); try { Files.walkFileTree(srcbin, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { ZipArchiveEntry entry = new ZipArchiveEntry( srcbin.relativize(file).toString()); entry.setSize(Files.size(file)); zipout.putArchiveEntry(entry); zipout.write(Files.readAllBytes(file)); zipout.closeArchiveEntry(); return FileVisitResult.CONTINUE; } }); } catch (IOException x) { System.out.println("Error building zip: " + x); } zipout.close(); Files.copy(relbin, packbin, StandardCopyOption.REPLACE_EXISTING); } System.out.println("Done"); break; } case 5: { System.out.println("Copying Source Files"); System.out.println("Cleaning folders"); OperationResult or = FileUtil.deleteDirectory(gitpath.resolve("divconq.core/src/main/java")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("divconq.core/src/main/resources")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("divconq.interchange/src/main/java")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("divconq.tasks/src/main/java")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("divconq.tasks.api/src/main/java")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("divconq.web/src/main/java")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectory(gitpath.resolve("packages")); if (or.hasErrors()) { System.out.println("Error deleting files"); break; } or = FileUtil.deleteDirectoryContent(wikigitpath, ".git"); if (or.hasErrors()) { System.out.println("Error deleting wiki files"); break; } System.out.println("Copying folders"); System.out.println("Copy tree ./divconq.core/src"); or = FileUtil.copyFileTree(Paths.get("./divconq.core/src/divconq"), gitpath.resolve("divconq.core/src/main/java/divconq"), new Predicate<Path>() { @Override public boolean test(Path file) { return file.getFileName().toString().endsWith(".java"); } }); if (or.hasErrors()) { System.out.println("Error copying files"); break; } or = FileUtil.copyFileTree(Paths.get("./divconq.core/src/org"), gitpath.resolve("divconq.core/src/main/java/org"), new Predicate<Path>() { @Override public boolean test(Path file) { return file.getFileName().toString().endsWith(".java"); } }); if (or.hasErrors()) { System.out.println("Error copying files"); break; } or = FileUtil.copyFileTree(Paths.get("./divconq.core/src/localize"), gitpath.resolve("divconq.core/src/main/resources/localize"), new Predicate<Path>() { @Override public boolean test(Path file) { return file.getFileName().toString().endsWith(".xml"); } }); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./divconq.interchange/src"); or = FileUtil.copyFileTree(Paths.get("./divconq.interchange/src"), gitpath.resolve("divconq.interchange/src/main/java")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./divconq.tasks/src"); or = FileUtil.copyFileTree(Paths.get("./divconq.tasks/src"), gitpath.resolve("divconq.tasks/src/main/java")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./divconq.tasks.api/src"); or = FileUtil.copyFileTree(Paths.get("./divconq.tasks.api/src"), gitpath.resolve("divconq.tasks.api/src/main/java")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./divconq.web/src"); or = FileUtil.copyFileTree(Paths.get("./divconq.web/src"), gitpath.resolve("divconq.web/src/main/java")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcCore"); or = FileUtil.copyFileTree(Paths.get("./packages/dcCore"), gitpath.resolve("packages/dcCore")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcCorePublic"); or = FileUtil.copyFileTree(Paths.get("./packages/dcCorePublic"), gitpath.resolve("packages/dcCorePublic")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcInterchange"); or = FileUtil.copyFileTree(Paths.get("./packages/dcInterchange"), gitpath.resolve("packages/dcInterchange")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcTasks"); or = FileUtil.copyFileTree(Paths.get("./packages/dcTasks"), gitpath.resolve("packages/dcTasks")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcTasksApi"); or = FileUtil.copyFileTree(Paths.get("./packages/dcTasksApi"), gitpath.resolve("packages/dcTasksApi")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcTasksWeb"); or = FileUtil.copyFileTree(Paths.get("./packages/dcTasksWeb"), gitpath.resolve("packages/dcTasksWeb")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcTest"); or = FileUtil.copyFileTree(Paths.get("./packages/dcTest"), gitpath.resolve("packages/dcTest")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./packages/dcWeb"); or = FileUtil.copyFileTree(Paths.get("./packages/dcWeb"), gitpath.resolve("packages/dcWeb")); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copy tree ./divconq.wiki/public"); or = FileUtil.copyFileTree(Paths.get("./divconq.wiki/public"), wikigitpath); if (or.hasErrors()) { System.out.println("Error copying files"); break; } System.out.println("Copying files"); Files.copy(Paths.get("./README.md"), gitpath.resolve("README.md"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); Files.copy(Paths.get("./RELEASE_NOTES.md"), gitpath.resolve("RELEASE_NOTES.md"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); Files.copy(Paths.get("./NOTICE.txt"), gitpath.resolve("NOTICE.txt"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); Files.copy(Paths.get("./LICENSE.txt"), gitpath.resolve("LICENSE.txt"), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); System.out.println("Done"); break; } case 6: { System.out.println("Are you sure you want to update AWWW Server? (y/n): "); if (!scan.nextLine().toLowerCase().startsWith("y")) break; ReleasesHelper releases = new ReleasesHelper(); if (!releases.init(relpath)) break; XElement relchoice = releases.get("AWWWServer"); if (relchoice == null) { System.out.println("Invalid option"); break; } PackagesHelper availpackages = new PackagesHelper(); availpackages.init(); InstallHelper inst = new InstallHelper(); if (!inst.init(availpackages, relchoice)) break; ServerHelper ssh = new ServerHelper(); if (!ssh.init(relchoice.find("SSH"))) break; ChannelSftp sftp = null; try { Channel channel = ssh.session().openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; // go to routines folder sftp.cd("/usr/local/bin/dc/AWWWServer"); FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repository = builder.setGitDir(new File(".git")).findGitDir() // scan up the file system tree .build(); String lastsync = releases.getData("AWWWServer").getFieldAsString("LastCommitSync"); RevWalk rw = new RevWalk(repository); ObjectId head1 = repository.resolve(Constants.HEAD); RevCommit commit1 = rw.parseCommit(head1); releases.getData("AWWWServer").setField("LastCommitSync", head1.name()); ObjectId rev2 = repository.resolve(lastsync); RevCommit parent = rw.parseCommit(rev2); //RevCommit parent2 = rw.parseCommit(parent.getParent(0).getId()); DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE); df.setRepository(repository); df.setDiffComparator(RawTextComparator.DEFAULT); df.setDetectRenames(true); // list oldest first or change types are all wrong!! List<DiffEntry> diffs = df.scan(parent.getTree(), commit1.getTree()); for (DiffEntry diff : diffs) { String gnpath = diff.getNewPath(); String gopath = diff.getOldPath(); Path npath = Paths.get("./" + gnpath); Path opath = Paths.get("./" + gopath); if (diff.getChangeType() == ChangeType.DELETE) { if (inst.containsPathExtended(opath)) { System.out.println("- " + diff.getChangeType().name() + " - " + opath); try { sftp.rm(opath.toString()); System.out.println("deleted!!"); } catch (SftpException x) { System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); System.out.println("Sftp Error: " + x); System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } } else { System.out.println("/ " + diff.getChangeType().name() + " - " + gopath + " !!!!!!!!!!!!!!!!!!!!!!!!!"); } } else if ((diff.getChangeType() == ChangeType.ADD) || (diff.getChangeType() == ChangeType.MODIFY) || (diff.getChangeType() == ChangeType.COPY)) { if (inst.containsPathExtended(npath)) { System.out.println("+ " + diff.getChangeType().name() + " - " + npath); try { ssh.makeDirSftp(sftp, npath.getParent()); sftp.put(npath.toString(), npath.toString(), ChannelSftp.OVERWRITE); sftp.chmod(npath.endsWith(".sh") ? 484 : 420, npath.toString()); // 644 octal = 420 dec, 744 octal = 484 dec System.out.println("uploaded!!"); } catch (SftpException x) { System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); System.out.println("Sftp Error: " + x); System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } } else { System.out.println("> " + diff.getChangeType().name() + " - " + gnpath + " !!!!!!!!!!!!!!!!!!!!!!!!!"); } } else if (diff.getChangeType() == ChangeType.RENAME) { // remove the old if (inst.containsPathExtended(opath)) { System.out.println("- " + diff.getChangeType().name() + " - " + opath); try { sftp.rm(opath.toString()); System.out.println("deleted!!"); } catch (SftpException x) { System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); System.out.println("Sftp Error: " + x); System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } } else { System.out.println("/ " + diff.getChangeType().name() + " - " + gopath + " !!!!!!!!!!!!!!!!!!!!!!!!!"); } // add the new path if (inst.containsPathExtended(npath)) { System.out.println("+ " + diff.getChangeType().name() + " - " + npath); try { ssh.makeDirSftp(sftp, npath.getParent()); sftp.put(npath.toString(), npath.toString(), ChannelSftp.OVERWRITE); sftp.chmod(npath.endsWith(".sh") ? 484 : 420, npath.toString()); // 644 octal = 420 dec, 744 octal = 484 dec System.out.println("uploaded!!"); } catch (SftpException x) { System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); System.out.println("Sftp Error: " + x); System.out.println( " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } } else { System.out.println("> " + diff.getChangeType().name() + " - " + gnpath + " !!!!!!!!!!!!!!!!!!!!!!!!!"); } } else { System.out.println("??????????????????????????????????????????????????????????"); System.out.println(": " + diff.getChangeType().name() + " - " + gnpath + " ?????????????????????????"); System.out.println("??????????????????????????????????????????????????????????"); } } rw.dispose(); repository.close(); releases.saveData(); } catch (JSchException x) { System.out.println("Sftp Error: " + x); } finally { if (sftp.isConnected()) sftp.exit(); ssh.close(); } break; } case 7: { Path sfolder = Paths.get("/Work/Projects/awww-current/dairy-graze/poly"); Path dfolder = Paths.get("/Work/Projects/awww-current/dairy-graze/poly-js"); Files.list(sfolder).forEach(file -> { String fname = file.getFileName().toString(); if (!fname.endsWith(".xml")) return; FuncResult<XElement> lres = XmlReader.loadFile(file, false); if (lres.isEmptyResult()) { System.out.println("Unable to parse: " + file); return; } String zc = fname.substring(5, 8); String code = "zipsData['" + zc + "'] = "; XElement root = lres.getResult(); /* <polyline1 lng="-90.620897" lat="45.377447"/> <polyline1 lng="-90.619327" lat="45.3805"/> [-71.196845,41.67757],[-71.120168,41.496831],[-71.317338,41.474923],[-71.196845,41.67757] */ ListStruct center = new ListStruct(); ListStruct cords = new ListStruct(); ListStruct currentPoly = null; //String currentName = null; for (XElement child : root.selectAll("*")) { String cname = child.getName(); if (cname.startsWith("marker")) { // not always accurate if (center.isEmpty()) center.addItem(Struct.objectToDecimal(child.getAttribute("lng")), Struct.objectToDecimal(child.getAttribute("lat"))); currentPoly = new ListStruct(); cords.addItem(new ListStruct(currentPoly)); continue; } /* if (cname.startsWith("info")) { System.out.println("areas: " + child.getAttribute("areas")); continue; } */ if (!cname.startsWith("polyline")) continue; if (currentPoly == null) { //if (!cname.equals(currentName)) { //if (currentName == null) { // currentName = cname; // System.out.println("new poly: " + cname); currentPoly = new ListStruct(); cords.addItem(new ListStruct(currentPoly)); } currentPoly.addItem(new ListStruct(Struct.objectToDecimal(child.getAttribute("lng")), Struct.objectToDecimal(child.getAttribute("lat")))); } RecordStruct feat = new RecordStruct().withField("type", "Feature") .withField("id", "zip" + zc) .withField("properties", new RecordStruct().withField("name", "Prefix " + zc).withField("alias", zc)) .withField("geometry", new RecordStruct().withField("type", "MultiPolygon") .withField("coordinates", cords)); RecordStruct entry = new RecordStruct().withField("code", zc).withField("geo", feat) .withField("center", center); IOUtil.saveEntireFile2(dfolder.resolve("us-zips-" + zc + ".js"), code + entry.toPrettyString() + ";"); }); break; } } } catch (Exception x) { System.out.println("CLI error: " + x); } } }
From source file:com.iorga.webappwatcher.EventLogManager.java
private ArchiveOutputStream writeEventLogToHttpServletResponse(final HttpServletResponse httpResponse, String fileName, ArchiveOutputStream outputStream) throws IOException { if (outputStream == null) { // First, let's open the outputStream httpResponse.setStatus(HttpServletResponse.SC_OK); httpResponse.setContentType("application/zip"); httpResponse.setHeader("Content-Disposition", "attachment; filename=\"" + generateLogFileNameWithoutExtension() + ".zip\""); outputStream = new ZipArchiveOutputStream(httpResponse.getOutputStream()); }// ww w. java 2 s . co m final File file = new File(getLogPathDirectory(), fileName); InputStream inputStream = new FileInputStream(file); if (fileName.endsWith(".gz")) { // it's a GZIP, let's decompress it inputStream = new GZIPInputStream(inputStream); fileName = StringUtils.substringBeforeLast(fileName, ".gz"); } else if (logFile != null && logFile.getName().equals(fileName)) { // this is the current log file, we must lock the logFile synchronized (objectOutputStreamLogLock) { // before trying to download the log, we must first flush it flushLog(); writeEventLogToHttpServletResponse(outputStream, inputStream, file, fileName); } return outputStream; } writeEventLogToHttpServletResponse(outputStream, inputStream, file, fileName); return outputStream; }
From source file:com.android.repository.util.InstallerUtilTest.java
public void testUnzip() throws Exception { if (new MockFileOp().isWindows()) { // can't run on windows. return;/*w w w.jav a 2s . com*/ } // zip needs a real file, so no MockFileOp for us. FileOp fop = FileOpUtils.create(); Path root = Files.createTempDirectory("InstallerUtilTest"); Path outRoot = Files.createTempDirectory("InstallerUtilTest"); try { Path file1 = root.resolve("foo"); Files.write(file1, "content".getBytes()); Path dir1 = root.resolve("bar"); Files.createDirectories(dir1); Path file2 = dir1.resolve("baz"); Files.write(file2, "content2".getBytes()); Files.createSymbolicLink(root.resolve("link1"), dir1); Files.createSymbolicLink(root.resolve("link2"), file2); Path outZip = outRoot.resolve("out.zip"); try (ZipArchiveOutputStream out = new ZipArchiveOutputStream(outZip.toFile()); Stream<Path> listing = Files.walk(root)) { listing.forEach(path -> { try { ZipArchiveEntry archiveEntry = (ZipArchiveEntry) out.createArchiveEntry(path.toFile(), root.relativize(path).toString()); out.putArchiveEntry(archiveEntry); if (Files.isSymbolicLink(path)) { archiveEntry.setUnixMode(UnixStat.LINK_FLAG | archiveEntry.getUnixMode()); out.write(path.getParent().relativize(Files.readSymbolicLink(path)).toString() .getBytes()); } else if (!Files.isDirectory(path)) { out.write(Files.readAllBytes(path)); } out.closeArchiveEntry(); } catch (Exception e) { fail(); } }); } Path unzipped = outRoot.resolve("unzipped"); Files.createDirectories(unzipped); InstallerUtil.unzip(outZip.toFile(), unzipped.toFile(), fop, 1, new FakeProgressIndicator()); assertEquals("content", new String(Files.readAllBytes(unzipped.resolve("foo")))); Path resultDir = unzipped.resolve("bar"); Path resultFile2 = resultDir.resolve("baz"); assertEquals("content2", new String(Files.readAllBytes(resultFile2))); Path resultLink = unzipped.resolve("link1"); assertTrue(Files.isDirectory(resultLink)); assertTrue(Files.isSymbolicLink(resultLink)); assertTrue(Files.isSameFile(resultLink, resultDir)); Path resultLink2 = unzipped.resolve("link2"); assertEquals("content2", new String(Files.readAllBytes(resultLink2))); assertTrue(Files.isSymbolicLink(resultLink2)); assertTrue(Files.isSameFile(resultLink2, resultFile2)); } finally { fop.deleteFileOrFolder(root.toFile()); fop.deleteFileOrFolder(outRoot.toFile()); } }
From source file:com.jaeksoft.searchlib.crawler.web.database.UrlManager.java
public File exportCrawlCache(AbstractSearchRequest searchRequest) throws IOException, SearchLibException { File tempFile = null;// www . j a va2s. c om ZipArchiveOutputStream zipOutput = null; CrawlCacheManager crawlCacheManager = ClientCatalog.getCrawlCacheManager(); if (crawlCacheManager.isDisabled()) throw new SearchLibException("The crawlCache is disabled."); try { tempFile = File.createTempFile("OSS_web_crawler_crawlcache", ".zip"); zipOutput = new ZipArchiveOutputStream(tempFile); int currentPos = 0; List<UrlItem> uList = new ArrayList<UrlItem>(); for (;;) { int totalSize = (int) getUrlList(searchRequest, currentPos, 1000, uList); if (uList.size() == 0) break; for (UrlItem u : uList) { URL url = u.getURL(); if (url == null) continue; DownloadItem downloadItem = crawlCacheManager.loadCache(url.toURI()); if (downloadItem == null) continue; downloadItem.writeToZip(zipOutput); } uList.clear(); currentPos += 1000; if (currentPos >= totalSize) break; } zipOutput.close(); zipOutput = null; return tempFile; } catch (JSONException e) { throw new IOException(e); } catch (URISyntaxException e) { throw new IOException(e); } finally { if (zipOutput != null) IOUtils.closeQuietly(zipOutput); } }
From source file:ee.sk.digidoc.SignedDoc.java
/** * Writes the SignedDoc to an output file * and automatically calculates DataFile sizes * and digests/* w w w .j ava 2 s . c o m*/ * @param outputFile output file name * @param fTempSdoc temporrary file, copy of original for copying items * @throws DigiDocException for all errors */ public void writeToStream(OutputStream os/*, File fTempSdoc*/) throws DigiDocException { DigiDocException ex1 = validateFormatAndVersion(); if (ex1 != null) throw ex1; try { DigiDocXmlGenFactory genFac = new DigiDocXmlGenFactory(this); if (m_format.equals(SignedDoc.FORMAT_BDOC)) { ZipArchiveOutputStream zos = new ZipArchiveOutputStream(os); zos.setEncoding("UTF-8"); if (m_logger.isDebugEnabled()) m_logger.debug("OS: " + ((os != null) ? "OK" : "NULL")); // write mimetype if (m_logger.isDebugEnabled()) m_logger.debug("Writing: " + MIMET_FILE_NAME); ZipArchiveEntry ze = new ZipArchiveEntry(MIMET_FILE_NAME); if (m_comment == null) m_comment = DigiDocGenFactory.getUserInfo(m_format, m_version); ze.setComment(m_comment); ze.setMethod(ZipArchiveEntry.STORED); java.util.zip.CRC32 crc = new java.util.zip.CRC32(); if (m_version.equals(BDOC_VERSION_1_0)) { ze.setSize(SignedDoc.MIMET_FILE_CONTENT_10.getBytes().length); crc.update(SignedDoc.MIMET_FILE_CONTENT_10.getBytes()); } if (m_version.equals(BDOC_VERSION_1_1)) { ze.setSize(SignedDoc.MIMET_FILE_CONTENT_11.getBytes().length); crc.update(SignedDoc.MIMET_FILE_CONTENT_11.getBytes()); } if (m_version.equals(BDOC_VERSION_2_1)) { ze.setSize(SignedDoc.MIMET_FILE_CONTENT_20.getBytes().length); crc.update(SignedDoc.MIMET_FILE_CONTENT_20.getBytes()); } ze.setCrc(crc.getValue()); zos.putArchiveEntry(ze); if (m_version.equals(BDOC_VERSION_1_0)) { zos.write(SignedDoc.MIMET_FILE_CONTENT_10.getBytes()); } if (m_version.equals(BDOC_VERSION_1_1)) { zos.write(SignedDoc.MIMET_FILE_CONTENT_11.getBytes()); } if (m_version.equals(BDOC_VERSION_2_1)) { zos.write(SignedDoc.MIMET_FILE_CONTENT_20.getBytes()); } zos.closeArchiveEntry(); // write manifest.xml if (m_logger.isDebugEnabled()) m_logger.debug("Writing: " + MANIF_FILE_NAME); ze = new ZipArchiveEntry(MANIF_DIR_META_INF); ze = new ZipArchiveEntry(MANIF_FILE_NAME); ze.setComment(DigiDocGenFactory.getUserInfo(m_format, m_version)); zos.putArchiveEntry(ze); //if(m_logger.isDebugEnabled()) // m_logger.debug("Writing manif:\n" + m_manifest.toString()); zos.write(m_manifest.toXML()); zos.closeArchiveEntry(); // write data files for (int i = 0; i < countDataFiles(); i++) { DataFile df = getDataFile(i); if (m_logger.isDebugEnabled()) m_logger.debug("Writing DF: " + df.getFileName() + " content: " + df.getContentType() + " df-cache: " + ((df.getDfCacheFile() != null) ? df.getDfCacheFile().getAbsolutePath() : "NONE")); InputStream is = null; if (df.hasAccessToDataFile()) is = df.getBodyAsStream(); else is = findDataFileAsStream(df.getFileName()); if (is != null) { File dfFile = new File(df.getFileName()); String fileName = dfFile.getName(); ze = new ZipArchiveEntry(fileName); if (df.getComment() == null) df.setComment(DigiDocGenFactory.getUserInfo(m_format, m_version)); ze.setComment(df.getComment()); ze.setSize(dfFile.length()); ze.setTime( (df.getLastModDt() != null) ? df.getLastModDt().getTime() : dfFile.lastModified()); zos.putArchiveEntry(ze); byte[] data = new byte[2048]; int nRead = 0, nTotal = 0; crc = new java.util.zip.CRC32(); while ((nRead = is.read(data)) > 0) { zos.write(data, 0, nRead); nTotal += nRead; crc.update(data, 0, nRead); } ze.setSize(nTotal); ze.setCrc(crc.getValue()); zos.closeArchiveEntry(); is.close(); } } for (int i = 0; i < countSignatures(); i++) { Signature sig = getSignature(i); String sFileName = sig.getPath(); if (sFileName == null) { if (m_version.equals(BDOC_VERSION_2_1)) sFileName = SIG_FILE_NAME_20 + (i + 1) + ".xml"; else sFileName = SIG_FILE_NAME + (i + 1) + ".xml"; } if (!sFileName.startsWith("META-INF")) sFileName = "META-INF/" + sFileName; if (m_logger.isDebugEnabled()) m_logger.debug("Writing SIG: " + sFileName + " orig: " + ((sig.getOrigContent() != null) ? "OK" : "NULL")); ze = new ZipArchiveEntry(sFileName); if (sig.getComment() == null) sig.setComment(DigiDocGenFactory.getUserInfo(m_format, m_version)); ze.setComment(sig.getComment()); String sSig = null; if (sig.getOrigContent() != null) sSig = new String(sig.getOrigContent(), "UTF-8"); else sSig = sig.toString(); if (sSig != null && !sSig.startsWith("<?xml")) sSig = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + sSig; byte[] sdata = sSig.getBytes("UTF-8"); if (m_logger.isDebugEnabled()) m_logger.debug("Writing SIG: " + sFileName + " xml:\n---\n " + ((sSig != null) ? sSig : "NULL") + "\n---\n "); ze.setSize(sdata.length); crc = new java.util.zip.CRC32(); crc.update(sdata); ze.setCrc(crc.getValue()); zos.putArchiveEntry(ze); zos.write(sdata); zos.closeArchiveEntry(); } zos.close(); } else if (m_format.equals(SignedDoc.FORMAT_DIGIDOC_XML)) { // ddoc format os.write(xmlHeader().getBytes()); for (int i = 0; i < countDataFiles(); i++) { DataFile df = getDataFile(i); df.writeToFile(os); os.write("\n".getBytes()); } for (int i = 0; i < countSignatures(); i++) { Signature sig = getSignature(i); if (sig.getOrigContent() != null) os.write(sig.getOrigContent()); else os.write(genFac.signatureToXML(sig)); os.write("\n".getBytes()); } os.write(xmlTrailer().getBytes()); } } catch (DigiDocException ex) { throw ex; // allready handled } catch (Exception ex) { DigiDocException.handleException(ex, DigiDocException.ERR_WRITE_FILE); } }
From source file:fr.gael.dhus.datastore.processing.ProcessingManager.java
/** * Creates a zip file at the specified path with the contents of the * specified directory./*from ww w. j a v a2 s . com*/ * * @param Input directory path. The directory were is located directory to * archive. * @param The full path of the zip file. * @return the checksum accordig to * fr.gael.dhus.datastore.processing.impl.zip.digest variable. * @throws IOException If anything goes wrong */ private Map<String, String> processZip(String inpath, File output) throws IOException { // Retrieve configuration settings String[] algorithms = cfgManager.getDownloadConfiguration().getChecksumAlgorithms().split(","); int compressionLevel = cfgManager.getDownloadConfiguration().getCompressionLevel(); FileOutputStream fOut = null; BufferedOutputStream bOut = null; ZipArchiveOutputStream tOut = null; MultipleDigestOutputStream dOut = null; try { fOut = new FileOutputStream(output); if ((algorithms != null) && (algorithms.length > 0)) { try { dOut = new MultipleDigestOutputStream(fOut, algorithms); bOut = new BufferedOutputStream(dOut); } catch (NoSuchAlgorithmException e) { LOGGER.error("Problem computing checksum algorithms.", e); dOut = null; bOut = new BufferedOutputStream(fOut); } } else bOut = new BufferedOutputStream(fOut); tOut = new ZipArchiveOutputStream(bOut); tOut.setLevel(compressionLevel); addFileToZip(tOut, inpath, ""); } finally { try { tOut.finish(); tOut.close(); bOut.close(); if (dOut != null) dOut.close(); fOut.close(); } catch (Exception e) { LOGGER.error("Exception raised during ZIP stream close", e); } } if (dOut != null) { Map<String, String> checksums = new HashMap<String, String>(); for (String algorithm : algorithms) { String chk = dOut.getMessageDigestAsHexadecimalString(algorithm); if (chk != null) checksums.put(algorithm, chk); } return checksums; } return null; }
From source file:net.test.aliyun.z7.Task.java
public void doWork() throws Throwable { //init task to DB System.out.println("do Task " + index + "\t from :" + oldKey); ////from w w w .j ava 2s . c om //1. System.out.print("\t save to Local -> working... "); OSSObject ossObject = client.getObject("files-subtitle", oldKey); File rarFile = new File(this.tempPath, ossObject.getObjectMetadata().getContentDisposition()); rarFile.getParentFile().mkdirs(); FileOutputStream fos = new FileOutputStream(rarFile, false); InputStream inStream = ossObject.getObjectContent(); IOUtils.copy(inStream, fos); fos.flush(); fos.close(); System.out.print("-> finish.\n"); // //2. System.out.print("\t extract rar -> working... "); String extToosHome = "C:\\Program Files (x86)\\7-Zip"; String rarFileStr = rarFile.getAbsolutePath(); String toDir = rarFileStr.substring(0, rarFileStr.length() - ".rar".length()); // // int extract = Zip7Object.extract(extToosHome, rarFile.getAbsolutePath(), toDir); if (extract != 0) { if (extract != 2) System.out.println(); FileUtils.deleteDir(new File(toDir)); rarFile.delete(); throw new Exception("extract error."); } System.out.print("-> finish.\n"); // //3. System.out.print("\t package zip-> working... "); String zipFileName = rarFile.getAbsolutePath(); zipFileName = zipFileName.substring(0, zipFileName.length() - ".rar".length()) + ".zip"; ZipArchiveOutputStream outStream = new ZipArchiveOutputStream(new File(zipFileName)); outStream.setEncoding("GBK"); Iterator<File> itFile = FileUtils.iterateFiles(new File(toDir), FileFilterUtils.fileFileFilter(), FileFilterUtils.directoryFileFilter()); StringBuffer buffer = new StringBuffer(); while (itFile.hasNext()) { File it = itFile.next(); if (it.isDirectory()) continue; String entName = it.getAbsolutePath().substring(toDir.length() + 1); ZipArchiveEntry ent = new ZipArchiveEntry(it, entName); outStream.putArchiveEntry(ent); InputStream itInStream = new FileInputStream(it); IOUtils.copy(itInStream, outStream); itInStream.close(); outStream.flush(); outStream.closeArchiveEntry(); buffer.append(ent.getName()); } outStream.flush(); outStream.close(); System.out.print("-> finish.\n"); // //4. FileUtils.deleteDir(new File(toDir)); System.out.print("\t delete temp dir -> finish.\n"); // //5.save to System.out.print("\t save to oss -> working... "); ObjectMetadata omd = ossObject.getObjectMetadata(); String contentDisposition = omd.getContentDisposition(); contentDisposition = contentDisposition.substring(0, contentDisposition.length() - ".rar".length()) + ".zip"; omd.setContentDisposition(contentDisposition); omd.setContentLength(new File(zipFileName).length()); InputStream zipInStream = new FileInputStream(zipFileName); PutObjectResult result = client.putObject("files-subtitle-format-zip", newKey, zipInStream, omd); zipInStream.close(); new File(zipFileName).delete(); System.out.print("-> OK:" + result.getETag()); System.out.print("-> finish.\n"); // //6.save files info int res = jdbc.update("update `oss-subtitle` set files=? , size=? , lastTime=now() where oss_key =?", buffer.toString(), omd.getContentLength(), newKey); System.out.println("\t save info to db -> " + res); }
From source file:no.difi.sdp.client.asice.archive.CreateZip.java
public Archive zipIt(List<AsicEAttachable> files) { ByteArrayOutputStream archive = null; ZipArchiveOutputStream zipOutputStream = null; try {/*from w ww.j a v a 2 s . c om*/ archive = new ByteArrayOutputStream(); zipOutputStream = new ZipArchiveOutputStream(archive); zipOutputStream.setEncoding(Charsets.UTF_8.name()); zipOutputStream.setMethod(ZipArchiveOutputStream.DEFLATED); for (AsicEAttachable file : files) { log.trace("Adding " + file.getFileName() + " to archive. Size in bytes before compression: " + file.getBytes().length); ZipArchiveEntry zipEntry = new ZipArchiveEntry(file.getFileName()); zipEntry.setSize(file.getBytes().length); zipOutputStream.putArchiveEntry(zipEntry); IOUtils.copy(new ByteArrayInputStream(file.getBytes()), zipOutputStream); zipOutputStream.closeArchiveEntry(); } zipOutputStream.finish(); zipOutputStream.close(); return new Archive(archive.toByteArray()); } catch (IOException e) { throw new RuntimeIOException(e); } finally { IOUtils.closeQuietly(archive); IOUtils.closeQuietly(zipOutputStream); } }
From source file:org.alfresco.repo.download.ZipDownloadExporter.java
@Override public void start(final ExporterContext context) { zipStream = new ZipArchiveOutputStream(outputStream); // NOTE: This encoding allows us to workaround bug... // http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=4820807 zipStream.setEncoding("UTF-8"); zipStream.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS); zipStream.setUseLanguageEncodingFlag(true); zipStream.setFallbackToUTF8(true);/*from w w w . j ava 2s . c o m*/ }
From source file:org.alfresco.repo.exporter.ACPExportPackageHandler.java
public void startExport() { // ALF-2016//w w w .j a va2s . c o m zipStream = new ZipArchiveOutputStream(outputStream); // NOTE: This encoding allows us to workaround bug... // http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=4820807 zipStream.setEncoding("UTF-8"); zipStream.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS); zipStream.setUseLanguageEncodingFlag(true); zipStream.setFallbackToUTF8(true); zipStream.setUseZip64(Zip64Mode.Always); }