001/*-
002 * #%L
003 * HAPI FHIR JPA Server - International Patient Summary (IPS)
004 * %%
005 * Copyright (C) 2014 - 2024 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.ips.api;
021
022import org.hl7.fhir.instance.model.api.IBaseResource;
023import org.hl7.fhir.instance.model.api.IIdType;
024
025public class IpsContext {
026
027        private final IBaseResource mySubject;
028        private final IIdType mySubjectId;
029
030        /**
031         * Constructor
032         *
033         * @param theSubject   The subject Patient resource for the IPS being generated
034         * @param theSubjectId The original ID for {@literal theSubject}, which may not match the current ID if {@link IIpsGenerationStrategy#massageResourceId(IpsContext, IBaseResource)} has modified it
035         */
036        public IpsContext(IBaseResource theSubject, IIdType theSubjectId) {
037                mySubject = theSubject;
038                mySubjectId = theSubjectId;
039        }
040
041        /**
042         * Returns the subject Patient resource for the IPS being generated. Note that
043         * the {@literal Resource.id} value may not match the ID of the resource stored in the
044         * repository if {@link IIpsGenerationStrategy#massageResourceId(IpsContext, IBaseResource)} has
045         * returned a different ID. Use {@link #getSubjectId()} if you want the originally stored ID.
046         *
047         * @see #getSubjectId() for the originally stored ID.
048         */
049        public IBaseResource getSubject() {
050                return mySubject;
051        }
052
053        /**
054         * Returns the ID of the subject for the given IPS. This value should match the
055         * ID which was originally fetched from the repository.
056         */
057        public IIdType getSubjectId() {
058                return mySubjectId;
059        }
060
061        public <T extends IBaseResource> IpsSectionContext<T> newSectionContext(
062                        Section theSection, Class<T> theResourceType) {
063                return new IpsSectionContext<>(mySubject, mySubjectId, theSection, theResourceType);
064        }
065}