package io.github.ibuildthecloud.gdapi.response.impl;
import io.github.ibuildthecloud.gdapi.context.ApiContext;
import io.github.ibuildthecloud.gdapi.model.Schema;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.response.HtmlTemplate;
import io.github.ibuildthecloud.gdapi.util.Settings;
import io.github.ibuildthecloud.gdapi.util.SettingsUtil;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import javax.annotation.PostConstruct;
import javax.servlet.http.Cookie;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
public class DefaultHtmlTemplate implements HtmlTemplate {
String header;
byte[] footer;
String jsUrl, cssUrl;
Settings settings;
@Override
public byte[] getHeader(ApiRequest request, Object response) {
try {
return getStringHeader(request, response).getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
}
protected String getStringHeader(ApiRequest request, Object response) {
String result = header;
URL schemaUrl = ApiContext.getUrlBuilder().resourceCollection(Schema.class);
if (schemaUrl == null) {
result = result.replace("%SCHEMAS%", "");
} else {
result = result.replace("%SCHEMAS%", schemaUrl.toExternalForm());
}
if ("true".equals(SettingsUtil.getSetting(settings, "api.dev", ""))) {
Cookie[] cookies = request.getServletContext().getRequest().getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("js.url".equals(cookie.getName()) && !StringUtils.isEmpty(cookie.getValue())) {
result = result.replace("%JS%", cookie.getValue());
}
if ("css.url".equals(cookie.getName()) && !StringUtils.isEmpty(cookie.getValue())) {
result = result.replace("%CSS%", cookie.getValue());
}
}
}
}
result = result.replace("%JS%", SettingsUtil.getSetting(settings, "api.js.url", getJsUrl()));
result = result.replace("%CSS%", SettingsUtil.getSetting(settings, "api.css.url", getCssUrl()));
String user = getUser(request, response);
if (user == null) {
user = "";
}
result = result.replace("%USER%", user);
return result;
}
protected String getUser(ApiRequest request, Object response) {
return null;
}
@Override
public byte[] getFooter(ApiRequest request, Object response) {
return footer;
}
@PostConstruct
public void init() throws IOException {
InputStream is = null;
try {
is = this.getClass().getResourceAsStream("header.txt");
if (is == null) {
is = DefaultHtmlTemplate.class.getResourceAsStream("header.txt");
}
header = IOUtils.toString(is);
} finally {
IOUtils.closeQuietly(is);
}
try {
is = this.getClass().getResourceAsStream("footer.txt");
if (is == null) {
is = DefaultHtmlTemplate.class.getResourceAsStream("footer.txt");
}
footer = IOUtils.toByteArray(is);
} finally {
IOUtils.closeQuietly(is);
}
}
public String getJsUrl() {
return jsUrl;
}
public void setJsUrl(String jsUrl) {
this.jsUrl = jsUrl;
}
public String getCssUrl() {
return cssUrl;
}
public void setCssUrl(String cssUrl) {
this.cssUrl = cssUrl;
}
public Settings getSettings() {
return settings;
}
public void setSettings(Settings settings) {
this.settings = settings;
}
}