org.opendatakit.aggregate.format.element.XmlMediaAttachmentFormatter.java Source code

Java tutorial

Introduction

Here is the source code for org.opendatakit.aggregate.format.element.XmlMediaAttachmentFormatter.java

Source

/*
 * Copyright (C) 2011 University of Washington
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.opendatakit.aggregate.format.element;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringEscapeUtils;
import org.opendatakit.aggregate.constants.HtmlUtil;
import org.opendatakit.aggregate.constants.ServletConsts;
import org.opendatakit.aggregate.datamodel.FormElementModel;
import org.opendatakit.aggregate.format.Row;
import org.opendatakit.aggregate.format.structure.XmlAttachmentFormatter;
import org.opendatakit.aggregate.servlet.BinaryDataServlet;
import org.opendatakit.aggregate.submission.SubmissionKey;
import org.opendatakit.aggregate.submission.SubmissionRepeat;
import org.opendatakit.aggregate.submission.type.BlobSubmissionType;
import org.opendatakit.aggregate.submission.type.GeoPoint;
import org.opendatakit.common.persistence.exception.ODKDatastoreException;
import org.opendatakit.common.web.CallingContext;
import org.opendatakit.common.web.constants.BasicConsts;

/**
 * Emits the list of media filenames and URLs for a given form.
 * Used for the new briefcase download.
 *
 * @author mitchellsundt@gmail.com
 *
 */
public class XmlMediaAttachmentFormatter implements ElementFormatter {
    XmlAttachmentFormatter xmlAttachmentFormatter;

    /**
     * Construct a XML Media Attachment Formatter
    * @param xmlAttachmentFormatter
     *
     */
    public XmlMediaAttachmentFormatter(XmlAttachmentFormatter xmlAttachmentFormatter) {
        this.xmlAttachmentFormatter = xmlAttachmentFormatter;
    }

    @Override
    public void formatUid(String uri, String propertyName, Row row) {
    }

    @Override
    public void formatBinary(BlobSubmissionType blobSubmission, FormElementModel element, String ordinalValue,
            Row row, CallingContext cc) throws ODKDatastoreException {

        if (blobSubmission == null || (blobSubmission.getAttachmentCount(cc) == 0)
                || (blobSubmission.getContentHash(1, cc) == null)) {
            return;
        }

        String urlLink;
        {
            Map<String, String> properties = new HashMap<String, String>();
            SubmissionKey k = blobSubmission.generateSubmissionKey(1);
            properties.put(ServletConsts.BLOB_KEY, k.toString());
            properties.put(ServletConsts.AS_ATTACHMENT, "true");
            String downloadRequestURL = cc.getServerURL() + BasicConsts.FORWARDSLASH + BinaryDataServlet.ADDR;
            urlLink = HtmlUtil.createLinkWithProperties(downloadRequestURL, properties);
        }
        // parallel to XFormsManifestXmlTable
        String xmlString = "<mediaFile>" + "<filename>"
                + StringEscapeUtils.escapeXml10(blobSubmission.getUnrootedFilename(1, cc)) + "</filename>"
                + "<hash>" + StringEscapeUtils.escapeXml10(blobSubmission.getContentHash(1, cc)) + "</hash>"
                + "<downloadUrl>" + StringEscapeUtils.escapeXml10(urlLink) + "</downloadUrl>" + "</mediaFile>\n";

        row.addFormattedValue(xmlString);
    }

    @Override
    public void formatBoolean(Boolean bool, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatChoices(List<String> choices, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatDate(Date date, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatDateTime(Date date, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatTime(Date date, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatDecimal(BigDecimal dub, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatGeoPoint(GeoPoint coordinate, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatLong(Long longInt, FormElementModel element, String ordinalValue, Row row) {
    }

    @Override
    public void formatRepeats(SubmissionRepeat repeat, FormElementModel repeatElement, Row row, CallingContext cc)
            throws ODKDatastoreException {
        xmlAttachmentFormatter.processRepeatedSubmssionSetsIntoRow(repeat.getSubmissionSets(), repeatElement, row,
                cc);
    }

    @Override
    public void formatString(String string, FormElementModel element, String ordinalValue, Row row) {
    }

}