/*
* 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.core;
import java.util.Date;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import org.exoplatform.container.component.ComponentPlugin;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.exoplatform.services.wcm.javascript.JSFileHandler;
import org.exoplatform.services.wcm.portal.PortalFolderSchemaHandler;
import org.exoplatform.services.wcm.skin.CSSFileHandler;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.services.wcm.webcontent.HTMLFileSchemaHandler;
import org.exoplatform.services.wcm.webcontent.WebContentSchemaHandler;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
* Jul 15, 2009
*/
public class TestWebSchemaConfigService extends BaseWCMTestCase {
/** The web schema config service. */
private WebSchemaConfigService webSchemaConfigService;
/** The live node. */
private Node documentNode;
public void setUp() throws Exception {
super.setUp();
webSchemaConfigService = (WebSchemaConfigService) container.getComponentInstanceOfType(WebSchemaConfigService.class);
applySystemSession();
webSchemaConfigService.getAllWebSchemaHandler().clear();
documentNode = (Node) session.getItem("/sites content/live/classic/documents");
}
/**
* Test add css file schema handler.
*
* @throws Exception the exception
*/
public void testAddCSSFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new CSSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size()); }
/**
* Test add double css file schema handler.
*
* @throws Exception the exception
*/
public void testAddDoubleCSSFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new CSSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
ComponentPlugin componentPlugin2 = new CSSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin2);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size()); }
/**
* Test add js file schema handler.
*
* @throws Exception the exception
*/
public void testAddJSFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new JSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size()); }
/**
* Test add double js file schema handler.
*
* @throws Exception the exception
*/
public void testAddDoubleJSFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new JSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
ComponentPlugin componentPlugin2 = new JSFileHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin2);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add html file schema handler.
*
* @throws Exception the exception
*/
public void testAddHTMLFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new HTMLFileSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add double html file schema handler.
*
* @throws Exception the exception
*/
public void testAddDoubleHTMLFileSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new HTMLFileSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
ComponentPlugin componentPlugin2 = new HTMLFileSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin2);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add portal folder schema handler.
*
* @throws Exception the exception
*/
public void testAddPortalFolderSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new PortalFolderSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add double portal folder schema handler.
* css
*
* @throws Exception the exception
*/
public void testAddDoublePortalFolderSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new PortalFolderSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
ComponentPlugin componentPlugin2 = new PortalFolderSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin2);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add web content schema handler.
*
* @throws Exception the exception
*/
public void testAddWebcontentSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new WebContentSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test add double web content schema handler.
*
* @throws Exception the exception
*/
public void testAddDoubleWebcontentSchemaHandler() throws Exception {
ComponentPlugin componentPlugin = new WebContentSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin);
ComponentPlugin componentPlugin2 = new WebContentSchemaHandler();
webSchemaConfigService.addWebSchemaHandler(componentPlugin2);
assertEquals(1, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test get all web schema handler.
*
* @throws Exception the exception
*/
public void testGetAllWebSchemaHandler() throws Exception {
webSchemaConfigService.addWebSchemaHandler(new JSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new CSSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new HTMLFileSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new PortalFolderSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new WebContentSchemaHandler());
assertEquals(5, webSchemaConfigService.getAllWebSchemaHandler().size());
}
/**
* Test get web schema handler by type.
*
* @throws Exception the exception
*/
public void testGetWebSchemaHandlerByType() throws Exception {
webSchemaConfigService.addWebSchemaHandler(new JSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new CSSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new HTMLFileSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new PortalFolderSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new WebContentSchemaHandler());
CSSFileHandler cssFileSchemaHandler = webSchemaConfigService.getWebSchemaHandlerByType(CSSFileHandler.class);
assertTrue(cssFileSchemaHandler instanceof CSSFileHandler);
JSFileHandler jsFileSchemaHandler = webSchemaConfigService.getWebSchemaHandlerByType(JSFileHandler.class);
assertTrue(jsFileSchemaHandler instanceof JSFileHandler);
HTMLFileSchemaHandler htmlFileSchemaHandler = webSchemaConfigService.getWebSchemaHandlerByType(HTMLFileSchemaHandler.class);
assertTrue(htmlFileSchemaHandler instanceof HTMLFileSchemaHandler);
PortalFolderSchemaHandler portalFolderSchemaHandler= webSchemaConfigService.getWebSchemaHandlerByType(PortalFolderSchemaHandler.class);
assertTrue(portalFolderSchemaHandler instanceof PortalFolderSchemaHandler);
WebContentSchemaHandler webContentSchemaHandler = webSchemaConfigService.getWebSchemaHandlerByType(WebContentSchemaHandler.class);
assertTrue(webContentSchemaHandler instanceof WebContentSchemaHandler);
}
/**
* Test create css file schema handler.
*
* @throws Exception the exception
*/
public void testCreateCSSFileSchemaHandler() throws Exception {
webSchemaConfigService.addWebSchemaHandler(new CSSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new PortalFolderSchemaHandler());
Node cssFolder = documentNode.addNode("css", NodetypeConstant.EXO_CSS_FOLDER);
Node cssNode = cssFolder.addNode("default.css", NodetypeConstant.NT_FILE);
cssNode.setProperty(NodetypeConstant.EXO_ACTIVE, true);
cssNode.setProperty(NodetypeConstant.EXO_PRIORITY, 1);
cssNode.setProperty(NodetypeConstant.EXO_SHARED_CSS, true);
Node cssContent = cssNode.addNode(NodetypeConstant.JCR_CONTENT, NodetypeConstant.NT_RESOURCE);
cssContent.setProperty(NodetypeConstant.JCR_ENCODING, "UTF-8");
cssContent.setProperty(NodetypeConstant.JCR_MIME_TYPE, "text/css");
cssContent.setProperty(NodetypeConstant.JCR_LAST_MODIFIED, new Date().getTime());
cssContent.setProperty(NodetypeConstant.JCR_DATA, "This is the default.css file.");
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
webSchemaConfigService.createSchema(sessionProvider, cssNode);
Node result = (Node)session.getItem("/sites content/live/classic/documents/css/default.css");
assertTrue(result.isNodeType(NodetypeConstant.EXO_CSS_FILE));
assertTrue(result.isNodeType(NodetypeConstant.EXO_OWNEABLE));
assertEquals(result.getProperty(NodetypeConstant.EXO_PRESENTATION_TYPE).getString(), NodetypeConstant.EXO_CSS_FILE);
cssFolder.remove();
session.save();
}
/**
* Test create js file schema handler.
*
* @throws Exception the exception
*/
public void testCreateJSFileSchemaHandler() throws Exception {
webSchemaConfigService.addWebSchemaHandler(new JSFileHandler());
webSchemaConfigService.addWebSchemaHandler(new PortalFolderSchemaHandler());
Node jsFolder = documentNode.addNode("js", NodetypeConstant.EXO_JS_FOLDER);
Node jsNode = jsFolder.addNode("default.js", NodetypeConstant.NT_FILE);
jsNode.setProperty(NodetypeConstant.EXO_ACTIVE, true);
jsNode.setProperty(NodetypeConstant.EXO_PRIORITY, 1);
jsNode.setProperty(NodetypeConstant.EXO_SHARED_JS, true);
Node jsContent = jsNode.addNode(NodetypeConstant.JCR_CONTENT, NodetypeConstant.NT_RESOURCE);
jsContent.setProperty(NodetypeConstant.JCR_ENCODING, "UTF-8");
jsContent.setProperty(NodetypeConstant.JCR_MIME_TYPE, "text/javascript");
jsContent.setProperty(NodetypeConstant.JCR_LAST_MODIFIED, new Date().getTime());
jsContent.setProperty(NodetypeConstant.JCR_DATA, "This is the default.js file.");
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
webSchemaConfigService.createSchema(sessionProvider, jsNode);
Node result = (Node)session.getItem("/sites content/live/classic/documents/js/default.js");
assertTrue(result.isNodeType(NodetypeConstant.EXO_JS_FILE));
assertTrue(result.isNodeType(NodetypeConstant.EXO_OWNEABLE));
assertEquals(result.getProperty(NodetypeConstant.EXO_PRESENTATION_TYPE).getString(), NodetypeConstant.EXO_JS_FILE);
jsFolder.remove();
session.save();
}
/**
* Test create html file schema handler with no pre-defined folder.
*
* @throws Exception the exception
*/
public void testCreateWebcontentSchemaHandler_01() throws Exception {
webSchemaConfigService.addWebSchemaHandler(new WebContentSchemaHandler());
Node webcontentNode = documentNode.addNode("webcontent", NodetypeConstant.EXO_WEBCONTENT);
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
webSchemaConfigService.createSchema(sessionProvider, webcontentNode);
Node result = (Node)session.getItem("/sites content/live/classic/documents/webcontent");
assertEquals("css", result.getNode("css").getName());
assertEquals(NodetypeConstant.EXO_CSS_FOLDER, result.getNode("css").getPrimaryNodeType().getName());
assertEquals("js", result.getNode("js").getName());
assertEquals(NodetypeConstant.EXO_JS_FOLDER, result.getNode("js").getPrimaryNodeType().getName());
assertEquals("documents", result.getNode("documents").getName());
assertEquals(NodetypeConstant.NT_UNSTRUCTURED, result.getNode("documents").getPrimaryNodeType().getName());
Node mediasNode = result.getNode("medias");
assertEquals("medias", mediasNode.getName());
assertEquals(NodetypeConstant.EXO_MULTIMEDIA_FOLDER, result.getNode("medias").getPrimaryNodeType().getName());
assertEquals("images", mediasNode.getNode("images").getName());
assertEquals(NodetypeConstant.NT_FOLDER, mediasNode.getNode("images").getPrimaryNodeType().getName());
assertEquals("videos", mediasNode.getNode("videos").getName());
assertEquals(NodetypeConstant.NT_FOLDER, mediasNode.getNode("videos").getPrimaryNodeType().getName());
assertEquals("audio", mediasNode.getNode("audio").getName());
assertEquals(NodetypeConstant.NT_FOLDER, mediasNode.getNode("audio").getPrimaryNodeType().getName());
result.remove();
session.save();
}
/**
* Test create html file schema handler.
*/
public void testCreateHTMLFileSchemaHandler() throws Exception {
Node htmlFolder = documentNode.addNode("html", NodetypeConstant.EXO_WEB_FOLDER);
Node htmlFile = htmlFolder.addNode("htmlFile", NodetypeConstant.NT_FILE);
Node htmlContent = htmlFile.addNode(NodetypeConstant.JCR_CONTENT, NodetypeConstant.NT_RESOURCE);
htmlContent.setProperty(NodetypeConstant.JCR_ENCODING, "UTF-8");
htmlContent.setProperty(NodetypeConstant.JCR_MIME_TYPE, "text/html");
htmlContent.setProperty(NodetypeConstant.JCR_LAST_MODIFIED, new Date().getTime());
htmlContent.setProperty(NodetypeConstant.JCR_DATA, "This is the default.html file.");
session.save();
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
webSchemaConfigService.addWebSchemaHandler(new HTMLFileSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new WebContentSchemaHandler());
webSchemaConfigService.createSchema(sessionProvider, htmlFile);
session.save();
Node result = (Node)session.getItem("/sites content/live/classic/documents/html/htmlFile/default.html");
assertTrue(result.isNodeType(NodetypeConstant.EXO_HTML_FILE));
assertEquals(result.getProperty(NodetypeConstant.EXO_PRESENTATION_TYPE).getString(), NodetypeConstant.EXO_HTML_FILE);
}
/**
* Test modified css file schema handler.
*
* @throws Exception the exception
*/
public void testUpdateCSSFileSchemaHandlerOnModify() throws Exception {
}
/**
* Test modified js file schema handler.
*
* @throws Exception the exception
*/
public void testUpdateJSFileSchemaHandlerOnModify() throws Exception {}
/**
* Test modified html file schema handler.
*/
public void testUpdateHTMLFileSchemaHandlerOnModify() throws Exception {
String htmlData = "<html>" + "<head>" + "<title>My own HTML file</title>"
+ "</head>" + "<body>" + "<h1>the first h1 tag</h1>"
+ "<h2>the first h2 tag</h2>"
+ "<h2>the second h2 tag</h2>"
+ "<h1>the second h1 tag</h1>"
+ "<h2>the third second h2 tag</h2>"
+ "<h3>the first h3 tag</h3>"
+ "<a href=" + "#" + ">Test</a>"
+ "</body>" + "</html>";
Node htmlFolder = documentNode.addNode("html", NodetypeConstant.EXO_WEB_FOLDER);
Node htmlFile = htmlFolder.addNode("htmlFile", NodetypeConstant.NT_FILE);
Node htmlContent = htmlFile.addNode(NodetypeConstant.JCR_CONTENT, NodetypeConstant.NT_RESOURCE);
htmlContent.setProperty(NodetypeConstant.JCR_ENCODING, "UTF-8");
htmlContent.setProperty(NodetypeConstant.JCR_MIME_TYPE, "text/html");
htmlContent.setProperty(NodetypeConstant.JCR_LAST_MODIFIED, new Date().getTime());
htmlContent.setProperty(NodetypeConstant.JCR_DATA, htmlData);
session.save();
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
webSchemaConfigService.addWebSchemaHandler(new HTMLFileSchemaHandler());
webSchemaConfigService.addWebSchemaHandler(new WebContentSchemaHandler());
webSchemaConfigService.createSchema(sessionProvider, htmlFile);
session.save();
Node result = (Node)session.getItem("/sites content/live/classic/documents/html/htmlFile/default.html");
assertTrue(result.isNodeType(NodetypeConstant.EXO_HTML_FILE));
assertEquals(result.getProperty(NodetypeConstant.EXO_PRESENTATION_TYPE).getString(), NodetypeConstant.EXO_HTML_FILE);
webSchemaConfigService.updateSchemaOnModify(sessionProvider, htmlFile);
Node webContent = (Node)session.getItem("/sites content/live/classic/documents/html/htmlFile");
assertTrue(webContent.hasProperty("exo:links"));
}
/**
* Test remove css file schema handler.
*/
public void testUpdateCSSFileSchemaHandlerOnRemove() {
}
/**
* Test remove js file schema handler.
*
* @throws Exception the exception
*/
public void testUpdateJSFileSchemaHandlerOnRemove() throws Exception {}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
public void tearDown() throws Exception {
NodeIterator nodeIterator = documentNode.getNodes();
while (nodeIterator.hasNext()) {
nodeIterator.nextNode().remove();
}
session.save();
super.tearDown();
}
}