com.clickntap.stripecubeui.Ui Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of StripecubeUi Show documentation
Show all versions of StripecubeUi Show documentation
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();
}
}
}