View Javadoc

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  }