/**
* Copyright (c) 2000-2005 Liferay, LLC. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.liferay.portal.tools;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import com.dotcms.repackage.org.dom4j.Document;
import com.dotcms.repackage.org.dom4j.DocumentException;
import com.dotcms.repackage.org.dom4j.Element;
import com.dotcms.repackage.org.dom4j.io.SAXReader;
import com.dotmarketing.util.Logger;
import com.liferay.util.FileUtil;
import com.liferay.util.GetterUtil;
import com.liferay.util.StringUtil;
/**
* <a href="WebSiteBuilder.java.html"><b><i>View Source</i></b></a>
*
* @author Brian Wing Shun Chan
* @version $Revision: 1.30 $
*
*/
public class WebSiteBuilder {
public static void main(String[] args) {
if (args.length == 2) {
new WebSiteBuilder(args[0], args[1]);
}
else {
throw new IllegalArgumentException();
}
}
public static List getWebSites() throws Exception {
File file = new File("../web-sites/web-sites.xml");
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc = reader.read(file);
}
catch (DocumentException de) {
Logger.error(WebSiteBuilder.class,de.getMessage(),de);
}
Element root = doc.getRootElement();
List webSites = new ArrayList();
Iterator itr = root.elements("web-site").iterator();
while (itr.hasNext()) {
Element webSite = (Element)itr.next();
String id = webSite.attributeValue("id");
boolean httpEnabled = GetterUtil.getBoolean(
webSite.attributeValue("http-enabled"), true);
String keystore = GetterUtil.getString(
webSite.attributeValue("keystore"));
String keystorePassword = GetterUtil.getString(
webSite.attributeValue("keystore-password"));
String virtualHosts = GetterUtil.getString(
webSite.attributeValue("virtual-hosts"));
String forwardURL = GetterUtil.getString(
webSite.attributeValue("forward-url"), "/c");
webSites.add(
new WebSite(
id, httpEnabled, keystore, keystorePassword, virtualHosts,
forwardURL));
}
return webSites;
}
public WebSiteBuilder(String portalExtProperties, String orionConfigDir) {
try {
_portalExtProperties = portalExtProperties;
_orionConfigDir = orionConfigDir;
List webSites = getWebSites();
_buildOrionASP(webSites);
_buildWebSites(webSites);
}
catch (Exception e) {
Logger.error(this,e.getMessage(),e);
}
}
private void _buildOrionASP(List webSites) throws Exception {
if (_portalExtProperties.startsWith("${") ||
_orionConfigDir.startsWith("${")) {
return;
}
// portal-ext.properties
BufferedReader br = new BufferedReader(new FileReader(
_portalExtProperties));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
if (line.startsWith("portal.instances")) {
sb.append("portal.instances=" + webSites.size());
}
else {
sb.append(line);
}
sb.append("\n");
}
br.close();
FileUtil.write(_portalExtProperties, sb.toString());
// /orion/config/application.xml
sb = new StringBuffer();
Iterator itr = webSites.iterator();
while (itr.hasNext()) {
WebSite webSite = (WebSite)itr.next();
if (webSite.isHttpEnabled() || webSite.isHttpsEnabled()) {
sb.append("\t<web-module id=\"");
sb.append(webSite.getId());
sb.append("-web\" ");
sb.append("path=\"../applications/");
sb.append(webSite.getId());
sb.append("-web.war\" />\n");
}
}
File file = new File(_orionConfigDir + "/application.xml");
String content = FileUtil.read(file);
int x = content.indexOf("<!-- Begin ASP -->");
int y = content.indexOf("<!-- End ASP -->");
content =
content.substring(0, x + 20) + sb.toString() +
content.substring(y - 2, content.length());
FileUtil.write(file, content);
// /orion/config/server.xml
sb = new StringBuffer();
itr = webSites.iterator();
while (itr.hasNext()) {
WebSite webSite = (WebSite)itr.next();
if (webSite.isHttpEnabled()) {
sb.append("\t<web-site path=\"./web-sites/");
sb.append(webSite.getId());
sb.append("-web.xml\" />\n");
}
if (webSite.isHttpsEnabled()) {
sb.append("\t<web-site path=\"./web-sites/");
sb.append(webSite.getId());
sb.append("-web-secure.xml\" />\n");
}
}
file = new File(_orionConfigDir + "/server.xml");
content = FileUtil.read(file);
x = content.indexOf("<!-- Begin ASP -->");
y = content.indexOf("<!-- End ASP -->");
content =
content.substring(0, x + 20) + sb.toString() +
content.substring(y - 2, content.length());
FileUtil.write(file, content);
// /orion/config/web-sites/liferay.com-web.xml
itr = webSites.iterator();
while (itr.hasNext()) {
WebSite webSite = (WebSite)itr.next();
if (webSite.isHttpEnabled()) {
_buildOrionASP(webSite, false);
}
if (webSite.isHttpsEnabled()) {
_buildOrionASP(webSite, true);
}
}
}
private void _buildOrionASP(WebSite webSite, boolean secure)
throws Exception {
String xml =
"<?xml version=\"1.0\"?>\n" +
"<!DOCTYPE web-site PUBLIC \"Orion Web-site\" " +
"\"http://www.orionserver.com/dtds/web-site.dtd\">\n" +
"\n" +
"<web-site " + (secure ? "secure=\"true\" " : "") +
"virtual-hosts=\"" + webSite.getVirtualHosts() + "\">\n" +
"\t<default-web-app application=\"default\" name=\"" +
webSite.getId() + "-web\" load-on-startup=\"true\" />\n" +
"\t<web-app application=\"default\" name=\"cms-web\" " +
"root=\"/cms\" load-on-startup=\"true\" />\n" +
"\t<web-app application=\"default\" name=\"laszlo-web\" " +
"root=\"/laszlo\" load-on-startup=\"true\" />\n" +
"\t<web-app application=\"default\" name=\"portal-web\" " +
"root=\"/portal\" load-on-startup=\"true\" />\n" +
"\t<web-app application=\"default\" name=\"tunnel-web\" " +
"root=\"/tunnel\" load-on-startup=\"true\" />\n" +
"\t<access-log path=\"../../log/" + webSite.getId() +
"-web" + (secure ? "-secure" : "") + "-access.log\" />\n";
if (secure) {
xml +=
"\t<ssl-config keystore=\"" + webSite.getKeystore() +
"\" keystore-password=\"" +
webSite.getKeystorePassword() + "\" />\n";
}
xml += "</web-site>";
FileUtil.write(
_orionConfigDir + "/web-sites/" + webSite.getId() + "-web" +
(secure ? "-secure" : "") + ".xml",
xml);
}
private void _buildWebSites(List webSites) throws Exception {
// Session timeout
Properties props = new Properties();
props.load(
new FileInputStream("../portal-ejb/classes/portal.properties"));
String sessionTimeout =
GetterUtil.get(props.getProperty("session.timeout"), "30");
// Default NFC
String nfcConf = StringUtil.replace(
FileUtil.read(
"../portal-ejb/src/com/liferay/portal/tools/tmpl/" +
"nfc.conf.tmpl"),
new String[] {"[$LISTEN_PORT$]"},
new String[] {Integer.toString(_nfcListenPort)});
File nfcConfFile = new File(
"../portal-web/docroot/WEB-INF/nfc/nfc.conf");
FileUtil.write(nfcConfFile, nfcConf);
// web-sites
Iterator itr = webSites.iterator();
while (itr.hasNext()) {
WebSite webSite = (WebSite)itr.next();
String id = webSite.getId();
String forwardURL = webSite.getForwardURL();
// /docroot/index.html
String indexHTML =
"<html>\n" +
"<head>\n" +
"\t<title></title>\n" +
"\t<meta content=\"0; url=" + forwardURL +
"\" http-equiv=\"refresh\">\n" +
"</head>\n" +
"\n" +
"<body onLoad=\"javascript:location.replace('" +
forwardURL + "')\">\n" +
"\n" +
"</body>\n" +
"\n" +
"</html>";
File indexHTMLFile = new File(
"../web-sites/" + id + "-web/docroot/index.html");
FileUtil.write(indexHTMLFile, indexHTML);
// /docroot/WEB-INF/web.xml
String webXML = StringUtil.replace(
FileUtil.read(
"../portal-ejb/src/com/liferay/portal/tools/tmpl/" +
"web.xml.tmpl"),
new String[] {"[$COMPANY_ID$]", "[$SESSION_TIMEOUT$]"},
new String[] {id, sessionTimeout});
File webXMLFile = new File(
"../web-sites/" + id + "-web/docroot/WEB-INF/web.xml");
FileUtil.write(webXMLFile, webXML);
// /docroot/WEB-INF/lib/util-taglib.jar
FileUtil.copyFile(
"../portal-web/docroot/WEB-INF/lib/util-taglib.jar",
"../web-sites/" + id +
"-web/docroot/WEB-INF/lib/util-taglib.jar");
// /docroot/WEB-INF/tld/liferay-portlet.tld
FileUtil.copyFile(
"../portal-web/docroot/WEB-INF/tld/liferay-portlet.tld",
"../web-sites/" + id +
"-web/docroot/WEB-INF/tld/liferay-portlet.tld");
// /docroot/WEB-INF/tld/liferay-util.tld
FileUtil.copyFile(
"../portal-web/docroot/WEB-INF/tld/liferay-util.tld",
"../web-sites/" + id +
"-web/docroot/WEB-INF/tld/liferay-util.tld");
// /docroot/WEB-INF/jcvs
File[] jcvsConfArray = new File(
"../portal-web/docroot/WEB-INF/jcvs/conf").listFiles();
for (int i = 0; i < jcvsConfArray.length; i++) {
if (jcvsConfArray[i].isFile() &&
jcvsConfArray[i].getName().endsWith(".properties")) {
File webJcvsConf = new File(
"../web-sites/" + id +
"-web/docroot/WEB-INF/jcvs/conf/" +
jcvsConfArray[i].getName());
if (!webJcvsConf.exists()) {
FileUtil.copyFile(jcvsConfArray[i], webJcvsConf);
}
}
}
FileUtil.write(
"../web-sites/" + id +
"-web/docroot/WEB-INF/jcvs/temp/deleteme",
"");
FileUtil.write(
"../web-sites/" + id +
"-web/docroot/WEB-INF/jcvs/work/deleteme",
"");
// /docroot/WEB-INF/nfc
File[] nfcArray = new File(
"../portal-web/docroot/WEB-INF/nfc").listFiles();
for (int i = 0; i < nfcArray.length; i++) {
if (nfcArray[i].isFile() &&
nfcArray[i].getName().endsWith(".properties")) {
File webNfc = new File(
"../web-sites/" + id + "-web/docroot/WEB-INF/nfc/" +
nfcArray[i].getName());
if (!webNfc.exists()) {
FileUtil.copyFile(nfcArray[i], webNfc);
}
}
}
_nfcListenPort++;
nfcConf = StringUtil.replace(
FileUtil.read(
"../portal-ejb/src/com/liferay/portal/tools/tmpl/" +
"nfc.conf.tmpl"),
new String[] {"[$LISTEN_PORT$]"},
new String[] {Integer.toString(_nfcListenPort)});
nfcConfFile = new File(
"../web-sites/" + id + "-web/docroot/WEB-INF/nfc/nfc.conf");
FileUtil.write(nfcConfFile, nfcConf);
}
}
private String _portalExtProperties = null;
private String _orionConfigDir = null;
private int _nfcListenPort = 7777;
}