All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.clickntap.stripecubeui.Ui Maven / Gradle / Ivy

Go to download

Css / Javascript Merger and Minimizer integrated with Stripecube Web App Development

The newest version!
package com.clickntap.stripecubeui;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import org.apache.commons.io.FileUtils;
import org.springframework.core.io.Resource;

import com.caucho.hessian.client.HessianProxyFactory;
import com.clickntap.stripecubeui.api.BinaryResource;
import com.clickntap.stripecubeui.api.UiService;
import com.clickntap.tool.script.FreemarkerScriptEngine;
import com.clickntap.utils.SecurityUtils;

public class Ui {

	private String name;
	private String uiSet;
	private UiService uiService;
	private Resource uiDir;

	private String cssSet;
	private String javascriptSet;

	private String cssMd5;
	private String javascriptMd5;
	private Boolean uiReady;

	private String serverUrl;

	private FreemarkerScriptEngine fmJsEngine;
	private FreemarkerScriptEngine fmLessEngine;

	public String getCssMd5() {
		return cssMd5;
	}

	public String getJavascriptMd5() {
		return javascriptMd5;
	}

	public void init() throws Exception {

		fmJsEngine = new FreemarkerScriptEngine();
		fmJsEngine.setExtension(".js");
		fmJsEngine.setTemplateDir(getUiDir());
		fmJsEngine.start();
		fmLessEngine = new FreemarkerScriptEngine();
		fmLessEngine.setExtension(".less");
		fmLessEngine.setTemplateDir(getUiDir());
		fmLessEngine.start();

		initBinaryResources();
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						Thread.sleep(1000);
						if (uiReady) {
							compileUi();
						}
					} catch (Exception e) {
					}
				}
			}

		}).start();
	}

	private void compileUi() throws IOException {
		try {
			File dir = new File(getUiDir().getFile().getCanonicalPath());
			for (File file : dir.listFiles()) {
				if (file.isFile()) {
					if (file.getName().equals(getName() + ".less")) {
						String content = fmLessEngine.eval(new HashMap(), getName());
						String md5 = SecurityUtils.md5(content);
						String imports = extractImports(content, true);
						content = extractImports(content, false);
						if (!md5.equals(cssMd5)) {
							content = uiService.compressLess(content);
							cssMd5 = md5;
							File css = new File(getUiDir().getFile().getCanonicalPath() + "/" + getName() + "/css/" + getName() + "-min.css");
							FileUtils.writeStringToFile(css, imports + '\n' + cssSet + content);
						}
					}
					if (file.getName().equals(getName() + ".js")) {
						String content = fmJsEngine.eval(new HashMap(), getName());
						String md5 = SecurityUtils.md5(content);
						if (!md5.equals(javascriptMd5)) {
							content = uiService.compressJavascript(content);
							javascriptMd5 = md5;
							File css = new File(getUiDir().getFile().getCanonicalPath() + "/" + getName() + "/js/" + getName() + "-min.js");
							FileUtils.writeStringToFile(css, javascriptSet + content);
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String getServerUrl() {
		return serverUrl;
	}

	public void setServerUrl(String serverUrl) {
		this.serverUrl = serverUrl;
	}

	public String getUiSet() {
		return uiSet;
	}

	public void setUiSet(String uiSet) {
		this.uiSet = uiSet;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Resource getUiDir() {
		return uiDir;
	}

	public void setUiDir(Resource uiDir) {
		this.uiDir = uiDir;
	}

	private void initBinaryResources() {
		new Thread(new Runnable() {
			public void run() {
				try {
					uiReady = false;
					while (uiService == null) {
						try {
							Thread.sleep(1000);
							uiService = (UiService) new HessianProxyFactory().create(UiService.class, getServerUrl() + "/ui-service.app");
						} catch (Exception e) {
							uiService = null;
						}
					}
					File dir = new File(getUiDir().getFile().getCanonicalPath() + "/" + getName());
					dir.mkdirs();
					for (BinaryResource resource : uiService.getBinaryResources(getUiSet())) {
						File file = new File(dir.getCanonicalPath() + "/" + resource.getPath());
						FileUtils.writeByteArrayToFile(file, resource.getBytes());
					}
					cssSet = uiService.getCssSet(getUiSet());
					javascriptSet = uiService.getJavascriptSet(getUiSet());
					cssMd5 = "";
					javascriptMd5 = "";
					compileUi();
					uiReady = true;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

	private static String extractImports(String code, boolean returnImports) {
		String[] lines = code.split(System.getProperty("line.separator"));
		StringBuffer codeImports = new StringBuffer();
		StringBuffer codeBody = new StringBuffer();
		for (String line : lines) {
			if (line.startsWith("@import url")) {
				codeImports.append(line);
				codeImports.append(System.getProperty("line.separator"));
			} else {
				codeBody.append(line);
				codeBody.append(System.getProperty("line.separator"));
			}
		}
		if (returnImports) {
			return new StringBuffer(codeImports).toString();
		} else {
			return new StringBuffer(codeBody).toString();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy