001/*-
002 * #%L
003 * HAPI FHIR Storage api
004 * %%
005 * Copyright (C) 2014 - 2023 Smile CDR, Inc.
006 * %%
007 * Licensed under the Apache License, Version 2.0 (the "License");
008 * you may not use this file except in compliance with the License.
009 * You may obtain a copy of the License at
010 *
011 *      http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 * #L%
019 */
020package ca.uhn.fhir.jpa.util;
021
022import ca.uhn.fhir.jpa.api.model.BulkExportParameters;
023import ca.uhn.fhir.rest.api.server.bulk.BulkDataExportOptions;
024import ca.uhn.fhir.util.Batch2JobDefinitionConstants;
025import org.apache.commons.collections4.CollectionUtils;
026import org.hl7.fhir.instance.model.api.IIdType;
027
028import java.util.ArrayList;
029import java.util.stream.Collectors;
030
031public class BulkExportUtils {
032        private BulkExportUtils() {}
033
034        /**
035         * Converts the BulkDataExportOptions -> BulkExportParameters
036         */
037        public static BulkExportParameters createBulkExportJobParametersFromExportOptions(BulkDataExportOptions theOptions) {
038                BulkExportParameters parameters = new BulkExportParameters(Batch2JobDefinitionConstants.BULK_EXPORT);
039
040                parameters.setSince(theOptions.getSince());
041                parameters.setOutputFormat(theOptions.getOutputFormat());
042                parameters.setExportStyle(theOptions.getExportStyle());
043                parameters.setFilters(new ArrayList<>(theOptions.getFilters()));
044                parameters.setPostFetchFilterUrls(new ArrayList<>(theOptions.getPostFetchFilterUrls()));
045                if (theOptions.getGroupId() != null) {
046                        parameters.setGroupId(theOptions.getGroupId().getValue());
047                }
048                if (CollectionUtils.isNotEmpty(theOptions.getResourceTypes())) {
049                        parameters.setResourceTypes(new ArrayList<>(theOptions.getResourceTypes()));
050                }
051                if (CollectionUtils.isNotEmpty(theOptions.getPatientIds())) {
052                        parameters.setPatientIds(theOptions.getPatientIds().stream().map(IIdType::getValue).collect(Collectors.toList()));
053                }
054                parameters.setExpandMdm(theOptions.isExpandMdm());
055                parameters.setUseExistingJobsFirst(true);
056                parameters.setExportIdentifier(theOptions.getExportIdentifier());
057
058                return parameters;
059        }
060}