001/* 002 * Copyright 2019 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.odf.ose.export.impl; 017 018import java.util.ArrayList; 019import java.util.HashSet; 020import java.util.List; 021import java.util.Set; 022 023import org.apache.avalon.framework.service.ServiceException; 024import org.apache.avalon.framework.service.ServiceManager; 025import org.apache.avalon.framework.service.Serviceable; 026 027import org.ametys.odf.ODFHelper; 028import org.ametys.odf.ProgramItem; 029import org.ametys.odf.course.Course; 030import org.ametys.odf.ose.db.ParameterizableQuery; 031import org.ametys.odf.ose.export.AbstractOSEExport; 032import org.ametys.odf.ose.export.OSEConstants; 033import org.ametys.odf.ose.export.impl.odf.CourseExporter; 034import org.ametys.odf.ose.export.impl.odf.HierarchyExporter; 035import org.ametys.odf.ose.export.impl.odf.ProgramPartExporter; 036import org.ametys.odf.ose.export.impl.odf.StepExporter; 037import org.ametys.odf.ose.export.impl.odf.db.CheminPedagogiqueHelper; 038import org.ametys.odf.ose.export.impl.odf.db.EffectifsHelper; 039import org.ametys.odf.ose.export.impl.odf.db.ElementPedagogiqueHelper; 040import org.ametys.odf.ose.export.impl.odf.db.EtapeHelper; 041import org.ametys.odf.ose.export.impl.odf.db.LienHelper; 042import org.ametys.odf.ose.export.impl.odf.db.NoeudHelper; 043import org.ametys.odf.ose.export.impl.odf.db.ScenarioHelper; 044import org.ametys.odf.ose.export.impl.odf.db.ScenarioLienHelper; 045import org.ametys.odf.ose.export.impl.odf.db.ScenarioNoeudHelper; 046import org.ametys.odf.ose.export.impl.odf.db.TypeInterventionEPHelper; 047import org.ametys.odf.ose.export.impl.odf.db.VolumeHoraireEnsHelper; 048import org.ametys.odf.program.AbstractProgramPart; 049import org.ametys.odf.program.Container; 050 051/** 052 * This exports ODF values to the OSE database by SRC_* views. 053 */ 054public class ODFExport extends AbstractOSEExport implements Serviceable 055{ 056 /** The exporter of steps */ 057 protected StepExporter _stepExporter; 058 /** The exporter of courses */ 059 protected CourseExporter _courseExporter; 060 /** The exporter of program elements */ 061 protected ProgramPartExporter _programElementExporter; 062 /** The exporter of hierarchy */ 063 protected HierarchyExporter _hierarchyExporter; 064 /** The ODF helper */ 065 protected ODFHelper _odfHelper; 066 067 @Override 068 public void service(ServiceManager manager) throws ServiceException 069 { 070 _stepExporter = (StepExporter) manager.lookup(StepExporter.ROLE); 071 _courseExporter = (CourseExporter) manager.lookup(CourseExporter.ROLE); 072 _programElementExporter = (ProgramPartExporter) manager.lookup(ProgramPartExporter.ROLE); 073 _hierarchyExporter = (HierarchyExporter) manager.lookup(HierarchyExporter.ROLE); 074 _odfHelper = (ODFHelper) manager.lookup(ODFHelper.ROLE); 075 } 076 077 @Override 078 public List<ParameterizableQuery> initializeDb() 079 { 080 List<ParameterizableQuery> queries = new ArrayList<>(); 081 queries.addAll(EtapeHelper.initialize()); 082 queries.addAll(ElementPedagogiqueHelper.initialize()); 083 queries.addAll(EffectifsHelper.initialize()); 084 queries.addAll(VolumeHoraireEnsHelper.initialize()); 085 queries.addAll(CheminPedagogiqueHelper.initialize()); 086 queries.addAll(TypeInterventionEPHelper.initialize()); 087 queries.addAll(NoeudHelper.initialize()); 088 queries.addAll(LienHelper.initialize()); 089 queries.addAll(ScenarioHelper.initialize()); 090 queries.addAll(ScenarioNoeudHelper.initialize()); 091 queries.addAll(ScenarioLienHelper.initialize()); 092 return queries; 093 } 094 095 @Override 096 protected List<ParameterizableQuery> _populate(String ametysCatalog, Long oseCatalog) 097 { 098 List<ParameterizableQuery> queries = new ArrayList<>(); 099 queries.addAll(_deleteOldData()); 100 queries.addAll(new Populator(oseCatalog).exportSteps(ametysCatalog)); 101 return queries; 102 } 103 104 private List<ParameterizableQuery> _deleteOldData() 105 { 106 List<ParameterizableQuery> queries = new ArrayList<>(); 107 queries.add(ScenarioLienHelper.deleteFrom()); 108 queries.add(ScenarioNoeudHelper.deleteFrom()); 109 queries.add(LienHelper.deleteFrom()); 110 queries.add(NoeudHelper.deleteFrom()); 111 queries.add(TypeInterventionEPHelper.deleteFrom()); 112 queries.add(CheminPedagogiqueHelper.deleteFrom()); 113 queries.add(VolumeHoraireEnsHelper.deleteFrom()); 114 queries.add(EffectifsHelper.deleteFrom()); 115 queries.add(ElementPedagogiqueHelper.deleteFrom()); 116 queries.add(EtapeHelper.deleteFrom()); 117 return queries; 118 } 119 120 private class Populator 121 { 122 private Set<String> _exportedObjectIds = new HashSet<>(); 123 private Long _oseCatalog; 124 125 Populator(Long oseCatalog) 126 { 127 this._oseCatalog = oseCatalog; 128 } 129 130 List<ParameterizableQuery> exportSteps(String ametysCatalog) 131 { 132 List<ParameterizableQuery> queries = new ArrayList<>(); 133 for (Container step : _stepExporter.getStepsToExport(ametysCatalog)) 134 { 135 if (_exportedObjectIds.add(step.getId())) 136 { 137 queries.addAll(_stepExporter.getQueries(step, _oseCatalog)); 138 queries.addAll(_exportChildren(step)); 139 } 140 } 141 return queries; 142 } 143 144 private List<ParameterizableQuery> _exportChildren(ProgramItem programItem) 145 { 146 List<ParameterizableQuery> queries = new ArrayList<>(); 147 for (ProgramItem child : _odfHelper.getChildProgramItems(programItem)) 148 { 149 if (_exportedObjectIds.add(child.getId())) 150 { 151 if (child instanceof Course) 152 { 153 queries.addAll(_exportCourse((Course) child)); 154 } 155 else 156 { 157 // SubProgram, Container or CourseList 158 queries.addAll(_exportProgramPart((AbstractProgramPart) child)); 159 } 160 queries.addAll(_hierarchyExporter.getQueries(programItem, child)); 161 } 162 } 163 return queries; 164 } 165 166 private List<ParameterizableQuery> _exportProgramPart(AbstractProgramPart programPart) 167 { 168 List<ParameterizableQuery> queries = new ArrayList<>(); 169 if (!programPart.hasDefinition(OSEConstants.NO_OSE_EXPORT_ATTRIBUTE_NAME) || !programPart.getValue(OSEConstants.NO_OSE_EXPORT_ATTRIBUTE_NAME, true, false)) 170 { 171 queries.addAll(_programElementExporter.getQueries(programPart, _oseCatalog)); 172 queries.addAll(_exportChildren(programPart)); 173 } 174 return queries; 175 } 176 177 private List<ParameterizableQuery> _exportCourse(Course course) 178 { 179 List<ParameterizableQuery> queries = new ArrayList<>(); 180 if (!course.getValue(OSEConstants.NO_OSE_EXPORT_ATTRIBUTE_NAME, true, false)) 181 { 182 queries.addAll(_courseExporter.getQueries(course, _oseCatalog)); 183 queries.addAll(_exportChildren(course)); 184 } 185 return queries; 186 } 187 } 188} 189