001/* 002 * #%L 003 * HAPI FHIR - Core Library 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.util; 021 022import ca.uhn.fhir.context.BaseRuntimeChildDefinition; 023import ca.uhn.fhir.context.BaseRuntimeElementDefinition; 024import org.hl7.fhir.instance.model.api.IBase; 025import org.hl7.fhir.instance.model.api.IBaseExtension; 026 027import java.util.List; 028 029/** 030 * THIS API IS EXPERIMENTAL IN HAPI FHIR - USE WITH CAUTION AS THE PUBLISHED API MAY 031 * CHANGE 032 * 033 * @see FhirTerser#visit(IBase, IModelVisitor2) 034 */ 035public interface IModelVisitor2 { 036 037 /** 038 * @param theElement The element being visited 039 * @param theContainingElementPath The elements in the path leading up to the actual element being accepted. The first element in this path will be the outer resource being visited, and the last element will be the saem object as the object passed as <code>theElement</code> 040 */ 041 boolean acceptElement( 042 IBase theElement, 043 List<IBase> theContainingElementPath, 044 List<BaseRuntimeChildDefinition> theChildDefinitionPath, 045 List<BaseRuntimeElementDefinition<?>> theElementDefinitionPath); 046 047 /** 048 * 049 */ 050 default boolean acceptUndeclaredExtension( 051 IBaseExtension<?, ?> theNextExt, 052 List<IBase> theContainingElementPath, 053 List<BaseRuntimeChildDefinition> theChildDefinitionPath, 054 List<BaseRuntimeElementDefinition<?>> theElementDefinitionPath) { 055 return true; 056 } 057}