Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.duelengine.duel.staticapps;
  
  import java.io.File;
  import java.io.FileWriter;
  import java.util.Locale;
  import java.util.Map;
 
 
 public class SiteBuilder {
 
 	private static final Logger log = LoggerFactory.getLogger(SiteBuilder.class);
 	private static final int BUFFER_SIZE = 64*1024;//64K
 	private final ClassLoader classLoader;
 	private final byte[] buffer = new byte[];
 
 	public SiteBuilder() {
 	}
 
 	public SiteBuilder(ClassLoader classLoader) {
 		this. = classLoader;
 	}
 
 	public void build(SiteConfig config)
 
 		if (config == null) {
 			throw new NullPointerException("config");
 		}
 
 		File sourceDir = config.sourceDirFile();
 		File targetDir = config.targetDirFile();
 
 		if (sourceDir == null) {
 			throw new NullPointerException("sourceDir");
 		}
 		if (targetDir == null) {
 			throw new NullPointerException("targetDir");
 		}
 		if (!sourceDir.exists()) {
 			throw new FileNotFoundException(sourceDir.getPath());
 		}
 
 		.info("webapp source: "+sourceDir);
 		.info("static target: "+targetDir);
 
 		File cdnDir = new File(targetDir"cdn");
 		if (cdnDir.isDirectory() && cdnDir.exists()) {
 			.info("Emptying existing CDN dir: "+cdnDir.getAbsolutePath());
 			for (File child : cdnDir.listFiles()) {
 				try {
 					if (child.delete()) {
 						.trace("Deleting existing: "+child.getAbsolutePath());
 					}
 				} catch (Exception ex) {
 					.warn(ex.getMessage(), ex);
 				}
 			}
 		}
 
 		// link transformer which caches list of URLs
 		StaticLinkInterceptor linkInterceptor = null;
 		try {
 			String bundleName = config.cdnMap();
 			ResourceBundle cdnBundle =
 				(bundleName == null) || bundleName.isEmpty() ? null :
 				ResourceBundle.getBundle(bundleName.);
 
 			bundleName = config.cdnLinksMap();
 			ResourceBundle cdnLinkBundle =
 				(bundleName == null) || bundleName.isEmpty() ? null :
 				ResourceBundle.getBundle(bundleName.);
 
 			linkInterceptor = new StaticLinkInterceptor(config.cdnHost(), cdnBundlecdnLinkBundleconfig.isDevMode());
 
 		} catch (URISyntaxException ex) {
 			.error(ex.getMessage(), ex);
 		}
 
 		FormatPrefs formatPrefs = new FormatPrefs()
 			.setEncoding(config.encoding())
 			.setIndent(config.isDevMode() ? "\t" : "")
 			.setNewline(config.isDevMode() ? "\n" : "");
 
 		Map<StringSiteViewPageviews = config.views();
 		if (views != null) {
 			for (String targetPage : views.keySet()) {
 				SiteViewPage sitePage = views.get(targetPage);
 				.info("Generating: "+sitePage.view()+" => "+targetPage);
				FileWriter writer = null;
				try {
					File targetFile = new File(targetDirtargetPage);
					FileUtil.prepSavePath(targetFile);
					writer = new FileWriter(targetFile);
					DuelContext context = new DuelContext()
						.setFormat(formatPrefs)
						.setLinkInterceptor(linkInterceptor)
						.setData(sitePage.data())
						.setOutput(writer);
					Map<StringObjectextras = sitePage.extras();
					if (extras != null) {
						// ambient client-side data
						context.putExtras(extras);
					}
					DuelView view = sitePage.viewInstance(config.serverPrefix(), );
					if (view != null) {
						view.render(context);
					}
catch (Exception ex) {
					.error(ex.getMessage(), ex);
finally {
					if (writer != null) {
						try {
							writer.flush();
							writer.close();
catch (IOException ex) {}
					}
				}
			}
		}
		// copy static resources which are blindly requested by userAgents (e.g., "robots.txt", "favicon.ico")
		String[] staticFiles = config.files();
		if (staticFiles != null) {
			for (String staticFile : staticFiles) {
				try {
					copyResource(sourceDirtargetDirstaticFilestaticFile);
catch (IOException ex) {
					.error(ex.getMessage(), ex);
				}
			}
		}
		Map<StringStringlinkCache = linkInterceptor.getLinkCache();
		for (String key : linkCache.keySet()) {
			try {
				copyResource(sourceDirtargetDirkeylinkCache.get(key));
catch (IOException ex) {
				.error(ex.getMessage(), ex);
			}
		}
	}
	private void copyResource(File sourceDirFile targetDirString pathString cdnPath)
			throws IOException {
		if (cdnPath.indexOf('?') >= 0) {
			cdnPath = cdnPath.substring(0, cdnPath.indexOf('?'));
		}
		if (cdnPath.indexOf('#') >= 0) {
			cdnPath = cdnPath.substring(0, cdnPath.indexOf('#'));
		}
		File source = new File(sourceDircdnPath);
		File target = new File(targetDircdnPath);
		if (!source.exists()) {
			// report but still copy the rest
			.warn("Resource not found: "+source.getAbsolutePath());
			try {
				if (target.isFile() && target.exists() && target.delete()) {
					.info("Deleted existing: "+target.getAbsolutePath());
				}
catch (Exception ex) {
				.warn(ex.getMessage(), ex);
			}
			return;
		}
		if (!source.isFile()) {
			// report but still copy the rest
			.warn("Resource not a file: "+source.getPath());
			try {
				if (target.isFile() && target.exists() && target.delete()) {
					.info("Deleted existing: "+target.getAbsolutePath());
				}
catch (Exception ex) {
				.warn(ex.getMessage(), ex);
			}
			return;
		}
		.info("Copying "+path+" as "+cdnPath);
		FileUtil.copy(sourcetargettrue);
	}
New to GrepCode? Check out our FAQ X