/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including 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, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.applications.contenttool.actions; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.exolab.castor.jdo.Database; import org.exolab.castor.mapping.Mapping; import org.exolab.castor.xml.Marshaller; import org.infoglue.cms.applications.common.VisualFormatter; import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; import org.infoglue.cms.controllers.kernel.impl.simple.AccessRightController; import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService; import org.infoglue.cms.controllers.kernel.impl.simple.CategoryController; import org.infoglue.cms.controllers.kernel.impl.simple.ContentController; import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController; import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController; import org.infoglue.cms.entities.content.Content; import org.infoglue.cms.entities.management.impl.simple.InfoGlueExportImpl; import org.infoglue.cms.exception.SystemException; import org.infoglue.cms.util.CmsPropertyHandler; import org.infoglue.cms.util.handlers.DigitalAssetBytesHandler; /** * This class handles Exporting of a repository to an XML-file. * * @author mattias */ public class ExportContentAction extends InfoGlueAbstractAction { private final static Logger logger = Logger.getLogger(ExportContentAction.class.getName()); private Integer repositoryId = null; private Integer contentId = null; //private List repositories = new ArrayList(); private List contents = new ArrayList(); private String fileUrl = ""; private String fileName = ""; private int assetMaxSize = -1; /** * This shows the dialog before export. * @return * @throws Exception */ public String doInput() throws Exception { //repositories = RepositoryController.getController().getRepositoryVOList(); return "input"; } /** * This handles the actual exporting. */ protected String doExecute() throws Exception { if(!AccessRightController.getController().getIsPrincipalAuthorized(this.getInfoGluePrincipal(), "ContentTool.ImportExport", true)) throw new SystemException("You are not allowed to export contents."); Database db = CastorDatabaseService.getDatabase(); try { Mapping map = new Mapping(); String exportFormat = CmsPropertyHandler.getExportFormat(); logger.info("MappingFile:" + CastorDatabaseService.class.getResource("/xml_mapping_content_2.5.xml").toString()); map.loadMapping(CastorDatabaseService.class.getResource("/xml_mapping_content_2.5.xml").toString()); // All ODMG database access requires a transaction db.begin(); //List siteNodes = new ArrayList(); List contents = new ArrayList(); String[] contentIds = getRequest().getParameterValues("contentId"); for(int i=0; i<contentIds.length; i++) { Integer contentId = new Integer(contentIds[i]); //Repository repository = RepositoryController.getController().getRepositoryWithId(repositoryId, db); //SiteNode siteNode = SiteNodeController.getController().getRootSiteNode(repositoryId, db); Content content = ContentController.getContentController().getContentWithId(contentId, db); //siteNodes.add(siteNode); contents.add(content); } List contentTypeDefinitions = ContentTypeDefinitionController.getController().getContentTypeDefinitionList(db); List categories = CategoryController.getController().getAllActiveCategories(); List languages = LanguageController.getController().getLanguageList(db); InfoGlueExportImpl infoGlueExportImpl = new InfoGlueExportImpl(); VisualFormatter visualFormatter = new VisualFormatter(); String fileName = "Export_contents_" + visualFormatter.formatDate(new Date(), "yyyy-MM-dd") + ".xml"; String filePath = CmsPropertyHandler.getDigitalAssetPath(); String fileSystemName = filePath + File.separator + fileName; fileUrl = CmsPropertyHandler.getWebServerAddress() + "/" + CmsPropertyHandler.getDigitalAssetBaseUrl() + "/" + fileName; this.fileName = fileName; String encoding = "UTF-8"; File file = new File(fileSystemName); FileOutputStream fos = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fos, encoding); Marshaller marshaller = new Marshaller(osw); marshaller.setMapping(map); marshaller.setEncoding(encoding); DigitalAssetBytesHandler.setMaxSize(assetMaxSize); infoGlueExportImpl.getRootContent().addAll(contents); //infoGlueExportImpl.getRootSiteNode().addAll(siteNodes); //infoGlueExportImpl.getRootContents().add((ContentImpl)content); //infoGlueExportImpl.getRootSiteNodes().add((SiteNodeImpl)siteNode); infoGlueExportImpl.setLanguages(languages); infoGlueExportImpl.setContentTypeDefinitions(contentTypeDefinitions); infoGlueExportImpl.setCategories(categories); marshaller.marshal(infoGlueExportImpl); osw.flush(); osw.close(); db.rollback(); } catch (Exception e) { logger.error("An error was found exporting a repository: " + e.getMessage(), e); db.rollback(); } finally { db.close(); } return "success"; } public void setRepositoryId(Integer repositoryId) { this.repositoryId = repositoryId; } public void setContentId(Integer contentId) { this.contentId = contentId; } public String getFileName() { return fileName; } public String getFileUrl() { return fileUrl; } public Integer getRepositoryId() { return repositoryId; } public Integer getContentId() { return contentId; } public List getContents() { return contents; } public int getAssetMaxSize() { return assetMaxSize; } public void setAssetMaxSize(int assetMaxSize) { this.assetMaxSize = assetMaxSize; } }