package org.smartly.packages.http;
import org.smartly.Smartly;
import org.smartly.commons.io.jsonrepository.JsonRepository;
import org.smartly.commons.lang.CharEncoding;
import org.smartly.commons.logging.Level;
import org.smartly.commons.util.FileUtils;
import org.smartly.commons.util.PathUtils;
import org.smartly.commons.util.StringUtils;
import org.smartly.packages.AbstractPackage;
import org.smartly.packages.ISmartlyModalPackage;
import org.smartly.packages.ISmartlySystemPackage;
import org.smartly.packages.http.config.Deployer;
import org.smartly.packages.http.impl.AbstractHttpServer;
import org.smartly.packages.http.impl.WebServer;
import org.smartly.packages.velocity.SmartlyVelocity;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
/**
* This package must be started ( load() method ) before application packages and must be ready ( method ready() )
* after all other packages.
*/
public class SmartlyHttp
extends AbstractPackage
implements ISmartlySystemPackage, ISmartlyModalPackage {
public static final String NAME = "smartly_http";
private final boolean _join;
public SmartlyHttp() {
this(true); // start server and wait
}
public SmartlyHttp(final boolean join) {
super(NAME, 2);
super.setDescription("Http Module");
super.setMaintainerName("Gian Angelo Geminiani");
super.setMaintainerMail("angelo.geminiani@gmail.com");
super.setMaintainerUrl("http://www.smartfeeling.org");
//-- module dependencies --//
super.addDependency(SmartlyVelocity.NAME, ""); // all versions
//-- lib dependencies --//
super.addDependency("org.mongodb:mongo-java-driver:2.7.3", "");
_join = join;
}
@Override
public void load() {
Smartly.register(new Deployer(Smartly.getConfigurationPath()));
}
@Override
public void ready() {
this.init();
}
@Override
public void unload() {
this.getLogger().info("EXITING " + this.getClass().getSimpleName());
}
// --------------------------------------------------------------------
// p r i v a t e
// --------------------------------------------------------------------
private void init() {
try {
final AbstractHttpServer server = WebServer.launch(false);
if (null == server) {
super.getLogger().warning("Web Server not enabled! Check configuration file.");
}
if(null!=server && _join){
server.join();
}
} catch (Throwable t) {
super.getLogger().log(Level.SEVERE, null, t);
}
}
// --------------------------------------------------------------------
// S T A T I C
// --------------------------------------------------------------------
private static String __htdocs;
private static Set<String> _cmsPaths = new HashSet<String>(); // connector for CMS module. (paths are required in SmartlyResourceHandler)
public static void registerCMSPaths(final Set<String> paths) {
_cmsPaths.addAll(paths);
}
public static Set<String> getCMSPaths() {
return _cmsPaths;
}
public static String getHTTPUrl(final String path) {
final StringBuilder result = new StringBuilder();
final String protocol = "http://";
final String domain = Smartly.getConfiguration().getString("http.webserver.domain"); //getDomain(item);
final int port = Smartly.getConfiguration().getInt("http.webserver.connectors.http.port", 80); //getPort(item);
result.append(protocol);
result.append(domain);
if (port != 80) {
result.append(":").append(port);
}
final String url;
if (StringUtils.hasText(path)) {
url = PathUtils.join(result.toString(), path);
} else {
url = result.toString().concat("/");
}
return url;
}
/**
* Returns file path of doc root.
*
* @return
*/
public static String getDocRoot() {
if (!StringUtils.hasText(__htdocs)) {
JsonRepository config;
try {
config = Smartly.getConfiguration(true);
} catch (Throwable ignored) {
config = Smartly.getConfiguration();
}
if (null != config) {
final String path = config.getString("http.webserver.root");
if (StringUtils.hasText(path)) {
__htdocs = Smartly.getAbsolutePath(path);
}
}
}
return __htdocs;
}
public static String readFile(final String path) throws IOException {
final String fullPath = PathUtils.concat(getDocRoot(), path);
return new String(FileUtils.copyToByteArray(new File(fullPath)), CharEncoding.getDefault());
}
}