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 */
31 public interface ModelCache {
32 /**
33 * Puts the specified data into the cache.
34 *
35 * @param path The path of the cache record, must not be {@code null}.
36 * @param tag The tag of the cache record, must not be {@code null}.
37 * @param data The data to store in the cache, must not be {@code null}.
38 * @since 4.0.0
39 */
40 default void put(Source path, String tag, Object data) {
41 // only useful for ReactorModelCache
42 }
43
44 /**
45 * Gets the specified data from the cache.
46 *
47 * @param path The path of the cache record, must not be {@code null}.
48 * @param tag The tag of the cache record, must not be {@code null}.
49 * @return The requested data or {@code null} if none was present in the cache.
50 * @since 4.0.0
51 */
52 default Object get(Source path, String tag) {
53 // only useful for ReactorModelCache
54 return null;
55 }
56
57 /**
58 * Puts the specified data into the cache.
59 *
60 * @param groupId The group id of the cache record, must not be {@code null}.
61 * @param artifactId The artifact id of the cache record, must not be {@code null}.
62 * @param version The version of the cache record, must not be {@code null}.
63 * @param tag The tag of the cache record, must not be {@code null}.
64 * @param data The data to store in the cache, must not be {@code null}.
65 */
66 void put(String groupId, String artifactId, String version, String tag, Object data);
67
68 /**
69 * Gets the specified data from the cache.
70 *
71 * @param groupId The group id of the cache record, must not be {@code null}.
72 * @param artifactId The artifact id of the cache record, must not be {@code null}.
73 * @param version The version of the cache record, must not be {@code null}.
74 * @param tag The tag of the cache record, must not be {@code null}.
75 * @return The requested data or {@code null} if none was present in the cache.
76 */
77 Object get(String groupId, String artifactId, String version, String tag);
78
79 /**
80 * Puts the specified data into the cache.
81 *
82 * @param path The path of the cache record, must not be {@code null}.
83 * @param tag The tag of the cache record, must not be {@code null}.
84 * @param data The data to store in the cache, must not be {@code null}.
85 * @since 4.0.0
86 */
87 default <T> void put(Source path, ModelCacheTag<T> tag, T data) {
88 put(path, tag.getName(), tag.intoCache(data));
89 }
90
91 /**
92 * Gets the specified data from the cache.
93 *
94 * @param path The path of the cache record, must not be {@code null}.
95 * @param tag The tag of the cache record, must not be {@code null}.
96 * @return The requested data or {@code null} if none was present in the cache.
97 * @since 4.0.0
98 */
99 default <T> T get(Source path, ModelCacheTag<T> tag) {
100 Object obj = get(path, tag.getName());
101 return (obj != null) ? tag.fromCache(tag.getType().cast(obj)) : null;
102 }
103
104 /**
105 * Puts the specified data into the cache.
106 *
107 * @param groupId The group id of the cache record, must not be {@code null}.
108 * @param artifactId The artifact id of the cache record, must not be {@code null}.
109 * @param version The version of the cache record, must not be {@code null}.
110 * @param tag The tag of the cache record, must not be {@code null}.
111 * @param data The data to store in the cache, must not be {@code null}.
112 */
113 default <T> void put(String groupId, String artifactId, String version, ModelCacheTag<T> tag, T data) {
114 put(groupId, artifactId, version, tag.getName(), tag.intoCache(data));
115 }
116
117 /**
118 * Gets the specified data from the cache.
119 *
120 * @param groupId The group id of the cache record, must not be {@code null}.
121 * @param artifactId The artifact id of the cache record, must not be {@code null}.
122 * @param version The version of the cache record, must not be {@code null}.
123 * @param tag The tag of the cache record, must not be {@code null}.
124 * @return The requested data or {@code null} if none was present in the cache.
125 */
126 default <T> T get(String groupId, String artifactId, String version, ModelCacheTag<T> tag) {
127 Object obj = get(groupId, artifactId, version, tag.getName());
128 return (obj != null) ? tag.fromCache(tag.getType().cast(obj)) : null;
129 }
130 }