Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.tool;
 
 import java.io.File;
 import java.util.Set;
 
 
 
 public class Updater {
 	public static Path DEPLOYED_PATH = Paths.get("./config/deployed.json");
 	
 	public static void main(String[] args) {
 		boolean updated = Updater.tryUpdate();
 		
 		while (updated) {
 			..println("Checking for additional updates");
 			
 			updated = Updater.tryUpdate();
 		}
 		
 		..println("Updates completed!");
 	}
 	
 	static public FuncResult<RecordStructloadDeployed() {
 		FuncResult<RecordStructres = new FuncResult<>();
 		
 		FuncResult<CompositeStructpres = CompositeParser.parseJson();
 		
 		res.copyMessages(pres);
 		
 		if (!pres.hasErrors())
 		
 		return res;
 	}
 	
 	static public OperationResult saveDeployed(RecordStruct deployed) {
 		return res;
 	}
 	
 	static public boolean tryUpdate() {
 		@SuppressWarnings("resource")
 		final Scanner scan = new Scanner(.);
 		
 		FuncResult<RecordStructldres = Updater.loadDeployed();
 		
 		if (ldres.hasErrors()) {
 			..println("Error reading deployed.json file: " + ldres.getMessage());
 			return false;
 		}
 		
 		RecordStruct deployed = ldres.getResult();
 		
 		String ver = deployed.getFieldAsString("Version");
 		String packfolder = deployed.getFieldAsString("PackageFolder");
 		String packprefix = deployed.getFieldAsString("PackagePrefix");
 		
 		if (StringUtil.isEmpty(ver) || StringUtil.isEmpty(packfolder)) {
 			..println("Error reading deployed.json file: Missing Version or PackageFolder");
			return false;
		}
		if (StringUtil.isEmpty(packprefix))
			packprefix = "DivConq";
		..println("Current Version: " + ver);
		Path packpath = Paths.get(packfolder);
		if (!Files.exists(packpath) || !Files.isDirectory(packpath)) {
			..println("Error reading PackageFolder - it may not exist or is not a folder.");
			return false;
		}
		File pp = packpath.toFile();
		RecordStruct deployment = null;
		File matchpack = null;
		for (File f : pp.listFiles()) {
			if (!f.getName().startsWith(packprefix + "-") || !f.getName().endsWith("-bin.zip"))
				continue;
			..println("Checking: " + f.getName());
			// if not a match before, clear this
			deployment = null;
			try {
				ZipFile zf = new ZipFile(f);
				while (entries.hasMoreElements()) {
					ZipArchiveEntry entry = entries.nextElement();
					if (entry.getName().equals("deployment.json")) {
						//System.out.println("crc: " + entry.getCrc());
						FuncResult<CompositeStructpres = CompositeParser.parseJson(zf.getInputStream(entry));
						if (pres.hasErrors()) {
							..println("Error reading deployment.json file");
							break;
						}
						deployment = (RecordStructpres.getResult();
						break;
					}
				}
				zf.close();
			}
			catch (IOException x) {
				..println("Error reading deployment.json file: " + x);
			}
			if (deployment != null) {
				String fndver = deployment.getFieldAsString("Version");
				String fnddependson = deployment.getFieldAsString("DependsOn");
				if (ver.equals(fnddependson)) {
					..println("Found update: " + fndver);
					matchpack = f;
					break;
				}
			}
		}
		if ((matchpack == null) || (deployment == null)) {
			..println("No updates found!");
			return false;
		}
		String fndver = deployment.getFieldAsString("Version");
		String umsg = deployment.getFieldAsString("UpdateMessage");
		if (StringUtil.isNotEmpty(umsg)) {
			..println("========================================================================");
			..println("========================================================================");
		}
		..println("Do you want to install?  (y/n)");
		String p = scan.nextLine().toLowerCase();
		if (!p.equals("y"))
			return false;
		..println("Intalling: " + fndver);
		Set<Stringignorepaths = new HashSet<>();
		ListStruct iplist = deployment.getFieldAsList("IgnorePaths");
		if (iplist != null) {
			for (Struct df : iplist.getItems()) 
				ignorepaths.add(df.toString());
		}
		ListStruct dflist = deployment.getFieldAsList("DeleteFiles");
		// deleting
		if (dflist != null) {
			for (Struct df : dflist.getItems()) {
				Path delpath = Paths.get("."df.toString());
				if (Files.exists(delpath)) {
					..println("Deleting: " + delpath.toAbsolutePath());
					try {
						Files.delete(delpath);
					catch (IOException x) {
						..println("Unable to Delete: " + x);
					}
				}
			}
		}
		// copying updates
		..println("Checking for updated files: ");
		try {
			@SuppressWarnings("resource")
			ZipFile zf = new ZipFile(matchpack);
			while (entries.hasMoreElements()) {
				ZipArchiveEntry entry = entries.nextElement();
				String entryname = entry.getName().replace('\\''/');
				boolean xfnd = false;
				for (String exculde : ignorepaths
					if (entryname.startsWith(exculde)) {
						xfnd = true;
						break;
					}
				if (xfnd)
					continue;
				Path localpath = Paths.get("."entryname);
				if (entry.isDirectory()) {
					if (!Files.exists(localpath)) 
						Files.createDirectories(localpath);
				}
				else {
					boolean hashmatch = false;
					if (Files.exists(localpath)) {
						String local = null;
						String update = null;
						try (InputStream lin = Files.newInputStream(localpath)) {
							local = HashUtil.getMd5(lin);
						}
						try (InputStream uin = zf.getInputStream(entry)) {
							update = HashUtil.getMd5(uin);
						}
						hashmatch = (StringUtil.isNotEmpty(local) && StringUtil.isNotEmpty(update) && local.equals(update));
					}
					if (!hashmatch) {
						..print("[" + entryname + "]");
						try (InputStream uin = zf.getInputStream(entry)) {
							Files.createDirectories(localpath.getParent());
							Files.copy(uinlocalpath.);
						}
						catch (Exception x) {
							..println("Error updating: " + entryname + " - " + x);
							return false;
						}
					}
				}
			}
			zf.close();
		}
		catch (IOException x) {
			..println("Error reading update package: " + x);
		}
		// updating local config
		deployed.setField("Version"fndver);
		OperationResult svres = Updater.saveDeployed(deployed);
		if (svres.hasErrors()) {
			..println("Intalled: " + fndver + " but could not update deployed.json.  Repair the file before continuing.\nError: " + svres.getMessage());
			return false;
		}
		..println("Intalled: " + fndver);
		return true;
	}
New to GrepCode? Check out our FAQ X