1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.model.building;
20
21 import org.apache.maven.building.Source;
22
23 /**
24 * Caches auxiliary data used during model building like already processed raw/effective models. The data in the cache
25 * is meant for exclusive consumption by the model builder and is opaque to the cache implementation. The cache key is
26 * formed by a combination of group id, artifact id, version and tag. The first three components generally refer to the
27 * identify of a model. The tag allows for further classification of the associated data on the sole discretion of the
28 * model builder.
29 *
30 * @author Benjamin Bentmann
31 * @author Robert Scholte
32 */
33 public interface ModelCache {
34 /**
35 * Puts the specified data into the cache.
36 *
37 * @param path The path of the cache record, must not be {@code null}.
38 * @param tag The tag of the cache record, must not be {@code null}.
39 * @param data The data to store in the cache, must not be {@code null}.
40 * @since 4.0.0
41 */
42 default void put(Source path, String tag, Object data) {
43 // only useful for ReactorModelCache
44 }
45
46 /**
47 * Gets the specified data from the cache.
48 *
49 * @param path The path of the cache record, must not be {@code null}.
50 * @param tag The tag of the cache record, must not be {@code null}.
51 * @return The requested data or {@code null} if none was present in the cache.
52 * @since 4.0.0
53 */
54 default Object get(Source path, String tag) {
55 // only useful for ReactorModelCache
56 return null;
57 }
58
59 /**
60 * Puts the specified data into the cache.
61 *
62 * @param groupId The group id of the cache record, must not be {@code null}.
63 * @param artifactId The artifact id of the cache record, must not be {@code null}.
64 * @param version The version of the cache record, must not be {@code null}.
65 * @param tag The tag of the cache record, must not be {@code null}.
66 * @param data The data to store in the cache, must not be {@code null}.
67 */
68 void put(String groupId, String artifactId, String version, String tag, Object data);
69
70 /**
71 * Gets the specified data from the cache.
72 *
73 * @param groupId The group id of the cache record, must not be {@code null}.
74 * @param artifactId The artifact id of the cache record, must not be {@code null}.
75 * @param version The version of the cache record, must not be {@code null}.
76 * @param tag The tag of the cache record, must not be {@code null}.
77 * @return The requested data or {@code null} if none was present in the cache.
78 */
79 Object get(String groupId, String artifactId, String version, String tag);
80
81 /**
82 * Puts the specified data into the cache.
83 *
84 * @param path The path of the cache record, must not be {@code null}.
85 * @param tag The tag of the cache record, must not be {@code null}.
86 * @param data The data to store in the cache, must not be {@code null}.
87 * @since 4.0.0
88 */
89 default <T> void put(Source path, ModelCacheTag<T> tag, T data) {
90 put(path, tag.getName(), tag.intoCache(data));
91 }
92
93 /**
94 * Gets the specified data from the cache.
95 *
96 * @param path The path of the cache record, must not be {@code null}.
97 * @param tag The tag of the cache record, must not be {@code null}.
98 * @return The requested data or {@code null} if none was present in the cache.
99 * @since 4.0.0
100 */
101 default <T> T get(Source path, ModelCacheTag<T> tag) {
102 Object obj = get(path, tag.getName());
103 return (obj != null) ? tag.fromCache(tag.getType().cast(obj)) : null;
104 }
105
106 /**
107 * Puts the specified data into the cache.
108 *
109 * @param groupId The group id of the cache record, must not be {@code null}.
110 * @param artifactId The artifact id of the cache record, must not be {@code null}.
111 * @param version The version of the cache record, must not be {@code null}.
112 * @param tag The tag of the cache record, must not be {@code null}.
113 * @param data The data to store in the cache, must not be {@code null}.
114 */
115 default <T> void put(String groupId, String artifactId, String version, ModelCacheTag<T> tag, T data) {
116 put(groupId, artifactId, version, tag.getName(), tag.intoCache(data));
117 }
118
119 /**
120 * Gets the specified data from the cache.
121 *
122 * @param groupId The group id of the cache record, must not be {@code null}.
123 * @param artifactId The artifact id of the cache record, must not be {@code null}.
124 * @param version The version of the cache record, must not be {@code null}.
125 * @param tag The tag of the cache record, must not be {@code null}.
126 * @return The requested data or {@code null} if none was present in the cache.
127 */
128 default <T> T get(String groupId, String artifactId, String version, ModelCacheTag<T> tag) {
129 Object obj = get(groupId, artifactId, version, tag.getName());
130 return (obj != null) ? tag.fromCache(tag.getType().cast(obj)) : null;
131 }
132 }