001/* 002 * Copyright 2018 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.odfpilotage.report.impl; 017 018import java.util.Arrays; 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import javax.xml.transform.sax.TransformerHandler; 024 025import org.apache.cocoon.xml.AttributesImpl; 026import org.apache.cocoon.xml.XMLUtils; 027import org.apache.commons.lang3.StringUtils; 028import org.xml.sax.SAXException; 029 030import org.ametys.cms.FilterNameHelper; 031import org.ametys.odf.ProgramItem; 032import org.ametys.odf.course.Course; 033import org.ametys.odf.program.Program; 034import org.ametys.plugins.odfpilotage.report.impl.mcc.MCCAmetysObjectTree; 035import org.ametys.plugins.repository.AmetysObject; 036import org.ametys.plugins.repository.metadata.CompositeMetadata; 037import org.ametys.runtime.i18n.I18nizableText; 038 039/** 040 * Class to generate the MCC report. 041 */ 042public class MCCReport extends AbstractMCCReport 043{ 044 private static final Map<String, String> __CONVERT_DEGREE = new HashMap<>(); 045 static 046 { 047 __CONVERT_DEGREE.put("XA", "LIC"); 048 __CONVERT_DEGREE.put("XB", "MAS"); 049 __CONVERT_DEGREE.put("CB", "DUT"); 050 __CONVERT_DEGREE.put("DP", "LP"); 051 __CONVERT_DEGREE.put("FI", "ING"); 052 __CONVERT_DEGREE.put("FN", "ING"); 053 } 054 055 @Override 056 protected String getType() 057 { 058 return "mcc"; 059 } 060 061 @Override 062 protected String getReportName() 063 { 064 return _i18nUtils.translate(new I18nizableText("plugin.odf-pilotage", "PLUGINS_ODF_PILOTAGE_MCC_LABEL")); 065 } 066 067 @Override 068 protected void saxMCCs(TransformerHandler handler, Course course, MCCAmetysObjectTree tree) throws SAXException 069 { 070 XMLUtils.startElement(handler, "mcc"); 071 072 // sax MCC 073 CompositeMetadata metadataHolder = course.getMetadataHolder(); 074 List<String> sessionNames = Arrays.asList("mccSession1", "mccSession2"); 075 076 // session 1 + session 2 077 for (String sessionName : sessionNames) 078 { 079 if (metadataHolder.hasMetadata(sessionName)) 080 { 081 AttributesImpl sessionAttrs = new AttributesImpl(); 082 sessionAttrs.addCDATAAttribute("num", String.valueOf(sessionNames.indexOf(sessionName) + 1)); 083 XMLUtils.startElement(handler, "session", sessionAttrs); 084 085 CompositeMetadata sessionMetadata = metadataHolder.getCompositeMetadata(sessionName); 086 087 String[] entryNames = sessionMetadata.getMetadataNames(); 088 Arrays.sort(entryNames, _STRING2INTEGER_COMPARATOR); 089 090 for (String entryName : entryNames) 091 { 092 _saxSessionEntry(handler, sessionMetadata, entryName); 093 } 094 095 XMLUtils.endElement(handler, "session"); 096 } 097 } 098 099 XMLUtils.endElement(handler, "mcc"); 100 } 101 102 /** 103 * Sax a MCC session entry. 104 * @param handler The transformer handler 105 * @param sessionMetadata The composite metadata holding the session 106 * @param entryName The session entry name 107 * @throws SAXException If an error occurs 108 */ 109 private void _saxSessionEntry(TransformerHandler handler, CompositeMetadata sessionMetadata, String entryName) throws SAXException 110 { 111 CompositeMetadata sessionEntry = sessionMetadata.getCompositeMetadata(entryName); 112 113 AttributesImpl entryAttrs = new AttributesImpl(); 114 entryAttrs.addCDATAAttribute("name", entryName); 115 116 // nature enseignement 117 String natureEns = sessionEntry.getString("natureEnseignement", StringUtils.EMPTY); 118 if (StringUtils.isNotEmpty(natureEns)) 119 { 120 entryAttrs.addCDATAAttribute("natureEnseignement", natureEns); 121 } 122 123 // start entry 124 XMLUtils.startElement(handler, "entry", entryAttrs); 125 126 saxSessionEntryDetails(handler, sessionEntry); 127 128 // end entry 129 XMLUtils.endElement(handler, "entry"); 130 } 131 132 @Override 133 protected void populateMCCAmetysObjectTree(MCCAmetysObjectTree tree) 134 { 135 AmetysObject ao = tree.getCurrent(); 136 if (ao instanceof ProgramItem) 137 { 138 List<ProgramItem> children = _odfHelper.getChildProgramItems((ProgramItem) ao); 139 for (ProgramItem child : children) 140 { 141 MCCAmetysObjectTree childTree = tree.addChild(child); 142 populateMCCAmetysObjectTree(childTree); 143 } 144 } 145 } 146 147 @Override 148 protected String getReportFileName(Program program) 149 { 150 StringBuilder sb = new StringBuilder(); 151 152 sb.append(getType()); 153 sb.append("-"); 154 155 // Catalog 156 sb.append(program.getCatalog()); 157 sb.append("-"); 158 159 // Lang 160 sb.append(program.getLanguage()); 161 sb.append("-"); 162 163 // Degree 164 String degree = _refTableHelper.getItemCode(program.getDegree()); 165 if (__CONVERT_DEGREE.containsKey(degree)) 166 { 167 degree = __CONVERT_DEGREE.get(degree); 168 } 169 sb.append(degree); 170 sb.append("-"); 171 172 // Domain 173 String[] domains = program.getDomain(); 174 for (String domainId : domains) 175 { 176 String domain = _refTableHelper.getItemCode(domainId); 177 if (StringUtils.isNotEmpty(domain)) 178 { 179 sb.append(domain); 180 sb.append('-'); 181 } 182 } 183 184 // Mention or title 185 String mentionId = program.getMention(); 186 if (StringUtils.isBlank(mentionId)) 187 { 188 sb.append(FilterNameHelper.filterName(program.getTitle())); 189 } 190 else 191 { 192 sb.append(FilterNameHelper.filterName(_refTableHelper.getItemLabel(mentionId, program.getLanguage()))); 193 } 194 195 // Date 196 sb.append("-"); 197 sb.append(_currentFormattedDate); 198 199 return sb.toString(); 200 } 201 202 @Override 203 protected void saxGlobalInformations(TransformerHandler handler, Program program) throws SAXException 204 { 205 // Do nothing 206 } 207}