shuber      2005/01/31 10:33:16 CET

  Modified files:
    core/src/java/org/jahia/params SoapParamBean.java 
    core/src/webapp/WEB-INF/etc/slide domain.xml 
  Added files:
    core/src/webapp/WEB-INF/etc/slide listener.properties 
    core/src/java/org/jahia/services/webdav/listeners 
                                                      
CMSSlideContentListener.java 
  Log:
  Add a new CMS Slide content event listener that allows the creation of pages 
when directories are created in Slide content.
  This implementation is not yet complete, still to do :
  - creation of containers when files are uploaded
  - renaming of directories and files
  - deletion of directories and files
  
  Revision  Changes    Path
  1.4       +10 -0     jahia/core/src/java/org/jahia/params/SoapParamBean.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/params/SoapParamBean.java.diff?r1=1.3&r2=1.4&f=h
  1.1       +277 -0    
jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
 (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java?rev=1.1&content-type=text/plain
  1.2       +2 -0      jahia/core/src/webapp/WEB-INF/etc/slide/domain.xml
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/webapp/WEB-INF/etc/slide/domain.xml.diff?r1=1.1&r2=1.2&f=h
  1.1       +5 -0      
jahia/core/src/webapp/WEB-INF/etc/slide/listener.properties (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/webapp/WEB-INF/etc/slide/listener.properties?rev=1.1&content-type=text/plain
  
  
  
  Index: SoapParamBean.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/params/SoapParamBean.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SoapParamBean.java        5 Aug 2004 12:34:08 -0000       1.3
  +++ SoapParamBean.java        31 Jan 2005 09:33:16 -0000      1.4
  @@ -14,6 +14,7 @@
   import javax.servlet.http.HttpServletResponse;
   import javax.servlet.ServletContext;
   import java.util.Locale;
  +import org.jahia.services.pages.JahiaPage;
   
   /**
    * Created by IntelliJ IDEA.
  @@ -24,6 +25,7 @@
    */
   public class SoapParamBean extends ParamBean {
   
  +    private JahiaPage page;
   
       public SoapParamBean(JahiaSite site, JahiaUser user)
               throws JahiaPageNotFoundException, 
JahiaSessionExpirationException, JahiaSiteNotFoundException, JahiaException {
  @@ -51,4 +53,12 @@
           // we won't change initial user
       }
   
  +    public JahiaPage getPage() {
  +        return page;
  +    }
  +
  +    public void setPage(JahiaPage page) {
  +        this.page = page;
  +    }
  +
   }
  
  
  
  Index: listener.properties
  ====================================================================
  sensei.url=http://localhost:8080/sensei
  filecreation.filter=/shared/test/
  parent.container.name=linkContainer
  parent.page.id=2
  page.template.name=Simple
  
  
  
  Index: domain.xml
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/webapp/WEB-INF/etc/slide/domain.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- domain.xml        17 Sep 2004 10:14:52 -0000      1.1
  +++ domain.xml        31 Jan 2005 09:33:16 -0000      1.2
  @@ -11,6 +11,8 @@
   
       <events>
           <event classname="org.apache.slide.event.MacroEvent" method="move" 
enable="true"></event>
  +        <event classname="org.apache.slide.event.ContentEvent" 
method="create" enable="true"></event>
           <listener classname="org.jahia.services.webdav.JahiaMacroListener"/>
  +        <!--listener 
classname="org.jahia.services.webdav.listeners.CMSSlideContentListener"/-->
       </events>
   </slide>
  
  
  
  Index: CMSSlideContentListener.java
  ====================================================================
  package org.jahia.services.webdav.listeners;
  
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.security.Principal;
  import java.util.Enumeration;
  import java.util.Locale;
  import java.util.Properties;
  
  import org.apache.slide.event.ContentEvent;
  import org.apache.slide.event.ContentListener;
  import org.apache.slide.event.VetoException;
  import org.jahia.bin.Jahia;
  import org.jahia.data.containers.JahiaContainer;
  import org.jahia.data.containers.JahiaContainerDefinition;
  import org.jahia.data.containers.JahiaContainerList;
  import org.jahia.data.fields.JahiaField;
  import org.jahia.data.fields.JahiaPageField;
  import org.jahia.data.fields.LoadFlags;
  import org.jahia.exceptions.JahiaException;
  import org.jahia.params.ParamBean;
  import org.jahia.params.SoapParamBean;
  import org.jahia.registries.ServicesRegistry;
  import org.jahia.services.containers.JahiaContainersService;
  import org.jahia.services.pages.JahiaPage;
  import org.jahia.services.pages.JahiaPageTemplateBaseService;
  import org.jahia.services.sites.JahiaSite;
  import org.jahia.services.usermanager.JahiaUser;
  import org.jahia.services.version.EntryLoadRequest;
  import org.apache.slide.webdav.util.WebdavUtils;
  import org.jahia.services.pages.JahiaPageService;
  import java.util.StringTokenizer;
  import org.jahia.registries.JahiaContainerDefinitionsRegistry;
  import org.apache.slide.event.MacroListener;
  import org.apache.slide.event.MacroEvent;
  
  /**
   * Created by IntelliJ IDEA.
   * User: toto
   * Date: 2 nov. 2004
   * Time: 15:23:17
   * <p/>
   * $Author: shuber $
   * $Date: 2005/01/31 09:33:16 $
   * $Id: CMSSlideContentListener.java,v 1.1 2005/01/31 09:33:16 shuber Exp $
   * $RCSfile: CMSSlideContentListener.java,v $
   * $Revision: 1.1 $
   * $Source: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java,v
 $
   * $State: Exp $
   */
  public class CMSSlideContentListener implements ContentListener, 
MacroListener {
  
      private static org.apache.log4j.Logger logger =
          org.apache.log4j.Logger.getLogger(CMSSlideContentListener.class);
  
      private Properties props;
  
      public CMSSlideContentListener () {
          try {
              props = new Properties();
              props.load(new 
FileInputStream(Jahia.getSettings().getPathResolver().
                                             resolvePath(
                                                 
"/WEB-INF/etc/slide/listener.properties")));
          } catch (IOException e) {
              e.printStackTrace(); //To change body of catch statement use File 
| Settings | File Templates.
          }
      }
  
      public void create (ContentEvent event)
          throws VetoException {
          if (!Jahia.isInitiated()) {
              return;
          }
          String filename = event.getRevisionDescriptors().getUri();
          Principal p = event.getToken().getCredentialsToken().getPrincipal();
          if (!filename.startsWith(props.getProperty("filecreation.filter"))) {
              return;
          }
          logger.debug("Content create event called " + event);
          try {
              JahiaSite site = ServicesRegistry.getInstance().
                               getJahiaSitesService().getSiteByKey(event.
                  getNamespace().getName());
              JahiaUser user = ServicesRegistry.getInstance().
                               
getJahiaUserManagerService().lookupUser(site.getID(),
                  p.getName());
              if (user == null) {
                  user = ServicesRegistry.getInstance().
                         getJahiaUserManagerService().lookupUser(0, 
p.getName());
              }
              logger.debug("Current user is " + user);
              String containerName = props.getProperty("parent.container.name");
              int pageId = 
Integer.parseInt(props.getProperty("parent.page.id"));
              String pageTemplate = props.getProperty("page.template.name");
  
              SoapParamBean jParams = new SoapParamBean(Jahia.
                  getStaticServletConfig().getServletContext(), 
Jahia.getSettings(),
                  System.currentTimeMillis(), site, user);
              jParams.setSubstituteEntryLoadRequest(EntryLoadRequest.CURRENT);
              Jahia.setThreadParamBean(jParams);
              JahiaContainersService jahiaContainersService = ServicesRegistry.
                  getInstance().getJahiaContainersService();
  
              // first we must find the parent page for the new file being 
added.
              // this page will have the same name.
              JahiaPageService pageService = ServicesRegistry.getInstance().
                                             getJahiaPageService();
  
              JahiaPage curPage = pageService.lookupPage(pageId, jParams);
              jParams.setPage(curPage);
  
              String relativeFileName = filename.substring(props.getProperty(
                  "filecreation.filter").length(), filename.length());
              if (relativeFileName.startsWith("/")) {
                  // this is the case where the user either did or didn't
                  // specify the trailing / in the filter.
                  relativeFileName = relativeFileName.substring(1,
                      relativeFileName.length());
              }
              StringTokenizer tokenizer = new StringTokenizer(relativeFileName,
                  "/");
  
              while (tokenizer.hasMoreTokens()) {
                  String curPageTitle = (String) tokenizer.nextToken();
                  Enumeration childEnum = curPage.getChilds(jParams.getUser());
                  boolean foundChild = false;
                  while (childEnum.hasMoreElements()) {
                      JahiaPage curJahiaPage = (JahiaPage) 
childEnum.nextElement();
                      logger.debug("Current page title=" + 
curJahiaPage.getTitle());
                      if (curJahiaPage.getTitle().equals(curPageTitle)) {
                          curPage = curJahiaPage;
                          foundChild = true;
                          break;
                      }
                  }
              }
              logger.debug("target page is " + curPage.getID());
  
              if (WebdavUtils.isCollection(event.getRevisionDescriptor())) {
                  logger.debug("URI is a collection, let's create a page for 
it");
                  createPage(filename, site, containerName, curPage.getID(),
                             pageTemplate, jParams, jahiaContainersService);
              } else {
                  // add a container on an existing page.
                  logger.debug(
                      "URI is a file, let's create a container for it, on the 
found parent page");
              }
          } catch (JahiaException e) {
              e.printStackTrace(); //To change body of catch statement use File 
| Settings | File Templates.
          }
  
          Jahia.setThreadParamBean(null);
  
      }
  
      private void createPage (String filename, JahiaSite site,
                               String containerName, int pageId,
                               String pageTemplate, ParamBean jParams,
                               JahiaContainersService jahiaContainersService)
          throws JahiaException {
          int demandsContainerListID = 
jahiaContainersService.getContainerListID(
              containerName, pageId);
  
          int containerPageID = pageId;
          int containerListID = 0;
          int containerListACLID = 0;
          int containerDefID = 0;
  
          if (demandsContainerListID == -1) {
              // this can happen if the container list was never created.
              // we must then only lookup the definition
              JahiaContainerDefinition containerDef =
                  JahiaContainerDefinitionsRegistry.getInstance().getDefinition(
                      site.getID(), containerName);
              if (containerDef != null) {
                  containerDefID = containerDef.getID();
              } else {
                  logger.warn("Couldn't find container definition " +
                              containerName);
              }
          } else {
              JahiaContainerList containerList = jahiaContainersService.
                                                 loadContainerList(
                  demandsContainerListID, LoadFlags.NOTHING,
                  jParams);
              containerPageID = containerList.getPageID();
              containerListID = containerList.getID();
              containerListACLID = containerList.getAclID();
              containerDefID = containerList.getctndefid();
          }
          JahiaPage parent = 
ServicesRegistry.getInstance().getJahiaPageService().
                             lookupPage(pageId, jParams);
  
          // add a container
          JahiaContainer pageContainer = new JahiaContainer(0,
              site.getID(),
              containerPageID,
              containerListID,
              0, /* rank */
              containerListACLID,
              containerDefID,
              0, 2);
          JahiaContainerDefinition containerDef = pageContainer.getDefinition();
          Locale locale = (Locale) site.getLanguageSettingsAsLocales(true).
                          iterator().next();
  
          jahiaContainersService.
              saveContainer(pageContainer, containerListID, jParams);
          pageContainer.setLanguageCode(locale.toString());
          pageContainer.fieldsStructureCheck(jParams);
  
          // create a new jahia page
          Enumeration e = pageContainer.getFields();
          JahiaField pageField = null;
          while (e.hasMoreElements() && ! (pageField instanceof 
JahiaPageField)) {
              pageField = (JahiaField) e.nextElement();
          }
          // get the details templateID
          JahiaPageTemplateBaseService templateServ =
              JahiaPageTemplateBaseService.getInstance();
          int templateId = templateServ.lookupPageTemplateByName(pageTemplate,
              jParams.getSite().getID()).getID();
          JahiaPage jahiaPage;
          String pageTitle = filename.substring(filename.lastIndexOf('/') + 1);
          jahiaPage = ServicesRegistry.getInstance().getJahiaPageService().
                      createPage(
                          jParams.getSite().getID(),
                          pageId,
                          JahiaPage.TYPE_DIRECT,
                          pageTitle,
                          templateId,
                          "",
                          -1,
                          jParams.getUser().getUserKey(),
                          pageField.getAclID(),
                          jParams);
          pageField.setValue(Integer.toString(jahiaPage.getID()));
          pageField.setObject(jahiaPage);
          pageField.save(jParams);
      }
  
      public void fork (ContentEvent event)
          throws VetoException {
      }
  
      public void merge (ContentEvent event)
          throws VetoException {
      }
  
      public void remove (ContentEvent event)
          throws VetoException {
      }
  
      public void retrieve (ContentEvent event)
          throws VetoException {
      }
  
      public void store (ContentEvent event)
          throws VetoException {
          logger.debug("Content Store event called" + event);
      }
  
      // Macro listener methods :
  
      public void copy (MacroEvent macroEvent)
          throws VetoException {
          logger.debug("Copy event called " + macroEvent);
      }
  
      public void move(MacroEvent macroEvent) throws VetoException {
          logger.debug("Move event called " + macroEvent);
      }
  
      public void delete(MacroEvent macroEvent) throws VetoException {
          logger.debug("Delete event called " + macroEvent);
      }
  }
  

Reply via email to