/*
* Copyright (C) 2003-2009 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.wcm;
import java.util.Date;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.exoplatform.component.test.ConfigurationUnit;
import org.exoplatform.component.test.ConfiguredBy;
import org.exoplatform.component.test.ContainerScope;
import org.exoplatform.ecms.test.BaseECMSTestCase;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
* Jul 14, 2009
*/
@ConfiguredBy({
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.portal-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.identity-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/standalone/ecms-test-configuration.xml"),
@ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/standalone/ecms-core-service-test-configuration.xml")
})
public abstract class BaseWCMTestCase extends BaseECMSTestCase {
/**
* Check mixins.
*
* @param mixins the mixins
* @param node the node
*/
protected void checkMixins(String[] mixins, NodeImpl node) {
try {
String[] nodeMixins = node.getMixinTypeNames();
assertEquals("Mixins count is different", mixins.length, nodeMixins.length);
compareMixins(mixins, nodeMixins);
} catch (RepositoryException e) {
fail("Mixins isn't accessible on the node " + node);
}
}
/**
* Compare mixins.
*
* @param mixins the mixins
* @param nodeMixins the node mixins
*/
protected void compareMixins(String[] mixins, String[] nodeMixins) {
nextMixin: for (String mixin : mixins) {
for (String nodeMixin : nodeMixins) {
if (mixin.equals(nodeMixin))
continue nextMixin;
}
fail("Mixin '" + mixin + "' isn't accessible");
}
}
/**
* Memory info.
*
* @return the string
*/
protected String memoryInfo() {
String info = "";
info = "free: " + mb(Runtime.getRuntime().freeMemory()) + "M of "
+ mb(Runtime.getRuntime().totalMemory()) + "M (max: "
+ mb(Runtime.getRuntime().maxMemory()) + "M)";
return info;
}
// bytes to Mbytes
/**
* Mb.
*
* @param mem the mem
*
* @return the string
*/
protected String mb(long mem) {
return String.valueOf(Math.round(mem * 100d / (1024d * 1024d)) / 100d);
}
/**
* Exec time.
*
* @param from the from
*
* @return the string
*/
protected String execTime(long from) {
return Math.round(((System.currentTimeMillis() - from) * 100.00d / 60000.00d)) / 100.00d
+ "min";
}
/**
* Creates the webcontent node.
*
* @param parentNode the parent node
* @param nodeName the node name
* @param htmlData the html data
* @param cssData the css data
* @param jsData the js data
*
* @return the node
*
* @throws Exception the exception
*/
protected Node createWebcontentNode(Node parentNode,
String nodeName,
String htmlData,
String cssData,
String jsData) throws Exception {
Node webcontent = parentNode.addNode(nodeName, "exo:webContent");
webcontent.setProperty("exo:title", nodeName);
Node htmlNode;
try {
htmlNode = webcontent.getNode("default.html");
} catch (Exception ex) {
htmlNode = webcontent.addNode("default.html", "nt:file");
}
if (!htmlNode.isNodeType("exo:htmlFile"))
htmlNode.addMixin("exo:htmlFile");
Node htmlContent;
try {
htmlContent = htmlNode.getNode("jcr:content");
} catch (Exception ex) {
htmlContent = htmlNode.addNode("jcr:content", "nt:resource");
}
htmlContent.setProperty("jcr:encoding", "UTF-8");
htmlContent.setProperty("jcr:mimeType", "text/html");
htmlContent.setProperty("jcr:lastModified", new Date().getTime());
if (htmlData == null)
htmlData = "This is the default.html file.";
htmlContent.setProperty("jcr:data", htmlData);
Node jsFolder;
try {
jsFolder = webcontent.getNode("js");
} catch (Exception ex) {
jsFolder = webcontent.addNode("js", "exo:jsFolder");
}
Node jsNode;
try {
jsNode = jsFolder.getNode("default.js");
} catch (Exception ex) {
jsNode = jsFolder.addNode("default.js", "nt:file");
}
if (!jsNode.isNodeType("exo:jsFile"))
jsNode.addMixin("exo:jsFile");
jsNode.setProperty("exo:active", true);
jsNode.setProperty("exo:priority", 1);
jsNode.setProperty("exo:sharedJS", true);
Node jsContent;
try {
jsContent = jsNode.getNode("jcr:content");
} catch (Exception ex) {
jsContent = jsNode.addNode("jcr:content", "nt:resource");
}
jsContent.setProperty("jcr:encoding", "UTF-8");
jsContent.setProperty("jcr:mimeType", "text/javascript");
jsContent.setProperty("jcr:lastModified", new Date().getTime());
if (jsData == null)
jsData = "This is the default.js file.";
jsContent.setProperty("jcr:data", jsData);
Node cssFolder;
try {
cssFolder = webcontent.getNode("css");
} catch (Exception ex) {
cssFolder = webcontent.addNode("css", "exo:cssFolder");
}
Node cssNode;
try {
cssNode = cssFolder.getNode("default.css");
} catch (Exception ex) {
cssNode = cssFolder.addNode("default.css", "nt:file");
}
if (!cssNode.isNodeType("exo:cssFile"))
cssNode.addMixin("exo:cssFile");
cssNode.setProperty("exo:active", true);
cssNode.setProperty("exo:priority", 1);
cssNode.setProperty("exo:sharedCSS", true);
Node cssContent;
try {
cssContent = cssNode.getNode("jcr:content");
} catch (Exception ex) {
cssContent = cssNode.addNode("jcr:content", "nt:resource");
}
cssContent.setProperty("jcr:encoding", "UTF-8");
cssContent.setProperty("jcr:mimeType", "text/css");
cssContent.setProperty("jcr:lastModified", new Date().getTime());
if (cssData == null)
cssData = "This is the default.css file.";
cssContent.setProperty("jcr:data", cssData);
Node mediaFolder;
try {
mediaFolder = webcontent.getNode("medias");
} catch (Exception ex) {
mediaFolder = webcontent.addNode("medias");
}
if (!mediaFolder.hasNode("images"))
mediaFolder.addNode("images", "nt:folder");
if (!mediaFolder.hasNode("videos"))
mediaFolder.addNode("videos", "nt:folder");
if (!mediaFolder.hasNode("audio"))
mediaFolder.addNode("audio", "nt:folder");
session.save();
return webcontent;
}
}