Package org.olat.ims.qti.export

Source Code of org.olat.ims.qti.export.QTIExportManager

/**
* 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.
* <p>
*/

package org.olat.ims.qti.export;

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.olat.core.util.ExportUtil;
import org.olat.core.util.Formatter;
import org.olat.ims.qti.QTIResult;
import org.olat.ims.qti.QTIResultManager;
import org.olat.ims.qti.export.helper.QTIItemObject;
import org.olat.ims.qti.export.helper.QTIObjectTreeBuilder;

/**
* Description: TODO
*
* @author Alexander Schneider
*/
public class QTIExportManager {
 
  /**
   * <code>PACKAGE</code>
   */
  public static final String PACKAGE = QTIExportManager.class.getPackage().getName();

  private static QTIExportManager instance = new QTIExportManager();

  /**
   * Constructor for QTIResultManager.
   */
  private QTIExportManager() {
  //
  }

  /**
   * @return QTIResultManager
   */
  public static QTIExportManager getInstance() {
    return instance;
  }
 
  /**
   * @param locale
   * @param olatResource
   * @param shortTitle
   * @param olatResourceDetail
   * @param repositoryRef
   * @param type
   * @param exportDirectory
   * @param anonymizerCallback callback that should be used to anonymize the user names or NULL if row counter
   * should be used (only for type 2 and 3)
   */
  public void selectAndExportResults(QTIExportFormatter qef, Long olatResource, String shortTitle, String olatResourceDetail, Long repositoryRef,
    File exportDirectory, String charset, String fileNameSuffix) {
   
    QTIResultManager qrm = QTIResultManager.getInstance();
    List results = qrm.selectResults(olatResource, olatResourceDetail, repositoryRef, qef.getType());
    if(results.size() > 0){
      QTIResult res0 = (QTIResult) results.get(0);
     
      QTIObjectTreeBuilder qotb = new QTIObjectTreeBuilder(new Long(res0.getResultSet().getRepositoryRef()));
     
      List qtiItemObjectList = qotb.getQTIItemObjectList();
      qef.setQTIItemObjectList(qtiItemObjectList);
      if (results.size() > 0) {
        createContentOfExportFile(results,qtiItemObjectList,qef);
        writeContentToFile(shortTitle, exportDirectory, charset, qef, fileNameSuffix);
      }
    }
  }
 
  /**
   *
   * @param qef
   * @param results
   * @param qtiItemObjectList
   * @param shortTitle
   * @param exportDirectory
   * @param charset
   * @param fileNameSuffix
   * @return
   */
    public String exportResults(QTIExportFormatter qef, List results, List qtiItemObjectList, String shortTitle, File exportDirectory, String charset, String fileNameSuffix) {
      String targetFileName = null;
 
      qef.setQTIItemObjectList(qtiItemObjectList);
      if (results.size() > 0) {
        createContentOfExportFile(results,qtiItemObjectList,qef);
        targetFileName = writeContentToFile(shortTitle, exportDirectory, charset, qef, fileNameSuffix);
      }
      return targetFileName;
    }
 
 
  /**
   * @param locale Locale used for export file headers / default values
   * @param results
   * @param type
   * @param anonymizerCallback
   * @return String
   */
  private void createContentOfExportFile(List qtiResults, List qtiItemObjectList, QTIExportFormatter qef) {
   
    qef.openReport();
   
    //formatter has information about how to format the different qti objects
    Map mapWithConfigs = qef.getMapWithExportItemConfigs();
    QTIExportItemFactory qeif = new QTIExportItemFactory(mapWithConfigs);
       
    while (qtiResults.size() > 0){
      List assessIDresults = stripNextAssessID(qtiResults);
   
      qef.openResultSet(new QTIExportSet((QTIResult)assessIDresults.get(0)));
     
      for (Iterator iter = qtiItemObjectList.iterator(); iter.hasNext();) {
        QTIItemObject element = (QTIItemObject) iter.next();
       
        QTIResult qtir;
        qtir = element.extractQTIResult(assessIDresults);
        qef.visit(qeif.getExportItem(qtir,element));

      }
      qef.closeResultSet();
    }
    qef.closeReport()
  }

  /**
   * writes content of all results to a file
   */
  private String writeContentToFile(String shortTitle, File exportDirectory, String charset, QTIExportFormatter qef, String fileNameSuffix) {
    // defining target filename
    StringBuilder tf = new StringBuilder();
    tf.append(qef.getFileNamePrefix());
    tf.append(Formatter.makeStringFilesystemSave(shortTitle));
    tf.append("_");
    DateFormat myformat = new SimpleDateFormat("yyyy-MM-dd__hh-mm-ss__SSS");
    String timestamp = myformat.format(new Date());
    tf.append(timestamp);
    tf.append(fileNameSuffix);
    String targetFileName = tf.toString();

    ExportUtil.writeContentToFile(targetFileName, qef.getReport(), exportDirectory, charset);
   
    return targetFileName;
  }
 
  /**
   *
   * @param queryResult
   * @return List of results with the same assessmentid
   */   
  private List stripNextAssessID(List queryResult){
    List result = new ArrayList();
   
    if (queryResult.size()== 0) return result;
   
    QTIResult qtir = (QTIResult) queryResult.remove(0);
   
    long currentAssessmentID = qtir.getResultSet().getAssessmentID();
    result.add(qtir);
   
    while(queryResult.size()>0){
      qtir = (QTIResult) queryResult.remove(0);
      if (qtir.getResultSet().getAssessmentID() == currentAssessmentID) result.add(qtir);
      else {
        queryResult.add(0,qtir);
        break
      }
    }
    return result;
 
 
}
TOP

Related Classes of org.olat.ims.qti.export.QTIExportManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.