1 /* 2 * Copyright 2015 Data Archiving and Networked Services (an institute of 3 * Koninklijke Nederlandse Akademie van Wetenschappen), King's College London, 4 * Georg-August-Universitaet Goettingen Stiftung Oeffentlichen Rechts 5 * 6 * Licensed under the EUPL, Version 1.1 or – as soon they will be approved by 7 * the European Commission - subsequent versions of the EUPL (the "Licence"); 8 * You may not use this work except in compliance with the Licence. 9 * You may obtain a copy of the Licence at: 10 * 11 * https://joinup.ec.europa.eu/software/page/eupl 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the Licence is distributed on an "AS IS" basis, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the Licence for the specific language governing 17 * permissions and limitations under the Licence. 18 */ 19 20 package eu.ehri.project.models.annotations; 21 22 import java.lang.annotation.ElementType; 23 import java.lang.annotation.Retention; 24 import java.lang.annotation.RetentionPolicy; 25 import java.lang.annotation.Target; 26 27 /** 28 * Marks the entity pointed to by the framed Adjacency as one that should 29 * typically be fetched and displayed along with the master object. 30 */ 31 @Retention(RetentionPolicy.RUNTIME) 32 @Target(ElementType.METHOD) 33 public @interface Fetch { 34 int DEFAULT_TRAVERSALS = 10; 35 36 /** 37 * Only serialize this relationship if the depth of traversal 38 * is below this value. The default value is {@value #DEFAULT_TRAVERSALS}. 39 * 40 * @return the level below which this relationship should be traversed 41 */ 42 int ifBelowLevel() default DEFAULT_TRAVERSALS; 43 44 /** 45 * Only traverse this relationship at the specified level. Ignored 46 * if the level is less than 0. 47 * 48 * @return the level at which this relation should be traversed 49 */ 50 int ifLevel() default -1; 51 52 /** 53 * The number of levels this relationship should traverse 54 * from the current item. i.e. if this item is at level N 55 * the serialization of it's relations should stop at level 56 * N + {@code Fetch.numLevels()}. 57 */ 58 int numLevels() default -1; 59 60 /** 61 * Only serialize this relation when not serializing in 62 * 'lite' mode. 63 * @return to serialize or not 64 */ 65 boolean whenNotLite() default false; 66 67 /** 68 * Always serialize in full mode, regardless of whether 69 * lite serialization is enabled. 70 * 71 * @return override lite mode serialization 72 */ 73 boolean full() default false; 74 75 /** 76 * The name of the relation when serialized. 77 * 78 * @return the relation name 79 */ 80 String value(); 81 }