org.dspace.app.rest.repository.SubmissionUploadRestRepository.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.rest.repository.SubmissionUploadRestRepository.java

Source

/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.app.rest.repository;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.dspace.app.rest.model.AccessConditionOptionRest;
import org.dspace.app.rest.model.SubmissionUploadRest;
import org.dspace.app.rest.model.hateoas.SubmissionUploadResource;
import org.dspace.app.rest.utils.DateMathParser;
import org.dspace.app.util.SubmissionConfig;
import org.dspace.app.util.SubmissionConfigReader;
import org.dspace.app.util.SubmissionConfigReaderException;
import org.dspace.app.util.SubmissionStepConfig;
import org.dspace.core.Context;
import org.dspace.eperson.Group;
import org.dspace.eperson.service.GroupService;
import org.dspace.submit.model.AccessConditionOption;
import org.dspace.submit.model.UploadConfiguration;
import org.dspace.submit.model.UploadConfigurationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;

/**
 * This is the repository responsible to manage Configuration Upload section
 * during the submission
 *
 * @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
 */
@Component(SubmissionUploadRest.CATEGORY + "." + SubmissionUploadRest.NAME)
public class SubmissionUploadRestRepository extends DSpaceRestRepository<SubmissionUploadRest, String>
        implements LinkRestRepository<SubmissionUploadRest> {

    private static final Logger log = Logger.getLogger(SubmissionUploadRestRepository.class);

    private SubmissionConfigReader submissionConfigReader;

    @Autowired
    private SubmissionFormRestRepository submissionFormRestRepository;

    @Autowired
    private UploadConfigurationService uploadConfigurationService;

    @Autowired
    GroupService groupService;

    DateMathParser dateMathParser = new DateMathParser();

    public SubmissionUploadRestRepository() throws SubmissionConfigReaderException {
        submissionConfigReader = new SubmissionConfigReader();
    }

    @Override
    public SubmissionUploadRest findOne(Context context, String submitName) {
        UploadConfiguration config = uploadConfigurationService.getMap().get(submitName);
        try {
            return convert(context, config);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }

    @Override
    public Page<SubmissionUploadRest> findAll(Context context, Pageable pageable) {
        List<SubmissionConfig> subConfs = new ArrayList<SubmissionConfig>();
        subConfs = submissionConfigReader.getAllSubmissionConfigs(pageable.getPageSize(), pageable.getOffset());
        List<SubmissionUploadRest> results = new ArrayList<>();
        for (SubmissionConfig config : subConfs) {
            for (int i = 0; i < config.getNumberOfSteps(); i++) {
                SubmissionStepConfig step = config.getStep(i);
                if (SubmissionStepConfig.UPLOAD_STEP_NAME.equals(step.getType())) {
                    UploadConfiguration uploadConfig = uploadConfigurationService.getMap().get(step.getId());
                    if (uploadConfig != null) {
                        try {
                            results.add(convert(context, uploadConfig));
                        } catch (Exception e) {
                            log.error(e.getMessage(), e);
                        }
                    }
                }
            }
        }
        return new PageImpl<SubmissionUploadRest>(results, pageable, results.size());
    }

    @Override
    public Class<SubmissionUploadRest> getDomainClass() {
        return SubmissionUploadRest.class;
    }

    @Override
    public SubmissionUploadResource wrapResource(SubmissionUploadRest sd, String... rels) {
        return new SubmissionUploadResource(sd, utils, rels);
    }

    private SubmissionUploadRest convert(Context context, UploadConfiguration config) throws Exception {
        SubmissionUploadRest result = new SubmissionUploadRest();
        for (AccessConditionOption option : config.getOptions()) {
            AccessConditionOptionRest optionRest = new AccessConditionOptionRest();
            if (option.getGroupName() != null) {
                Group group = groupService.findByName(context, option.getGroupName());
                if (group != null) {
                    optionRest.setGroupUUID(group.getID());
                }
            }
            if (option.getSelectGroupName() != null) {
                Group group = groupService.findByName(context, option.getSelectGroupName());
                if (group != null) {
                    optionRest.setSelectGroupUUID(group.getID());
                }
            }
            optionRest.setHasStartDate(option.getHasStartDate());
            optionRest.setHasEndDate(option.getHasEndDate());
            if (StringUtils.isNotBlank(option.getStartDateLimit())) {
                optionRest.setMaxStartDate(dateMathParser.parseMath(option.getStartDateLimit()));
            }
            if (StringUtils.isNotBlank(option.getEndDateLimit())) {
                optionRest.setMaxEndDate(dateMathParser.parseMath(option.getEndDateLimit()));
            }
            optionRest.setName(option.getName());
            result.getAccessConditionOptions().add(optionRest);
        }
        result.setMetadata(submissionFormRestRepository.findOne(config.getMetadata()));
        result.setMaxSize(config.getMaxSize());
        result.setRequired(config.isRequired());
        result.setName(config.getName());
        return result;
    }
}