/** * OLAT - Online Learning and Training<br> * http://www.olat.org * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> * University of Zurich, Switzerland. * <hr> * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * This file has been modified by the OpenOLAT community. Changes are licensed * under the Apache 2.0 license as the original file. */ package org.olat.course.nodes.projectbroker.service; import java.util.Iterator; import java.util.List; import java.util.Locale; import org.olat.basesecurity.GroupRoles; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.UserConstants; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.Util; import org.olat.course.ICourse; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.projectbroker.ProjectBrokerControllerFactory; import org.olat.course.nodes.projectbroker.datamodel.CustomField; import org.olat.course.nodes.projectbroker.datamodel.Project; import org.olat.course.nodes.projectbroker.datamodel.ProjectEvent; import org.olat.course.properties.CoursePropertyManager; import org.olat.group.BusinessGroupService; /** * @author Christian Guretzki */ public class ProjectBrokerExportGenerator { private static OLog log = Tracing.createLoggerFor(ProjectBrokerExportGenerator.class); private static final String END_OF_LINE = "\t\n"; private static final String TABLE_DELIMITER = "\t"; /** * The results from assessable nodes are written to one row per user into an excel-sheet. An * assessable node will only appear if it is producing at least one of the * following variables: score, passed, attempts, comments. * * @param identities * @param myNodes * @param course * @param locale * @return String */ public static String createCourseResultsOverviewTable(CourseNode courseNode, ICourse course, Locale locale) { Translator translator = Util.createPackageTranslator(ProjectBrokerControllerFactory.class, locale); StringBuilder table = new StringBuilder(); ProjectBrokerModuleConfiguration moduleConfig = new ProjectBrokerModuleConfiguration(courseNode.getModuleConfiguration()); ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class); // load project-list CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager(); Long projectBrokerId = projectBrokerManager.getProjectBrokerId(cpm, courseNode); if (projectBrokerId != null) { List<Project> projects = projectBrokerManager.getProjectListBy(projectBrokerId); // build table-header table.append( createHeaderLine(translator, moduleConfig)) ; // loop over all projects for (Project project : projects) { table.append( createProjectDataLine(translator, project, moduleConfig, translator) ); } } else { log.debug("projectBrokerId is null, courseNode=" + courseNode + " , course=" + course); } return table.toString(); } private static String createProjectDataLine(Translator t, Project project, ProjectBrokerModuleConfiguration moduleConfig, Translator translator) { StringBuilder line = new StringBuilder(); line.append(project.getTitle()); line.append(TABLE_DELIMITER); // loop over project leaders StringBuilder projectLeader = new StringBuilder(); boolean firstElement = true; for (Identity identity : project.getProjectLeaders()) { if (!firstElement) { projectLeader.append(" , "); } String last = identity.getUser().getProperty(UserConstants.LASTNAME, t.getLocale()); String first= identity.getUser().getProperty(UserConstants.FIRSTNAME, t.getLocale()); projectLeader.append(first); projectLeader.append(" "); projectLeader.append(last); firstElement = false; } line.append(projectLeader.toString()); line.append(TABLE_DELIMITER); line.append(t.translate(project.getState())); line.append(TABLE_DELIMITER); // loop over customfileds for (int customFieldIndex=0; customFieldIndex<moduleConfig.getCustomFields().size(); customFieldIndex++) { String value = project.getCustomFieldValue(customFieldIndex); line.append(value); line.append(TABLE_DELIMITER); } line.append(project.getSelectedPlaces()); line.append(TABLE_DELIMITER); // loop over all events for (Project.EventType eventType : Project.EventType.values()) { if (moduleConfig.isProjectEventEnabled(eventType) ) { ProjectEvent projectEvent = project.getProjectEvent(eventType); if (projectEvent.getStartDate() != null) { line.append(translator.translate("export.event.start.prefix")); line.append(" "); line.append(projectEvent.getFormattedStartDate()); line.append(" "); } if (projectEvent.getEndDate() != null) { line.append(translator.translate("export.event.end.prefix")); line.append(" "); line.append(projectEvent.getFormattedEndDate()); } line.append(TABLE_DELIMITER); } } // loop over all paricipants StringBuilder participants = new StringBuilder(); boolean firstParticipants = true; List<Identity> participantList = CoreSpringFactory.getImpl(BusinessGroupService.class) .getMembers(project.getProjectGroup(), GroupRoles.participant.name()); for (Identity identity : participantList) { if (!firstParticipants) { participants.append(" , "); } String last = identity.getUser().getProperty(UserConstants.LASTNAME, t.getLocale()); String first= identity.getUser().getProperty(UserConstants.FIRSTNAME, t.getLocale()); participants.append(first); participants.append(" "); participants.append(last); firstParticipants = false; } line.append(participants.toString()); line.append(TABLE_DELIMITER); line.append(project.getKey().toString()); line.append(END_OF_LINE); return line.toString(); } private static String createHeaderLine(Translator t, ProjectBrokerModuleConfiguration moduleConfig) { StringBuilder line = new StringBuilder(); line.append(t.translate("export.header.title")); line.append(TABLE_DELIMITER); line.append(t.translate("export.header.projectleaders")); line.append(TABLE_DELIMITER); line.append(t.translate("export.header.projectstate")); line.append(TABLE_DELIMITER); // loop over enable customfileds for (Iterator<CustomField> iterator = moduleConfig.getCustomFields().iterator(); iterator.hasNext();) { line.append(iterator.next().getName()); line.append(TABLE_DELIMITER); } line.append(t.translate("export.header.selectedplaces")); line.append(TABLE_DELIMITER); // loop over events for (Project.EventType eventType : Project.EventType.values()) { if (moduleConfig.isProjectEventEnabled(eventType) ) { line.append(t.translate(eventType.getI18nKey())); line.append(TABLE_DELIMITER); } } line.append(t.translate("export.header.projectpaticipants")); line.append(TABLE_DELIMITER); line.append(t.translate("export.header.projectid")); line.append(END_OF_LINE); return line.toString(); } }