Package org.vosao.business.impl.imex

Source Code of org.vosao.business.impl.imex.ThemeExporterImpl

/**
* Vosao CMS. Simple CMS for Google App Engine.
*
* Copyright (C) 2009-2010 Vosao development team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
* email: vosao.dev@gmail.com
*/

package org.vosao.business.impl.imex;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.vosao.business.decorators.TreeItemDecorator;
import org.vosao.business.imex.ResourceExporter;
import org.vosao.business.imex.ThemeExporter;
import org.vosao.business.imex.task.TaskTimeoutException;
import org.vosao.business.imex.task.ZipOutStreamTaskAdapter;
import org.vosao.dao.DaoTaskException;
import org.vosao.entity.FolderEntity;
import org.vosao.entity.TemplateEntity;
import org.vosao.utils.FolderUtil;

public class ThemeExporterImpl extends AbstractExporter
    implements ThemeExporter {

  public ThemeExporterImpl(ExporterFactoryImpl factory) {
    super(factory);
  }
 
  public void exportThemes(final ZipOutStreamTaskAdapter out,
      final List<TemplateEntity> themes) throws IOException,
      TaskTimeoutException{
    FolderEntity themeFolder = getDao().getFolderDao().getByPath("/theme");
    if (themeFolder == null) {
      logger.error("Folder not found: /theme");
      return;
    }
    getResourceExporter().addFolder(out, themeFolder, "theme/");
    for (TemplateEntity theme : themes) {
      exportTheme(out, theme);
    }
  }
 
  public void exportTheme(final ZipOutStreamTaskAdapter out,
      final TemplateEntity theme) throws IOException,
      TaskTimeoutException {
    String themeFolder = getThemeZipPath(theme);
    addThemeResources(out, theme);   
    String descriptionName = themeFolder + "_template.xml";
    if (!out.isSkip(descriptionName)) {
      out.putNextEntry(new ZipEntry(descriptionName));
      out.write(createThemeExportXML(theme).getBytes("UTF-8"));
      out.closeEntry();
      out.nextFile();
    }
  }

  private static String getThemeZipPath(final TemplateEntity theme) {
    return THEME_FOLDER + theme.getUrl() + "/";
  }
 
  private static String getThemePath(final TemplateEntity theme) {
    return "/" + THEME_FOLDER + theme.getUrl();
  }

  @Override
  public String createThemeExportXML(final TemplateEntity theme) {
    Document doc = DocumentHelper.createDocument();
    Element root = doc.addElement("template");
    root.addElement("title").addText(theme.getTitle());
    root.addElement("url").addText(theme.getUrl());
    root.addElement("content").addText(theme.getContent());
    return doc.asXML();
  }
 
  private void addThemeResources(final ZipOutStreamTaskAdapter out,
      final TemplateEntity theme) throws IOException,
      TaskTimeoutException {
    TreeItemDecorator<FolderEntity> root = getBusiness()
        .getFolderBusiness().getTree();
    TreeItemDecorator<FolderEntity> themeFolder = getBusiness()
        .getFolderBusiness().findFolderByPath(root, getThemePath(theme));
    if (themeFolder == null) {
      return;
    }
    getResourceExporter().addResourcesFromFolder(out, themeFolder,
        getThemeZipPath(theme));
  }
 
  public boolean isThemeDescription(final ZipEntry entry)
      throws UnsupportedEncodingException {
    String[] chain = FolderUtil.getPathChain(entry);
    if (chain.length < 3 || !chain[0].equals("theme")
        || !chain[2].equals("description.xml")) {
      return false;
    }
    return true;
 
 
  private TemplateEntity readThemeImportXML(final String xml)
      throws DocumentException {
    Document doc = DocumentHelper.parseText(xml);
    Element root = doc.getRootElement();
    TemplateEntity template = new TemplateEntity();
    for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
      Element element = i.next();
      if (element.getName().equals("title")) {
        template.setTitle(element.getStringValue());
      }
      if (element.getName().equals("url")) {
        template.setUrl(element.getStringValue());
      }
    }
    return template;
 

  public void createThemeByDescription(final ZipEntry entry, String xml)
      throws UnsupportedEncodingException, DocumentException,
      DaoTaskException {
    String[] chain = FolderUtil.getPathChain(entry);
    String themeName = chain[1];
    TemplateEntity theme = getDao().getTemplateDao().getByUrl(themeName);
    if (theme == null) {
      theme = new TemplateEntity();
      theme.setContent("");
    }
    String content = theme.getContent();
    TemplateEntity parsedEntity = readThemeImportXML(xml);
    theme.copy(parsedEntity);
    theme.setContent(content);
    getDaoTaskAdapter().templateSave(theme);
 
 
  public boolean isThemeContent(final ZipEntry entry)
      throws UnsupportedEncodingException {
    String[] chain = FolderUtil.getPathChain(entry);
    if (chain.length < 3 || !chain[0].equals("theme")
      || !chain[2].equals("content.html")) {
      return false;
    }
    return true;
  }
 
 
  public void createThemeByContent(final ZipEntry entry,
      final String content)
      throws UnsupportedEncodingException, DocumentException,
      DaoTaskException {
    String[] chain = FolderUtil.getPathChain(entry);
    String themeName = chain[1];
    TemplateEntity theme = getDao().getTemplateDao().getByUrl(themeName);
    if (theme == null) {
      theme = new TemplateEntity();
      theme.setTitle(themeName);
      theme.setUrl(themeName);
    }
    theme.setContent(content);
    getDaoTaskAdapter().templateSave(theme);
  }

  public ResourceExporter getResourceExporter() {
    return getExporterFactory().getResourceExporter();
  }
 
  /**
   * Read and import data from _template.xml file.
   * @param path - path to _temlate.xml file.
   * @param xml - _template.xml content.
   * @return true if successfully imported.
   * @throws DocumentException
   * @throws DaoTaskException
   */
  public boolean readTemplateFile(String path, String xml)
      throws DocumentException, DaoTaskException {
    String folderPath = FolderUtil.getFilePath(path);
    String templateName = getTemplateName(folderPath);
    if (templateName == null) {
      return false;
    }
    TemplateEntity template = getDao().getTemplateDao().getByUrl(
        templateName);
    if (template == null) {
      template = new TemplateEntity();
      template.setUrl(templateName);
    }
    Element root = DocumentHelper.parseText(xml).getRootElement();
    String title = root.elementText("title");
    if (!StringUtils.isEmpty(title)) {
      template.setTitle(title);
    }
    String content = root.elementText("content");
    if (!StringUtils.isEmpty(content)) {
      template.setContent(content);
    }
    getDaoTaskAdapter().templateSave(template);
    return true;
  }
 
  private String getTemplateName(String folderPath) {
    try {
      String[] chain = FolderUtil.getPathChain(folderPath);
      if (chain.length == 2 && chain[0].equals("theme")) {
        return chain[1];
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
 
}
TOP

Related Classes of org.vosao.business.impl.imex.ThemeExporterImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.