001/* 002 * Copyright 2017 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.plugins.odfweb.catalog; 017 018import java.util.Map; 019 020import org.apache.avalon.framework.service.ServiceException; 021import org.apache.avalon.framework.service.ServiceManager; 022import org.apache.cocoon.environment.ObjectModelHelper; 023import org.apache.cocoon.environment.Request; 024import org.apache.cocoon.xml.AttributesImpl; 025import org.apache.cocoon.xml.XMLUtils; 026import org.apache.commons.lang3.StringUtils; 027import org.xml.sax.SAXException; 028 029import org.ametys.odf.ProgramItem; 030import org.ametys.odf.program.Program; 031import org.ametys.plugins.odfweb.repository.OdfPageHandler; 032import org.ametys.plugins.odfweb.repository.OdfPageResolver; 033import org.ametys.plugins.repository.AmetysObjectIterable; 034import org.ametys.web.repository.page.Page; 035import org.ametys.web.repository.site.SiteManager; 036 037/** 038 * Generates ODF catalog for ODF-Web 039 * See {@link org.ametys.odf.export.ExportCatalogByLevelsGenerator} 040 * 041 */ 042public class ExportCatalogByLevelsGenerator extends org.ametys.odf.export.ExportCatalogByLevelsGenerator 043{ 044 /** The ODF Page handler */ 045 protected OdfPageHandler _odfPageHandler; 046 047 /** The ODF Page resolver */ 048 protected OdfPageResolver _odfPageResolver; 049 050 /** The site manager */ 051 protected SiteManager _siteManager; 052 053 @Override 054 public void service(ServiceManager smanager) throws ServiceException 055 { 056 super.service(smanager); 057 _odfPageHandler = (OdfPageHandler) smanager.lookup(OdfPageHandler.ROLE); 058 _odfPageResolver = (OdfPageResolver) smanager.lookup(OdfPageResolver.ROLE); 059 _siteManager = (SiteManager) smanager.lookup(SiteManager.ROLE); 060 } 061 062 @Override 063 protected boolean getParameters(Map<String, String> wsParameters) throws SAXException 064 { 065 Request request = ObjectModelHelper.getRequest(objectModel); 066 067 String site = getParameter(request, "site"); 068 wsParameters.put("site", site); 069 070 String catalog = getParameter(request, "catalog"); 071 wsParameters.put("catalog", catalog); 072 073 String lang = getParameter(request, "lang"); 074 wsParameters.put("lang", lang); 075 076 String metadataSet = request.getParameter("metadataSet"); 077 if (StringUtils.isBlank(metadataSet)) 078 { 079 metadataSet = "main"; 080 } 081 wsParameters.put("metadataSet", metadataSet); 082 083 boolean isValidParameters = site != null && catalog != null && lang != null; 084 085 if (isValidParameters) 086 { 087 Page odfRootPage = _odfPageHandler.getOdfRootPage(site, lang, catalog); 088 if (odfRootPage == null) 089 { 090 XMLUtils.createElement(contentHandler, "error", "No ODF root page on website '" + site + "' for sitemap '" + lang + "' and catalog '" + catalog + "'"); 091 isValidParameters = false; 092 } 093 else 094 { 095 String level1 = request.getParameter("level1"); 096 String level2 = request.getParameter("level2"); 097 098 if (level1 == null || level2 == null) 099 { 100 if (level1 == null) 101 { 102 level1 = _odfPageHandler.getLevel1Metadata(odfRootPage); 103 } 104 105 if (level2 == null) 106 { 107 level2 = _odfPageHandler.getLevel2Metadata(odfRootPage); 108 } 109 } 110 111 if (!_odfClassificationHandler.isEligibleMetadataForLevel(level1, true)) 112 { 113 XMLUtils.createElement(contentHandler, "error", "The metadata " + level1 + " is not an eligible metadata for the export"); 114 isValidParameters = false; 115 } 116 117 if (!_odfClassificationHandler.isEligibleMetadataForLevel(level2, true)) 118 { 119 XMLUtils.createElement(contentHandler, "error", "The metadata " + level2 + " is not an eligible metadata for the export"); 120 isValidParameters = false; 121 } 122 123 wsParameters.put("level1", level1); 124 wsParameters.put("level2", level2); 125 } 126 } 127 128 return isValidParameters; 129 } 130 131 @Override 132 protected AmetysObjectIterable<Program> getConcernedPrograms(Map<String, String> wsParameters) 133 { 134 Page odfRootPage = _odfPageHandler.getOdfRootPage(wsParameters.get("site"), wsParameters.get("lang"), wsParameters.get("catalog")); 135 return _odfPageHandler.getProgramsWithRestrictions(odfRootPage, wsParameters.get("level1"), null, wsParameters.get("level2"), null, null, null); 136 } 137 138 @Override 139 protected AttributesImpl getContentAttributes(ProgramItem programItem, Program parentProgram, Map<String, String> wsParameters) 140 { 141 String siteName = wsParameters.get("site"); 142 String url = _siteManager.getSite(siteName).getUrl(); 143 144 AttributesImpl attrs = super.getContentAttributes(programItem, parentProgram, wsParameters); 145 146 String path = _odfPageResolver.getProgramItemPagePath(siteName, wsParameters.get("lang"), programItem, parentProgram); 147 attrs.addCDATAAttribute("path", url + "/" + path); 148 149 return attrs; 150 } 151}