001/* 002 * Portions of this software was developed by employees of the National Institute 003 * of Standards and Technology (NIST), an agency of the Federal Government and is 004 * being made available as a public service. Pursuant to title 17 United States 005 * Code Section 105, works of NIST employees are not subject to copyright 006 * protection in the United States. This software may be subject to foreign 007 * copyright. Permission in the United States and in foreign countries, to the 008 * extent that NIST may hold copyright, to use, copy, modify, create derivative 009 * works, and distribute this software and its documentation without fee is hereby 010 * granted on a non-exclusive basis, provided that this notice and disclaimer 011 * of warranty appears in all copies. 012 * 013 * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER 014 * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY 015 * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF 016 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM 017 * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE 018 * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE. IN NO EVENT 019 * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, 020 * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, 021 * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY, 022 * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR 023 * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT 024 * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER. 025 */ 026 027package gov.nist.secauto.oscal.lib.profile.resolver.policy; 028 029import gov.nist.secauto.oscal.lib.profile.resolver.support.IEntityItem; 030 031import java.util.List; 032 033import edu.umd.cs.findbugs.annotations.NonNull; 034 035public interface ICustomReferencePolicyHandler<TYPE> { 036 @NonNull 037 ICustomReferencePolicyHandler<?> IGNORE_INDEX_MISS_POLICY = new AbstractIndexMissPolicyHandler<>() { 038 @Override 039 public boolean handleIndexMiss( 040 @NonNull ICustomReferencePolicy<Object> policy, 041 @NonNull Object type, 042 @NonNull List<IEntityItem.ItemType> itemTypes, 043 @NonNull String identifier, 044 @NonNull IReferenceVisitor<?> visitor) { 045 // do nothing 046 return true; 047 } 048 }; 049 050 /** 051 * A callback used to handle the case where an identifier could not be parsed 052 * from the reference text. 053 * 054 * @param policy 055 * the reference policy for this reference 056 * @param reference 057 * the reference object 058 * @param visitor 059 * the reference visitor used to resolve referenced objects 060 * @return {@code true} if the reference is considered handled, or {@code false} 061 * otherwise 062 */ 063 default boolean handleIdentifierNonMatch( 064 @NonNull ICustomReferencePolicy<TYPE> policy, 065 @NonNull TYPE reference, 066 @NonNull IReferenceVisitor<?> visitor) { 067 return false; 068 } 069 070 /** 071 * A callback used to handle the case where an identifier could be parsed from 072 * the reference text, but the index didn't contain a matching entity. 073 * 074 * @param policy 075 * the reference policy for this reference 076 * @param reference 077 * the reference object 078 * @param itemTypes 079 * the item types that were checked 080 * @param identifier 081 * the parsed identifier 082 * @param visitor 083 * the reference visitor used to resolve referenced objects 084 * @return {@code true} if the reference is considered handled, or {@code false} 085 * otherwise 086 */ 087 default boolean handleIndexMiss( 088 @NonNull ICustomReferencePolicy<TYPE> policy, 089 @NonNull TYPE reference, 090 @NonNull List<IEntityItem.ItemType> itemTypes, 091 @NonNull String identifier, 092 @NonNull IReferenceVisitor<?> visitor) { 093 return false; 094 } 095 096 /** 097 * A callback used to handle the case where an identifier could be parsed and 098 * the index contains a matching entity. 099 * 100 * @param policy 101 * the reference policy for this reference 102 * @param reference 103 * the reference object 104 * @param item 105 * the entity that is referenced 106 * @param visitor 107 * the reference visitor used to resolve referenced objects 108 * @return {@code true} if the reference is considered handled, or {@code false} 109 * otherwise 110 */ 111 default boolean handleIndexHit( 112 @NonNull ICustomReferencePolicy<TYPE> policy, 113 @NonNull TYPE reference, 114 @NonNull IEntityItem item, 115 @NonNull IReferenceVisitor<?> visitor) { 116 return false; 117 } 118}