/* * Copyright (C) 2003-2008 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.portal; import java.util.Calendar; import java.util.GregorianCalendar; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.lock.LockException; import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.nodetype.NoSuchNodeTypeException; import javax.jcr.version.VersionException; import org.exoplatform.services.jcr.access.PermissionType; import org.exoplatform.services.jcr.core.ExtendedNode; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.security.ConversationState; import org.exoplatform.services.security.IdentityConstants; import org.exoplatform.services.wcm.core.BaseWebSchemaHandler; import org.exoplatform.services.wcm.core.NodetypeConstant; /** * Created by The eXo Platform SAS. * * @author : Hoa.Pham hoa.pham@exoplatform.com May 28, 2008 */ public class PortalFolderSchemaHandler extends BaseWebSchemaHandler { /** * Instantiates a new portal folder schema handler. */ public PortalFolderSchemaHandler() { } /** * Gets the CSS folder. * * @param portalFolder the portal folder * @return the cSS folder * @throws Exception the exception */ public Node getCSSFolder(final Node portalFolder) throws Exception { return portalFolder.hasNode("css") ? portalFolder.getNode("css") : null; } /** * Gets the javasscript folder. * * @param portalFolder the portal folder * @return the javasscript folder node * @throws Exception the exception */ public Node getJSFolder(final Node portalFolder) throws Exception { return portalFolder.hasNode("js") ? portalFolder.getNode("js") : null; } /** * Gets the multimedia folder. * * @param portalFolder the portal folder * @return the multimedia folder * @throws Exception the exception */ public Node getMultimediaFolder(final Node portalFolder) throws Exception { return portalFolder.getNode("medias"); } /** * Gets the images folder. * * @param portalFolder the portal folder * @return the images folder * @throws Exception the exception */ public Node getImagesFolder(final Node portalFolder) throws Exception { return portalFolder.getNode("medias/images"); } /** * Gets the video folder. * * @param portalFolder the portal folder * @return the video folder * @throws Exception the exception */ public Node getVideoFolder(final Node portalFolder) throws Exception { return portalFolder.getNode("medias/videos"); } /** * Gets the audio folder. * * @param portalFolder the portal folder * @return the audio folder * @throws Exception the exception */ public Node getAudioFolder(final Node portalFolder) throws Exception{ return portalFolder.getNode("medias/audio"); } /** * Gets the document storage. * * @param portalFolder the portal folder * @return the document storage * @throws Exception the exception */ public Node getDocumentStorage(Node portalFolder) throws Exception { return portalFolder.getNode("documents"); } /** * Gets the link folder. * * @param portalFolder the portal folder * @return the link folder * @throws Exception the exception */ public Node getLinkFolder(Node portalFolder) throws Exception { return portalFolder.getNode("links"); } /** * Gets the web content storage. * * @param portalFolder the portal folder * @return the web content storage * @throws Exception the exception */ public Node getWebContentStorage (final Node portalFolder) throws Exception { return portalFolder.getNode("web contents"); } /* (non-Javadoc) * @see org.exoplatform.services.wcm.core.BaseWebSchemaHandler#getHandlerNodeType() */ protected String getHandlerNodeType() { return "exo:portalFolder"; } /* (non-Javadoc) * @see org.exoplatform.services.wcm.core.BaseWebSchemaHandler#getParentNodeType() */ protected String getParentNodeType() { return "nt:unstructured"; } protected void updateNode(Node node) throws NoSuchNodeTypeException, VersionException, ConstraintViolationException, LockException, RepositoryException { addMixin(node, NodetypeConstant.EXO_OWNEABLE); addMixin(node, NodetypeConstant.EXO_DATETIME); addMixin(node, NodetypeConstant.EXO_MODIFY); addMixin(node, NodetypeConstant.EXO_SORTABLE); node.setProperty(NodetypeConstant.EXO_DATE_CREATED, new GregorianCalendar()); node.setProperty(NodetypeConstant.EXO_LAST_MODIFIED_DATE, new GregorianCalendar()); ConversationState conversationState = ConversationState.getCurrent(); String userName = (conversationState == null) ? node.getSession().getUserID() : conversationState.getIdentity().getUserId(); node.setProperty(NodetypeConstant.EXO_LAST_MODIFIER, userName); node.setProperty(NodetypeConstant.EXO_NAME, node.getName()); } /* (non-Javadoc) * @see org.exoplatform.services.wcm.core.BaseWebSchemaHandler#process(javax.jcr.Node) */ public void onCreateNode(SessionProvider sessionProvider, final Node portalFolder) throws Exception { Calendar calendar = new GregorianCalendar(); if (!portalFolder.hasNode("js")) { Node jsFolder = portalFolder.addNode("js","exo:jsFolder"); updateNode(jsFolder); } if (!portalFolder.hasNode("css")) { Node cssFolder = portalFolder.addNode("css","exo:cssFolder"); updateNode(cssFolder); } if (!portalFolder.hasNode("medias")) { Node multimedia = portalFolder.addNode("medias","exo:multimediaFolder"); updateNode(multimedia); Node images = multimedia.addNode("images",NT_FOLDER); addMixin(images, "exo:pictureFolder"); updateNode(images); Node video = multimedia.addNode("videos",NT_FOLDER); addMixin(video, "exo:videoFolder"); updateNode(video); Node audio = multimedia.addNode("audio",NT_FOLDER); addMixin(audio, "exo:musicFolder"); updateNode(audio); } if (!portalFolder.hasNode("documents")) { Node document = portalFolder.addNode("documents",NT_UNSTRUCTURED); addMixin(document, "exo:documentFolder"); updateNode(document); document.addMixin("exo:privilegeable"); ((ExtendedNode)document).setPermission(IdentityConstants.ANY, PermissionType.ALL); } if (!portalFolder.hasNode("web contents")) { Node webContents = portalFolder.addNode("web contents","exo:webFolder"); updateNode(webContents); Node themes = webContents.addNode("site artifacts","exo:themeFolder"); updateNode(themes); } if (!portalFolder.hasNode("links")) { Node links = portalFolder.addNode("links", "exo:linkFolder"); updateNode(links); } if (!portalFolder.hasNode("categories")) { Node categoryFolder = portalFolder.addNode("categories", NT_UNSTRUCTURED); updateNode(categoryFolder); } if (!portalFolder.hasNode("ApplicationData")) { Node applicationDataFolder = portalFolder.addNode("ApplicationData", NT_UNSTRUCTURED); updateNode(applicationDataFolder); addMixin(applicationDataFolder, "exo:hiddenable"); Node newsletterApplicationFolder = applicationDataFolder.addNode("NewsletterApplication", NT_UNSTRUCTURED); updateNode(newsletterApplicationFolder); Node defaultTemplatesFolder = newsletterApplicationFolder.addNode("DefaultTemplates", NT_UNSTRUCTURED); updateNode(defaultTemplatesFolder); Node newsletterCategoriesFolder = newsletterApplicationFolder.addNode("Categories", NT_UNSTRUCTURED); updateNode(newsletterCategoriesFolder); Node newsletterUserFolder = newsletterApplicationFolder.addNode("Users", NT_UNSTRUCTURED); updateNode(newsletterUserFolder); } portalFolder.getSession().save(); } }